|
protues仿真圖:
微信截圖_20180717193646.png (249.13 KB, 下載次數: 58)
下載附件
仿真圖
2018-7-17 19:39 上傳
- /*******************************************************************************
- * 標題: 矩陣鍵盤顯示數字到靜態數碼管 *
- * 時間 2018年7月17日00:45:03 *
- * *
- * 實驗說明:用矩陣鍵盤上的16個按鍵,分別為0、1、3、4、5、6、7、8、9、a、b、c *
- d、e、f顯示到靜態數碼管上 * *
- ********************************************************************************
- * 實驗心得: *
- 1.測試行(row)的時候就是線是豎著的的那一列為1,測試列(col)的時候就是 *
- 線是橫著的那幾行為1 *
- 2.調用函數void KeyScan(void);時,調用的時候只需要寫KeyScan就行,不然調試不成功 *
- ********************************************************************************/
- #include <reg52.h>
- #define GPIO_KEY P1
- #define GPIO_SHOW P2
- unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,
- 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
- void KeyScan(void);
- void Delay10ms(unsigned int c);
- unsigned int KeyValue;
- void main()
- {
- while(1)
- {
-
- KeyScan();
- GPIO_SHOW=DIG_CODE[KeyValue];
-
- /******************************************************
- *******************************************************
- if語句的算法
- if(KeyValue==0)
- P2=~DIG_CODE[0];
- if(KeyValue==1)
- P2=~DIG_CODE[1];
- if(KeyValue==2)
- P2=~DIG_CODE[2];
- if(KeyValue==3)
- P2=~DIG_CODE[3];
- if(KeyValue==4)
- P2=~DIG_CODE[4];
- if(KeyValue==5)
- P2=~DIG_CODE[5];
- if(KeyValue==6)
- P2=~DIG_CODE[6];
- if(KeyValue==7)
- P2=~DIG_CODE[7];
- if(KeyValue==8)
- P2=~DIG_CODE[8];
- if(KeyValue==9)
- P2=~DIG_CODE[9];
- if(KeyValue==10)
- P2=~DIG_CODE[10];
- if(KeyValue==11)
- P2=~DIG_CODE[11];
- if(KeyValue==12)
- P2=~DIG_CODE[12];
- if(KeyValue==13)
- P2=~DIG_CODE[13];
- if(KeyValue==14)
- P2=~DIG_CODE[14];
- if(KeyValue==15)
- P2=~DIG_CODE[15];
- *************************************************/
- }
- }
- void KeyScan(void) //測試行(row)的時候就是線是豎著的的那一列為1,測試列(col)的時候就是線是橫著的那幾行為1
- {
- char a = 0;
- GPIO_KEY=0x0f;
- if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
- {
- Delay10ms(1);//延時10ms進行消抖
- if(GPIO_KEY!=0x0f)//再次檢測鍵盤是否按下
- {
-
- //測試列
- GPIO_KEY=0X0F;
- switch(GPIO_KEY)
- {
- case(0X07): KeyValue=0;break;
- case(0X0b): KeyValue=4;break;
- case(0X0d): KeyValue=8;break;
- case(0X0e): KeyValue=12;break;
- }
- //測試行
- GPIO_KEY=0XF0;
- switch(GPIO_KEY)
- {
- case(0X70): KeyValue=KeyValue+3;break;
- case(0Xb0): KeyValue=KeyValue+2;break;
- case(0Xd0): KeyValue=KeyValue+1;break;
- case(0Xe0): KeyValue=KeyValue;break;
- }
- while((a<50) && (GPIO_KEY!=0xf0)) //檢測按鍵松手檢測
- {
- Delay10ms(1);
- a++;
- }
- }
- }
- }
- /*******************************************************************************
- * 函 數 名 : Delay10ms
- * 函數功能 : 延時函數,延時10ms
- * 輸 入 : 無
- * 輸 出 : 無
- *******************************************************************************/
- void Delay10ms(unsigned int c) //誤差 0us
- {
- unsigned char a, b;
- //--c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了--//
- for (;c>0;c--)
- {
- for (b=38;b>0;b--)
- {
- for (a=130;a>0;a--);
- }
- }
- }
復制代碼
|
-
-
矩陣鍵盤protues版.rar
2018-7-17 19:43 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
25.84 KB, 下載次數: 21, 下載積分: 黑幣 -5
|