你的程序问题多多,给你改了,仿真正常,你自己对照查找问题。
- #include<reg51.h>
- #include<intrins.h>
- #define u8 unsigned char
- #define u16 unsigned int
- sbit K1 = P1^4;
- sbit K2 = P1^5;
- sbit K3 = P1^6;
- sbit K4 = P1^7;
- u8 code discode[]={//共阳数码管段码"0~f-."
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e,0xbf,0x7f};
- u8 code data1[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位码
- //u8 code data1[8]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20,~0x40,~0x80};//三极管反向位码
- u8 data2[8]; //定义时分秒的十位和个位
- u8 shi,fen,miao;//时分秒变量
- u16 count = 0;//中断次数
- u8 num;//键值变量
- void process(void) //数据处理函数,分别分离其十位和个位
- {
- data2[0] = shi / 10;
- data2[1] = shi % 10;
- data2[2] = 16;
- data2[3] = fen / 10;
- data2[4] = fen % 10;
- data2[5] = 16;
- data2[6] = miao / 10;
- data2[7] = miao % 10;
- }
- void display(void) //显示程序 //数据显示函数
- {
- static u8 i=0;
- P0 = 0xff;
- P2=data1[i];
- P0 = discode[data2[i]];
- i++;
- if(i==8)
- i=0;
- }
- void horse()//根据不同按键执行相应功能
- {
- switch(num)
- {
- case 0xe0:
- shi++;
- if(shi == 24) shi = 0; break;
- case 0xd0:
- shi--;
- if(shi == 255) shi = 23; break;
- case 0xb0:
- fen++;
- if(fen == 60) fen = 0; break;
- case 0x70:
- fen--;
- if(fen == 255) fen = 59; break;
- }
- }
- void keyproc(void) //按键扫描及处理函数
- {
- static bit sign=0; //按键自锁标志
- static u16 count1=0; //消抖计数变量
- u8 key; //保存按键状态码
- key=P1&0xf0;
- if(key!=0xf0)
- {
- count1++; //消抖计数
- if((count1>=500)&&(sign==0))//100~1000,根据主循环周期调整约10~20ms
- {
- sign=1; //按键自锁标志置1
- num=key;
- horse();
- }
- }
- else //键抬起
- {
- sign=0; //按键自锁标志清0
- count1=0; //消抖计数清0
- }
- }
- void main(void)
- {
- TMOD = 0x01;
- TH0 = (65536 - 1000) / 256;
- TL0 = (65536 - 1000) % 256;
- TR0 = 1;
- EA = 1;
- ET0 = 1;
- while(1)
- {
- keyproc(); //按键处理
- process(); //数据处理
- // display(); //显示数据
- }
- }
- void timer0(void) interrupt 1 using 1 //定时中断函数1ms
- {
- TH0 = (65536 - 1000) / 256;
- TL0 = (65536 - 1000) % 256;
- count++;
- if(count == 1000)
- {
- count = 0;
- miao++;
- if(miao == 60)
- {
- miao = 0;
- fen++;
- if(fen == 60)
- {
- fen = 0;
- shi++;
- if(shi == 24)
- shi = 0;
- }
- }
- }
- display(); //显示数据
- }
复制代码
|