当前位置:首页 > 单片机 > 单片机
[导读] #i nclude#define uchar unsigned char#asmequ __LCD_port=0x18 ;PORTB#endasm#i nclude #i nclude/************按键功能说明:0--9为数字键 ********/#define cEnter 16 //确认键#define cFuntion 1

#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);
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭