一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

AVR单片机键盘程序设计

来源:电子发烧友 发布时间:2019-03-13

摘要: key_temp=PINC&0x07; //读取PORTA.0--PORTA.2上的值并屏蔽其它位

#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单片机键盘程序设计

{

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

}

声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: