原創輸出程序
晶振的速度與掃描輸出無關
晶振速度越快,掃描速度就越快
建議是12MHz,12T模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
整體電路圖.png (89.96 KB, 下載次數: 62)
下載附件
整體電路圖
2018-1-13 10:27 上傳
啟動后.png (100.4 KB, 下載次數: 54)
下載附件
啟動后
2018-1-13 10:27 上傳
當按下某個按鍵時.png (101.35 KB, 下載次數: 59)
下載附件
當按下某個按鍵時
2018-1-13 10:27 上傳
效果1.jpg (1.18 MB, 下載次數: 77)
下載附件
效果1
2018-1-13 10:27 上傳
效果2.jpg (1.09 MB, 下載次數: 57)
下載附件
效果2
2018-1-13 10:27 上傳
效果3.jpg (1.16 MB, 下載次數: 76)
下載附件
效果3
2018-1-13 10:29 上傳
單片機源程序如下:
- #include <reg52.h>
- #include "lcd.c"
- #define GPIO_KEY P1
- uchar KeyValue;
- //存放捕獲到的鍵值
- uchar KeyState;
- const uchar dat[]="0123456789ABCDEF";
- const uchar output[]={ //單個16進制
- 0xf0,0xf1,0xf2,0xf3,
- 0xf4,0xf5,0xf6,0xf7,
- 0xf8,0xf9,0xfa,0xfb,
- 0xfc,0xfd,0xfe,0xff
- };
- void Delay10ms() //延時10毫秒,誤差0微秒
- {
- uchar a,b,c;
- for(c=1;c>0;c--)
- for(b=38;b>0;b--)
- for(a=130;a>0;a--);
- }
- void keyscan()
- {
- char a;
- GPIO_KEY=0x0f;
- if(GPIO_KEY!=0x0f)
- {
- Delay10ms();
- if(GPIO_KEY!=0x0f)
- {
- KeyState=1;
- //測試列
- GPIO_KEY=0X0F;
- // Delay10ms();
- switch(GPIO_KEY)
- {
- case(0X07): KeyValue=0;break;
- case(0X0b): KeyValue=1;break;
- case(0X0d): KeyValue=2;break;
- case(0X0e): KeyValue=3;break;
- // default: KeyValue=17; //檢測出錯回復17意思是把數碼管全滅掉
- }
- //測試行
- GPIO_KEY=0XF0;
- Delay10ms();
- switch(GPIO_KEY)
- {
- case(0X70): KeyValue=KeyValue;break;
- case(0Xb0): KeyValue=KeyValue+4;break;
- case(0Xd0): KeyValue=KeyValue+8;break;
- case(0Xe0): KeyValue=KeyValue+12;break;
- // default: KeyValue=17;
- }
- while((a<50)&&(GPIO_KEY!=0xf0)) //檢測按鍵松手檢測
- {
- Delay10ms();
- a++;
- }
- a=0;
- }
- }
- }
- void main()
- {
- P3=0xf0;
- LcdInit();
- LcdPrintf("by:With commands");
- while(1)
- {
- keyscan();
- if(KeyState)
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (15.94 KB, 下載次數: 62)
下載附件
2018-1-13 18:08 上傳
所有資料51hei提供下載:
button.zip
(49.73 KB, 下載次數: 46)
2018-1-13 10:30 上傳
點擊文件名下載附件
程序文件及仿真 下載積分: 黑幣 -5
|