|
發(fā)布時間: 2018-12-12 22:53
正文摘要:#include<reg52.h> typedef unsigned int u16; typedef unsigned char u8; //--定義要使用的IO口--// #define READPORTS P1 #define GPIO_KEY P2 #define COMM ... |
HC6800-ES-V2.0 發(fā)表于 2018-12-13 08:16 那請問下 就是完全的 每個矩陣按鍵控制不同的點陣數(shù)字或者圖案怎么寫 |
jsj@1234 發(fā)表于 2018-12-13 12:31 樓主你做出來了嗎,我也想做和你一樣的加矩陣鍵盤的 |
| 哈哈,拿著程序照搬是不對的,要根據(jù)程序是否和硬件配套不?跟硬件不配套你弄的代碼再好也等于0。 |
jsj@1234 發(fā)表于 2018-12-13 12:31 設(shè)置一個按鍵標志位,利用中斷函數(shù)來掃描這個標志位(舉例:1ms進入一次中斷,一旦連續(xù)4次檢測到0,就更新對應(yīng)的按鍵值)。然后在main函數(shù)里面用if(標志位)來判斷就可以了;加一下自己的代碼:
然后是中斷里面的:
|
HC6800-ES-V2.0 發(fā)表于 2018-12-13 08:16 大神怎么把矩陣鍵盤控制加進去? |
HC6800-ES-V2.0 發(fā)表于 2018-12-13 08:16 好的,我試試,謝謝老哥 |
|
你大概沒有搞清楚你的板子的點陣電路吧! 你的這個板子上,8*8點陣,是這樣連接的:
你的程序中,一點屆沒有看到控制595的程序,點陣當然是不會亮的了。 給你一個示例程序,點陣顯示一些數(shù)字字符: #include<reg51.h> #include<intrins.h> sbit SRCLK=P3^6; sbit RCLK=P3^5; sbit SER=P3^4; //--定義要使用的IO口--// #define COMMONPORTS P0 //--列選通控制--// unsigned char code TAB[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //--點陣字碼--// unsigned char code CHARCODE[18][8]= { {0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0 {0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1 {0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2 {0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3 {0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4 {0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5 {0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6 {0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7 {0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8 {0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, //9 {0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00}, //P {0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00}, //R {0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00}, //E {0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00}, //C {0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00}, //H {0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, //I {0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00}, //N {0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00} //中 }; void delay(unsigned int time) { unsigned int i,j; for(i=0;i<time;i++) for(j=0;j<121;j++); } /******************************************************************************* * 函數(shù)名 : Hc595SendByte(unsigned char dat) * 函數(shù)功能 : 想74H595發(fā)送一個字節(jié)的數(shù)據(jù) * 輸入 : 無 * 輸出 : 無 *******************************************************************************/ void Hc595SendByte(unsigned char dat) { unsigned char a; SRCLK=0; RCLK=0; for(a=0;a<8;a++) { SER=dat>>7; dat<<=1; SRCLK=1; _nop_(); _nop_(); SRCLK=0; } RCLK=1; _nop_(); _nop_(); RCLK=0; } /******************************************************************************* * 函數(shù)名 : main * 函數(shù)功能 : 主函數(shù) * 輸入 : 無 * 輸出 : 無 *******************************************************************************/ void main() { unsigned char tab, j; unsigned int i; while(1) { for(i= 0; i<50; i++ ) //兩個字之間的掃描間隔時間 { for(tab=0;tab<8;tab++) { Hc595SendByte(0x00); //消隱 COMMONPORTS = TAB[tab]; //輸出字碼 Hc595SendByte(CHARCODE[j][tab]); delay(2); } } j++; if(j == 18) { j = 0; } } } 另外還要提醒你,一定要將標有JOE的跳線冒接到GND那邊才行哦。 |
| 參與人數(shù) 1 | 黑幣 +100 | 收起 理由 |
|---|---|---|
|
| + 100 | 回帖助人的獎勵! |
|
1 程序是否和硬件不配套。 2 查硬件供電是否正常。 |
Powered by 單片機教程網(wǎng)