|

楼主 |
发表于 2022-1-3 13:41:48
|
显示全部楼层
case 0xfe:time1=time_set;break;
case 0xfd:time2=time_set;break;
case 0xfc:time3=time_set;break;
case 0xfb:time4=time_set;break;
case 0xf7:time5=time_set;break;
case 0xef:time6=time_set;break;
case 0xdf:time7=time_set;break;
case 0x7f:key_out=0xff;break;
0xfc应该是fb吧? 我百度了下二进制改十六进制,摸索着改了下。没改之前测试P2^3输出不正常,改成下面这样就正常了。对了,我还增加了一路,复位按钮直接RST代替了。
{
case 0xfe:time1=time_set;break;
case 0xfd:time2=time_set;break;
case 0xfb:time3=time_set;break;
case 0xf7:time4=time_set;break;
case 0xef:time5=time_set;break;
case 0xdf:time6=time_set;break;
case 0xbf:time7=time_set;break;
case 0x7f:time8=time_set;break;
default: break;
}
}
现在全文是这样,问号是字体问题,懒得改了。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define key_bord P1 //P1^0~P1^6??1~7#?,P1^7?8#?,??????
#define key_out P0 //P2^0~P2^6??1~7#?????,??????
uint time1,time2,time3,time4,time5,time6,time7,time8; //1~7#?????????
uint time_set=6; //6??????
void InitTimer0(void) //8?????,250?????
{
TMOD = 0x02;
TH0 = 0x00;
TL0 = 0x06;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0() interrupt 1 //???0????,8??????
{
uchar i,k;
i++;
if(i==200) //200*250=50000??=50???
{
i=0;
k++;
}
if(k==20) //20*50??=1??
{
k=0;
if(time1)time1--; //?1??????
else key_out|=0x01;
if(time2)time2--; //?1??????
else key_out|=0x02;
if(time3)time3--; //?1??????
else key_out|=0x04;
if(time4)time4--; //?1??????
else key_out|=0x08;
if(time5)time5--; //?1??????
else key_out|=0x10;
if(time6)time6--; //?1??????
else key_out|=0x20;
if(time7)time7--; //?1??????
else key_out|=0x40;
if(time8)time8--; //?1??????
else key_out|=0x80;
}
}
void key_scan(void) //??????
{
if(key_bord!=0xff) //???????
{
key_out&=key_bord; //??????,????????,???????P2?,?????????
}
switch(key_bord)
{
case 0xfe:time1=time_set;break;
case 0xfd:time2=time_set;break;
case 0xfb:time3=time_set;break;
case 0xf7:time4=time_set;break;
case 0xef:time5=time_set;break;
case 0xdf:time6=time_set;break;
case 0xbf:time7=time_set;break;
case 0x7f:time8=time_set;break;
default: break;
}
}
void main(void)
{
InitTimer0();
while(1)
{
key_scan();
}
}
|
|