3*8 鍵盤輸入 led數碼管向前滾動輸入 0~f C51 單片機 protues仿真+代碼
壓縮包里有 protues仿真工程 和keil 代碼
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (39.61 KB, 下載次數: 46)
下載附件
2020-6-16 15:55 上傳
51hei.png (37.13 KB, 下載次數: 43)
下載附件
2020-6-16 15:56 上傳
51hei.png (26.79 KB, 下載次數: 51)
下載附件
2020-6-16 15:59 上傳
單片機源程序如下:
- #include<reg51.h>
- #include<absacc.h>
- #define COM8279 XBYTE[0x7fff] //這個是命令口。是CS
- #define DAT8279 XBYTE[0x7eff] //這個是數據口。是A0
- #define uchar unsigned char
- uchar code table[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//0-F,-
- uchar idata keybuffer[6]={16,16,16,16,16,16}; // 臨時放需要顯示的數字的地方
- sbit clflag=ACC^7;
- uchar key;
- uchar Keyflag;
- uchar run_once=1;
- uchar flag_display;
- uchar p;
- void delay(uchar x) //延時子程序
- {
- uchar i;
- for(i=0;i<x;i++);
-
- }
- void Display() //顯示函數
- {
-
- uchar i;
- COM8279=0X90;
- for(i=0;i<6;i++)
- {
- COM8279=i+0x80;
- DAT8279=table[keybuffer[i]];
- delay(10);
- }
- }
- void Disp(d) //顯示函數,
- {
- COM8279=0X90;
- COM8279=0x80;
- DAT8279=table[d];
- delay(10);
- }
-
- void Key_0(void) interrupt 0 using 1 //鍵盤按鍵使用外部中斷0
- {
- uchar ch;
- COM8279=0x40;
- ch=DAT8279;
- ch&=0x3f;
- key=ch;
-
- flag_display=1;
-
-
-
-
- if(key==0)
- {
- if(run_once==1)
- {
- run_once=0;
- return;
- }
-
- }
- if(key!=0x00&&key!=0x01&&key!=0x02&&key!=0x03&&key!=0x04&&key!=0x05&&key!=0x06&&key!=0x07&&key!=0x08
- &&key!=0x09&&key!=0x0a&&key!=0x0b&&key!=0x0c&&key!=0x0d&&key!=0x0e&&key!=0x0f)
- {
-
- key=17;
- }
-
-
-
-
- if(p>6)
- {
- p = 0;
-
- }
- keybuffer[5]=keybuffer[4];
- keybuffer[4]=keybuffer[3];
- keybuffer[3]=keybuffer[2];
- keybuffer[2]=keybuffer[1];
- keybuffer[1]= keybuffer[0];
- keybuffer[0]=key;
- Keyflag=1;
- p++;
-
-
-
- }
- void KeyTest(uchar keyh) //鍵盤按鍵處理及通道選擇程序
- {
-
- if(key!=0x00&&key!=0x01&&key!=0x02&&key!=0x03&&key!=0x04&&key!=0x05&&key!=0x06&&key!=0x07&&key!=0x08
- &&key!=0x09&&key!=0x0a&&key!=0x0b&&key!=0x0c&&key!=0x0d&&key!=0x0e&&key!=0x0f)
- {
-
- Disp(0x10);
- }
-
-
-
- switch (keyh)
- {
- case 0x00:{//按鍵0
- Disp(key);
- break;}
- case 0x01:{//按鍵1
- Disp(key);
- break;}
- case 0x02:{//按鍵2
- Disp(key);
- break;}
- case 0x03:{//按鍵3
- Disp(key);
- break;}
- case 0x04:{//按鍵4
- Disp(key);
- break;}
- case 0x05:{//按鍵5
- Disp(key);
- break;}
- case 0x06:{//按鍵6
- Disp(key);
- break;}
- case 0x07:{//按鍵7
- Disp(key);
- break;}
- case 0x08:{//按鍵0
- Disp(key);
- break;}
- case 0x09:{//按鍵1
- Disp(key);
- break;}
- case 0x0a:{//按鍵5
- Disp(key);
- break;}
- case 0x0b:{//按鍵6
- Disp(key);
- break;}
- case 0x0c:{//按鍵7
-
- Disp(key);
- case 0x0d:{//按鍵0
- Disp(key);
- break;}
- case 0x0e:{//按鍵1
-
- Disp(key);
- break;}
-
- case 0x0f:{//按鍵1
- Disp(key);
-
- break;}
-
- default:
- break; }
- }
- }
- void main(void)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
多鍵值輸入顯示.zip
(147.26 KB, 下載次數: 57)
2020-6-15 15:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|