基于CH451的键盘扫描程序设计.doc
上传人:sy****28 上传时间:2024-09-12 格式:DOC 页数:10 大小:35KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

基于CH451的键盘扫描程序设计.doc

基于CH451的键盘扫描程序设计.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于CH451的键盘扫描程序设计简介:基于CH451的键盘扫描程序设计采用AVR单片机ATmega16进行读取CH451的接收到的按键值,CH451可以实现8*8矩阵键盘输入,且带有中断提醒,接收到的按键值在12864液晶上显示。程序中采用的是2*3矩阵。系统采用AVRStudio+WinAVR构成的AVRGCC编译环境。系统源程序如下:#defineF_CPU1000000UL#include<avr/io.h>#include<util/delay.h>#include<math.h>#include<avr/interrupt.h>#definenop()asm("NOP")/*液晶显示引脚定义*//*对rs引脚进行定义与设置*/#definers_outDDRD|=_BV(PD5)#definers_inDDRD&=~_BV(PD5)#definers_1PORTD|=_BV(PD5)#definers_0PORTD&=~_BV(PD5)/*对rw引脚进行定义与设置*/#definerw_outDDRD|=_BV(PD6)#definerw_inDDRD&=~_BV(PD6)#definerw_1PORTD|=_BV(PD6)#definerw_0PORTD&=~_BV(PD6)/*对使能en引脚进行定义与设置*/#defineen_outDDRD|=_BV(PD7)#defineen_inDDRD&=~_BV(PD7)#defineen_1PORTD|=_BV(PD7)#defineen_0PORTD&=~_BV(PD7)#definebusy_1DDRB|=_BV(PB7)#definebusy_0DDRB&=~_BV(PB7)/*ch451引脚定义*//*数据输出与键盘中断*/#definedout_outDDRA|=_BV(PA2)#definedout_inDDRA&=~_BV(PA2)#definedout_1PORTA|=_BV(PA2)#definedout_0PORTA&=~_BV(PA2)#definedout_read(PINA&_BV(PA2))/*串行数据加载引脚*/#defineload_outDDRA|=_BV(PA3)#defineload_inDDRA&=~_BV(PA3)#defineload_1PORTA|=_BV(PA3)#defineload_0PORTA&=~_BV(PA3)/*数据输入引脚*/#definedin_outDDRA|=_BV(PA4)#definedin_inDDRA&=~_BV(PA4)#definedin_1PORTA|=_BV(PA4)#definedin_0PORTA&=~_BV(PA4)/*数据时钟线*/#definedclk_outDDRA|=_BV(PA5)#definedclk_inDDRA&=~_BV(PA5)#definedclk_1PORTA|=_BV(PA5)#definedclk_0PORTA&=~_BV(PA5)constunsignedchartabn[]={"0123456789"};unsignedchartemp=0;/*检查引脚是否忙*/voidcheckbusy(){rs_0;rw_1;en_1;_delay_us(200);busy_0;while((PINB&0x80)==1);en_0;busy_1;}/*写命令*/voidwrite_com(unsignedcharcmd){checkbusy();rs_0;rw_0;en_1;_delay_us(1);PORTB=cmd;_delay_us(2);en_0;}/*写数据*/voidwrite_date(unsignedchardat){checkbusy();rs_1;rw_0;en_1;_delay_us(2);PORTB=dat;_delay_us(2);en_0;}/*液晶初始化*/voidinit_lcd(){DDRB=0xff;PORTB=0xff;DDRD=0xff;PORTB=0xff;write_com(0x30);_delay_us(2);write_com(0x0c);_delay_us(2);write_com(0x01);_delay_us(2);write_com(0x06);_delay_us(2);}/*向lcd写入一个