按你的圖寫的程序
無標題.jpg (194.79 KB, 下載次數: 0)
下載附件
2024-11-3 14:50 上傳
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00};
- uchar data dis_buf[]={10,10,10,10,10,10,10,10,10};
- uchar key=0;//鍵值變量
- void delayms(uint k)
- {
- uint i,j;
- for(i=k;i>0;i--)
- for(j=115;j>0;j--);
- }
- void key_scan() //按鍵掃描程序
- {
- static bit sign=0; //按鍵自鎖標志
- static uint count=0; //消抖計數變量
- uchar num=0,i; //臨時變量
- P1=0xf0; //賦值P1 1111 0000
- if(P1!=0xf0) //檢測有按鍵按下
- {
- if((++count>=20)&&(sign==0)) //消抖計數10~1000,根據主循環周期調整約10~20ms
- {
- sign=1; //按鍵自鎖標志置1
- num=P1; //保存P1值xxxx 0000,x為0或1
- num|=0x0f; //保存num按位或0x0f值xxxx 1111
- P1=num; //賦值P1 xxxx 1111
- num=P1; //保存P1值xxxx xxxx
- switch(num)
- {
- case 0xee: key= 0; break;
- case 0xde: key= 1; break;
- case 0xbe: key= 2; break;
- case 0x7e: key= 3; break;
- case 0xed: key= 4; break;
- case 0xdd: key= 5; break;
- case 0xbd: key= 6; break;
- case 0x7d: key= 7; break;
- case 0xeb: key= 8; break;
- case 0xdb: key= 9; break;
- default: key=10; break;
- // case 0xbb: key=10; break;
- // case 0x7b: key=11; break;
- // case 0xe7: key=12; break;
- // case 0xd7: key=13; break;
- // case 0xb7: key=14; break;
- // case 0x77: key=15; break;
- }
- dis_buf[8]=key;
- for(i=0;i<8;i++)
- dis_buf[i]=dis_buf[i+1];
- }
- }
- else //鍵抬起
- {
- sign=0; //按鍵自鎖標志清0
- count=0; //消抖計數清0
- }
- }
- void display() //數碼管顯示程序
- {
- static uchar i;
- P0=0x00;
- P2&=0xf8;
- P2|=i;
- P0=table[dis_buf[i]];
- i=++i%8;
- }
- void main() //主函數
- {
- while(1)
- {
- key_scan(); //按鍵掃描程序
- display(); //數碼管顯示0~9
- delayms(1); //延時控制主循環周期約1ms
- }
- }
復制代碼
|