1.png (19.35 KB, 下載次數: 190)
下載附件
2016-1-13 22:23 上傳
0.png (27.74 KB, 下載次數: 181)
下載附件
2016-1-13 22:23 上傳
仿真電路加 c程序下載:
矩陣鍵盤.zip
(26.45 KB, 下載次數: 21)
2016-1-13 17:04 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
源程序代碼預覽:
- #include<reg52.h>
- typedef unsigned char u8;
- typedef unsigned int u16;
- sbit seg_sel=P1^4;
- sbit bit_sel=P1^5;
- #define DATA P0
- u8 seg_tab[]={
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e,
- };
- u8 bit_tab[]={
- 0x80,0x40,0x20,0x10,
- 0x08,0x04,0x02,0x01,
- };
- void delay(unsigned int num)
- {
- unsigned int x,y;
- for(x=num;x>0;x--)
- for(y=110;y>0;y--);//延時1ms
- }
- void display_led(u8 which_bit,u8 which_numbe)
- {
- bit_sel=1;//D[7-0]=Q[7-0]P1^4片選信號鎖存器1
- DATA=bit_tab[which_bit];//DATA=P0輸出which_bit8位
- bit_sel=0;//BIT[7-0]=0x80
- delay(1);
- seg_sel=1;//P1^5片選信號鎖存器2啟動
- DATA=seg_tab[which_numbe];//P0口輸出which_numbe8位
- seg_sel=0;
- delay(1);
- }
- u8 _key_scan (void)//按鍵識別函數
- {
- u8 temp,temp2;
- P2=0xf0;//讓P2輸出0xf0
- temp=P2;//讀入P2的值
- if(temp!=0xf0)//當P2不等于0xf0
- {
- delay(5);//延遲5ms
- temp=P2;//在讀入P2值
- if(temp!=0xf0)//如果P2不等于0xf0
- { //說明有按鍵按下
- temp2=temp&0xf0;//取出P2口高4位
- P2=0x0f;//在P2=0x0f
- delay(1);
- temp=P2;//讀入P2口值
- temp2=temp2|temp;//保留低4位并
- return temp2;
- }//while(P2!=0xf0);//等待 //并與取出的高4位與
- }
- }
- u8 encolde(u8 cod)//解碼函數
- {
- u8 num;
- switch(cod)
- {
- case 0xee:num=0;break;//11101110
- case 0xde:num=1;break;//11011110
- case 0xbe:num=2;break;//10111110
- case 0x7e:num=3;break;//01111110
- // case 0xed: num=4; break;//11101101
- case 0xed:num=4;break;
- case 0xdd:num=5;break;//11011101
- case 0xbd:num=6;break;//10111101
- case 0x7d:num=7;break;//01111101
- case 0xeb:num=8;break;//11101011
- case 0xdb:num=9;break;//11011011
- case 0xbb:num=10;break;//10111011
- case 0x7b: num = 11; break;//01111011
- case 0xe7: num = 12; break;//11100111
- case 0xd7:num=13;break;//11010111
- case 0xb7:num=14;break;//10110111
- case 0x77:num=15;break;//01110111
- default : break;//無影響
- }
- return num;
- }
- void main (void)
- {
- u8 cod, num;
- P0=0xff;
- P1=0xff;//初始化P1;P2
- seg_sel=0;//IE禁止 鎖存
- bit_sel=0;
- while(1)
- {
- cod=_key_scan();
- num=encolde(cod);
- display_led(1,num);
- }
- }
復制代碼
|