AVR单片机键盘程序设计

控制/MCU

1877人已加入

描述

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

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分