AVR单片机键盘程序设计

AVR单片机键盘程序设计,第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是否按下

AVR单片机键盘程序设计,AVR单片机键盘程序设计,第2张

{

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

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2573310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-07
下一篇 2022-08-07

发表评论

登录后才能评论

评论列表(0条)

保存