该头文件定义了C51单片机的几个关键操作。"> 该头文件定义了C51单片机的几个关键操作。" />
单片机经验总结5---机模块驱动程序参考

单片机经验总结5---机模块驱动程序参考

ID:17849017

大小:613.50 KB

页数:18页

时间:2018-09-07

单片机经验总结5---机模块驱动程序参考_第1页
单片机经验总结5---机模块驱动程序参考_第2页
单片机经验总结5---机模块驱动程序参考_第3页
单片机经验总结5---机模块驱动程序参考_第4页
单片机经验总结5---机模块驱动程序参考_第5页
资源描述:

《单片机经验总结5---机模块驱动程序参考》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、单片机经验总结5一、引用外部头文件:#include"SST89x5x4.H"该头文件定义了SST89x5x4系列芯片所用到的关键变量,包括端口、各个寄存器等。#include该头文件定义了C51单片机的几个关键操作。这两个头文件可在“……KeilC51INC”文件夹中找到。二、按键模块:voidKey_Init(void);unsignedcharGetScanKey(void);unsignedcharGetKey(void);函数功能描述:键盘初始化,将标志位置1;voidKey_In

2、it(void){bKeyUp_Flag=1;//标志(全局变量)位置1}函数功能描述:键盘扫描函数,得到键的行列位置;unsignedcharGetScanKey(void){unsignedcharkey,i,temp;unsignedcharxdata*ptr;key=0xff;for(i=1;i<0x10;i<<=1)//i的低4位为行数位,行依次检测循环4次{ptr=0x8fff;*ptr=i;temp=*ptr;//取键盘IO口的值temp&=0x0f;//屏蔽高四位if(temp!=0x00)//是否有有

3、效键值{key=i<<4;//取行数位的值并将其放入返回值高4位key

4、=temp;//列数位的值放入返回值低4位break;}}returnkey;//返回行位(高四)和列位(低四)}函数功能描述:取键值,长按无效;unsignedcharcodeKey_Value_Table[16]={0xff,0x00,0x01,0xff,0x02,0xff,0xff,0xff,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff};说明:计算因子,定义在函数外部。此数组在计算键值的中间过程起作用。比如

5、右下方键按下(行列值为0x88),通过查找数组得到行对应的中间值0x03,列对应的中间值0x03。unsignedcharGetKey(void){unsignedcharkey,temp;if(!bKeyUp_Flag)//判断标志,是0执行/*按键程序执行一次后会将bKeyUp_Flag标志位清零,执行此段程序,长按键无效返回无效值,直至按键无效返回无效按键值,置"1"标志位。按键输入恢复有效。屏蔽这部分则长按键有效*/{key=GetScanKey();if(key==0xff)//没有按键,置标志位bKeyUp

6、_Flag=1;else//保持按键return0xff;//因为0xff大于15,故为无效键值,实现长按键无效}key=GetScanKey();if(key==0xff)//没有按键returnkey;else//有按键有效temp=key;//取键值Delay_ms(20);//延时20ms消抖key=GetScanKey();//键盘扫描if(key!=temp)//判断两次键值是否相同,排除干扰信号影响确认有效信号{key=0xff;returnkey;}else//取键值{/*这部分主要作用是软件抗干扰*/

7、temp=Key_Value_Table[key>>4];//见说明/*行值有效位(键盘的4个行SEL返回的值含有的有效位"1")有且只有一位键值才有效否则返回无效键值*/if(temp==0xff){key=0xff;returnkey;}temp=Key_Value_Table[key&0x0f];/*列值有效位(键盘的4个列RL返回的值含有的有效位"1")有且只有一位键值才有效否则返回无效键值*/if(temp==0xff){key=0xff;returnkey;}key=Key_Value_Table[key>

8、>4]*4+Key_Value_Table[key&0x0f];//行对应的中间值的四倍与列对应的中间值之和即为按键编号0~15/*行列组合后的值大于15无效*/if(key>15){key=0xff;returnkey;}bKeyUp_Flag=0;returnkey;}}三、LCD模块:详细资料请字符点阵说明书.pdf器件资料请参考“字符点阵说明书.pdf”中有关EDM1602部分;voidLCD_Init(void);voidLCD_Init2(void);voidWriteW(uinta);voidCheckB

9、F(void);unsignedcharKey_ASC2(unsignedchar);voidWritD(unsignedchar);函数功能描述:检查忙标志位BF;voidCheckBF(void){uinti;while(1){ptr=0xAFF1;//RS=0,R/W=1i=*ptr;i&=0x80;if(i==0)brea

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。