标题: 关于独立式键盘 求大神帮忙 [打印本页]
作者: 肖佳浩 时间: 2017-6-2 09:33
标题: 关于独立式键盘 求大神帮忙
已知独立式键盘的接口电路如图1所示。要求编写由定时器T1中断方式2控制的键盘扫描程序,实现如下功能:
① 按下S1键,P3口8位LED灯低四位点亮,高四位熄灭;
② 按下S2键,P3口8位LED灯低四位熄灭,高四位点亮;
③ 按下S3键,P3口8位LED灯熄灭;
④ 按下S4键,P3口8位LED灯闪烁。
#include<reg51.h>
unsigned char tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //段码表
sbit S1=P1^4; //将S1位定义为P1.4引脚
sbit S2=P1^5; //将S2位定义为P1.5引脚
sbit S3=P1^6; //将S3位定义为P1.6引脚
sbit S4=P1^7; //将S4位定义为P1.7引脚
unsigned char key=0;
/*流水灯延时*/
void delay0()
{
unsigned char i,j;
for(i=0;i<250;i++)
for(j=0;j<250;j++)
;
}
/*软件消抖延时*/
void delay1()
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
;
}
/*正转*/
void zheng()
{
int i;
for(i=0;i<8;i++)
{P3=tab[ i];
delay0();}
}
/*反转*/
void fan()
{
int i;
for(i=7;i>=0;i--)
{P3=tab[ i];
delay0();}
}
/*关闭*/
void close()
{
P3=0xff;
}
/*闪烁*/
void shan()
{
P3=0xff;
delay0();
P3=0x00;
delay0();
}
void main()
{
TMOD=0x10; //定时器1工作与状态1
EA=1; //开总中断
ET1=1; //开定时器1中断
TH1=(65536-1000)/256; //每1毫秒扫描一次
TL1=(65536-1000)%256;
TR1=1; //启动定时器1
while(1)
{
switch(key)
{
case 1: zheng();
break;
case 2: fan();
break;
case 3: close();
break;
case 4: shan();
break;
}
}
}
void int1() interrupt 3 using 0
{
P1=0xf0;
TR1=0;
if((P1&0xf0)!=0xf0) //判断是否有按键按下
{
delay1(); //用软件延时消抖
if((P1&0xf0)!=0xf0) //再判断
{
if(S1==0)
key=1;
if(S2==0)
key=2;
if(S3==0)
key=3;
if(S4==0)
key=4;
}
}
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
TR1=1;
}
我要怎么修改呀,就是改不对,求指点
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |