你的程序問題多多,給你改了,仿真正常,你自己對照查找問題。
無標題.jpg (285.37 KB, 下載次數: 26)
下載附件
2019-2-15 22:51 上傳
- #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(); //顯示數據
- }
復制代碼
|