功能說明:
4X4鍵盤對應著0-F共16個數字,按其中任一鍵即可在共陽極七段顯示器上顯示所對應的數字。
電路說明:
電路
HT46F49E的端口B接一個共陽極七段顯示器。
由于使用共陽極七段數碼器,所以在端口B的每一只引腳都串上一個電阻以作為分壓之用。因為七段顯示器的每一段都可視為一個發光二極管,VCC足以將該段燒毀,所以在每一段應串接一個電阻與發光二極管分壓,以保護七段顯示器。
HT46F49E的端口A接一組4X4鍵盤。PA7-PA0送出行掃描碼,其中一只引腳送出0,其余送出1,PA7-PA4輪流送出0.如果有一個按鍵被按下,則PA3-PA0會收到那一個按鍵被按下的信息。綜合PA7-PA4的行掃描碼與PA3-PA0鍵被按下的信息即可知道是哪一個鍵被按下。
完整程序代碼下載地址:http://m.izizhuan.cn/f/htjp.rar
程序:
#include "HT46F49E.H"
const unsigned char number[]={
0x81,0xcf,0x92,0x86,
0xcc,0xa4,0xa0,0x8f,
0x80,0x84,0x88,0xe0,
0xb1,0xc2,0xb0,0xb8};
unsigned int key_code;
void scan_keypressed()
{
unsigned int i,scan_code;
scan_code=0xef;
key_code=0;
for(i=0;i<4;i++)
{
_pa=scan_code;
if(_pa0==0)
key_code=i*4+1;
if(_pa1==0)
key_code=i*4+2;
if(_pa2==0)
key_code=i*4+3;
if(_pa3==0)
key_code=i*4+4;
_rl(&scan_code);
}
}
void scan_keyeleased()
{
switch(key_code%4)
{
case 1:while(!_pa0);
break;
case 2:while(!_pa1);
break;
case 3:while(!_pa2);
break;
case 0:while(!_pa3);
break;
}
}
void main()
{
unsigned int key_old,led;
_pcc=0x00;
_pbc=0x00;
_pac=0x0f;
led=0;
_pb=number[0];
while(1)
{
scan_keypressed();
if(key_code>0)
{
key_old=key_code;
_delay(20000);
scan_keypressed();
if(key_old==key_code)
{
scan_keyeleased();
led=key_code-1;
_pb=number[led];
}
}
}
}

