功能说明:
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://www.51hei.com/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]; } } } }