#i nclude<90s8515.h>
#define uchar unsigned char
#asm
equ __LCD_port=0x18 ;PORTB
#endasm
#i nclude
#i nclude
/************按键功能说明:0--9为数字键 ********/
#define cEnter 16 //确认键
#define cFuntion 15 //功能菜单键
#define cDown 14 //上,下选择键
#define cUp 13
#define cRn_Stop 12 //运行/停止切切实实换键
#define cDel 11 //删除
uchar lcd_buffer[33];
uchar getkey(void)
{
uchar key_temp;
PORTC|=0x07; //向PORTC.0--PORTC.2写入高电平
DDRC=0x00; //把PORTA设置为输入模式
key_temp=PINC&0x07; //读取PORTA.0--PORTA.2上的值并屏蔽其它位
/*****如果K0---K6按下,key_temp就为相应的键值,如果K7--K15按下,则读入PINC.0--PINC.2都为高电平,key_temp==7
然后PORTC.0--PORTC.2依次输出低电平,判断K7--K15那个键按下**********/
if(key_temp==7) //判断K7--K9是否按下
{
DDRC|=0x01; //设置PORTC.0输出0
PORTC&=0xfe;
DDRC&=0x00;
key_temp=PINC&0x07;
key_temp=(key_temp+1)/2+7;
if(key_temp==10) //判断K10--K12是否按下
{
DDRC|=0x02; //设置PORTC.1输出0
PORTC&=0xfd;
DDRC&=0x00;
key_temp=PINC&0x07;
key_temp=(key_temp+1)/2+10;
if(key_temp==13) //判断K13--K15是否按下
{
DDRC|=0x04; //设置PORTC.2输出0
PORTC&=0xfb;
DDRC&=0x00;
key_temp=PINC&0x07;
key_temp+=13;
}
}
}
return key_temp;
}
void init()
{
PORTB=0x00; //PORB的初始化
DDRB=0x00;
DDRC=0x00;
// LCD module initialization
lcd_init(16);//清屏并把显示坐标设定在0列0行
}
void main()
{
uchar result;
init();
result=getkey();
sprintf(&lcd_buffer[2],"%c",result);
lcd_gotoxy(0,4);
lcd_putchar(lcd_buffer[2]);
while(1);
}
上一篇:AVR控制的DS1302 C程序
下一篇:SD卡接口程序(AVR)
推荐阅读最新更新时间:2024-03-16 15:49