熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
發(fā)布時(shí)間: 2019-2-24 12:01
正文摘要:這個(gè)矩陣鍵盤的,怎么改變剛打開單片機(jī)還沒有按鍵時(shí)數(shù)碼管顯示的符號(hào),加上圖二這三句 沒有改變顯示的字符,求大佬指教 |
|
初始顯示字母示例程序 #include <reg52.h> #define uint unsigned int //宏定義無符號(hào)整型數(shù)據(jù) #define uchar unsigned char //宏定義無符號(hào)字符型數(shù)據(jù) sbit P_HC595_SER = P2^0; sbit P_HC595_SRCLK = P2^1; sbit P_HC595_RCLK = P2^2; uchar code table[]={//共陰數(shù)碼管段碼"0~H" 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, // A B C D E F G H 0x77,0x7C,0x39,0x5E,0x79,0x71,0x3d,0x76}; uchar code dis_buf[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位碼 uchar buf[8]; uchar key=0; //定義鍵值全局變量 void keyscan() //按鍵掃描程序 { static bit sign=0; //按鍵有效標(biāo)志 static uint count=0; //消抖計(jì)數(shù)變量 uchar num=0; //臨時(shí)變量 P3=0xf0; //賦值P3 1111 0000 if(P3!=0xf0) //檢測(cè)有按鍵按下 { count++; //消抖計(jì)數(shù) if((count>=500)&&(sign==0))//100~1000,根據(jù)主循環(huán)周期調(diào)整約10~20ms { sign=1; //按鍵有效標(biāo)志置1 num=P3; //保存P3值xxxx 0000,x為0或1 num|=0x0f; //保存num按位或0x0f值xxxx 1111 P3=num; //賦值P3 xxxx 1111 num=P3; //保存P3值xxxx xxxx switch(num) { case 0xee: key= 1; break; case 0xde: key= 2; break; case 0xbe: key= 3; break; case 0x7e: key= 4; break; case 0xed: key= 5; break; case 0xdd: key= 6; break; case 0xbd: key= 7; break; case 0x7d: key= 8; break; case 0xeb: key= 9; break; case 0xdb: key=10; break; case 0xbb: key=11; break; case 0x7b: key=12; break; case 0xe7: key=13; break; case 0xd7: key=14; break; case 0xb7: key=15; break; case 0x77: key=16; break; } } } else //鍵抬起 { sign=0; //按鍵有效標(biāo)志清0 count=0; //消抖計(jì)數(shù)清0 } } /**************** 向HC595發(fā)送一個(gè)字節(jié)函數(shù) ******************/ void Send_595(uchar dat) { uchar i; for(i=0;i<8;i++) { dat <<= 1; P_HC595_SER = CY; //溢出位賦值數(shù)據(jù)輸出端 P_HC595_SRCLK = 1; //移位時(shí)鐘 P_HC595_SRCLK = 0; } } /**************** 向HC595發(fā)送2個(gè)字節(jié)函數(shù) ******************/ void DisplayScan() { static uchar j; Send_595(dis_buf[j]);//向HC595發(fā)送位碼 Send_595(table[buf[j]]);//向HC595發(fā)送段碼 P_HC595_RCLK = 1;//鎖存輸出數(shù)據(jù) P_HC595_RCLK = 0; if(++j==8) j=0; } void main() //主函數(shù) { uchar i; P_HC595_SRCLK = 0;//初始化移位時(shí)鐘端 P_HC595_RCLK = 0;//初始化鎖存輸出端 while(1) { keyscan(); //按鍵掃描程序 if(key==0) { buf[0]=10; buf[1]=11; buf[2]=12; buf[3]=13; buf[4]=14; buf[5]=15; buf[6]=16; buf[7]=17; } else { buf[0]=0; buf[1]=0; buf[2]=0; buf[3]=0; buf[4]=0; buf[5]=0; buf[6]=key/10; buf[7]=key%10; } if(++i>=100) { i=0; DisplayScan(); //發(fā)送2個(gè)字節(jié) } } } |
無標(biāo)題1.jpg (228.24 KB, 下載次數(shù): 45)
|
/************* IO口定義 **************/ sbit P_HC595_SER = P2^5; //SER data input sbit P_HC595_RCLK = P2^6; //RCLk store (latch) clock sbit P_HC595_SRCLK = P2^7; //SRCLK Shift data clock unsigned char code t_display[]={ //段碼標(biāo)準(zhǔn)字庫(kù) // 0 1 2 3 4 5 6 7 8 9 A B C D E F 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71, // 不顯 - H J K L N o P U t G Q r M y 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e, // 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1 0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位碼 /**************** 向HC595發(fā)送一個(gè)字節(jié)函數(shù) ******************/ void Send_595(u8 dat) { u8 i; for(i=0; i<8; i++) { dat <<= 1; P_HC595_SER = CY; P_HC595_SRCLK = 1; P_HC595_SRCLK = 0; } } /********************** 顯示掃描函數(shù) ************************/ void DisplayScan(void) { Send_595(~LED_TYPE ^ T_COM[display_index]); //輸出位碼 Send_595( LED_TYPE ^ t_display[LED8[display_index]]); //輸出段碼 P_HC595_RCLK = 1; P_HC595_RCLK = 0; //鎖存輸出數(shù)據(jù) if(++display_index >= 8) display_index = 0; //8位結(jié)束回0 } |
Powered by 單片機(jī)教程網(wǎng)