还有一个是ATmega16写的,注释是少了点,毕竟是刚开始学的时候没那个习惯,将就看吧,还是比较容易看懂的。
/*--------------------------------------------------------------------
作者: MCU_虫子
程序名称:4*4按键扫描程序
程序功能:键盘扫描,数码管显示并保持按键值
注意事项:PC输入口初始设置为输入状态,同时使能为内部上拉电阻(因为这两个口
在按键没有按下时处于悬空状态,易受外界干扰,所以最好将其内部
上拉电阻使能,使其平时处于高电平状态),检测按键是否按下。
提示说明:
输 入:键盘输入
返 回:按键值
--------------------------------------------------------------------*/
/*
K4-----K5-----K6-----K7
| | | |
03H----02H----01H----00H -K0
07H----06H----05H----04H -K1
0BH----0AH----09H----08H -K2
0FH----0EH----0DH----0CH -K3
*/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define DUAN_DDR DDRA
#define DUAN_PORT PORTA
#define WEI_DDR DDRB
#define WEI_PORT PORTB
#define KEY_DDR DDRC
#define KEY_PORT PORTC
#define KEY_PIN PINC
uchar key;
const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};//共阴
const bite[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//位选码
const uchar setSta_[4]={0xfe,0xfd,0xfb,0xf7};
const uchar getSta_[4]={0x70,0xb0,0xd0,0xe0};
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void show(uchar i,uchar j)
{
DDRA=0XFF;
PORTA=table;
DDRB=0XFF;
PORTB=bite[j];
}
uchar GetKeyVal()
{
uchar i,j,getSta,keyVal;
for(i=0;i