非编码键盘的扫描程序设计(共20页).doc

上传人:飞****2 文档编号:16635701 上传时间:2022-05-18 格式:DOC 页数:20 大小:268.50KB
返回 下载 相关 举报
非编码键盘的扫描程序设计(共20页).doc_第1页
第1页 / 共20页
非编码键盘的扫描程序设计(共20页).doc_第2页
第2页 / 共20页
点击查看更多>>
资源描述

《非编码键盘的扫描程序设计(共20页).doc》由会员分享,可在线阅读,更多相关《非编码键盘的扫描程序设计(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上摘 要计算机控制技术是一门以电子技术、自动控制原理、计算机应用技术为基础,以计算机控制技术为核心,综合可编程控制技术、单片机技术、计算机网络技术,从而实现生产技术的精密化、生产设备的信息化、生产过程的自动化及机电控制系统的最佳化的专门学科。企业对具备较强的计算机控制技术应用能力专门人才需求很大。本文在proteus7.5软件上利用8155芯片来扩展8031单片机的I/O接口,在keil软件下采用C语言编程,生成.hex文件,可以仿真实现6*6矩阵键盘的按键识别和消除按键抖动,将识别到的按键更人性化的在lcd1602的液晶显示,主要由方案设计、硬件电路设计、系统软件设计

2、和系统调试四部分组成。关键词:8031单片机 8155芯片 矩阵键盘 I/O口扩展 1602液晶非编码键盘的扫描程序设计1设计方案1.1 设计任务通过8155扩展8031微控制器I/O口组成66行列式键盘行列式键盘。设计非编码键盘的扫描硬件系统,画出电路图;对键盘按键能够正确识别,去抖动;键盘扫描;撰写设计说明书。1.2 设计方案首先,将用8155芯片扩展8031单片机的I/O口,然后需要检测6*6的矩阵键盘的12根导线可分别接在8155的PB0-PB6和PC口,LCD1602的8根数据线可接在8155的PA0口,控制线接在单片机的P2.0-P2.3,由于8155是可编程芯片,所以将的PA、P

3、B和PC口依次设为输出、输出和输入,通过编写键盘扫描程序来识别按键并返回按键值,最后判断将识别到的按键值形象的显示在LCD1602液晶上。主电路结构框图如图1-1所示。 8031单片机6*6矩阵键盘 8155芯片复位电路 LCD1602 晶振 图1-1 系统结构图2系统硬件设计2.1最小应用系统80C31单片机,它是8位高性能单片机。属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,标准MCS-51单片机的体系结构和指令系统。 80C31内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和

4、5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。但80C31片内并无程序存储器,需外接ROM。 此外,80C31还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。本次设计采用80C31的PDIP(40pin)封装形式,管脚图如图2-1所示。 图2-1 8031管脚图80c31单片机的40根管脚,若要单片机正常工作必须满足:1. 电源线2根 Vcc:编程和正常操作时的电源电压,接+5V。 Vss:地电平。 2. 晶振:2根 XTAL1:振荡器的反相放

5、大器输入。使用外部震荡器是必须接地。 XTAL2:振荡器的反相放大器输出和内部时钟发生器的输入。当使用外部振荡器时用于输入外部振荡信号。 所以可以得到单片机的最小应用系统如图2-2所示。图2-2 8031最小应用系统2.2 8155扩展电路8155芯片介绍关于Intel的8155/8156:是一多功能的可编程外围接口芯片, 40脚双列直插封装,有A口、B口、C口和定时器/计数器低8位以及定时器/计数器高8位五个端口,另外8155内部还有一个命令/状态寄存器,所以8155内部共有6各端口。对它们只需要使用即可实现编址,如表1-1所示。表1-1 8155的端口地址编码AD7AD6AD5AD4AD3

6、AD2AD1AD0对应端口000命令/状态寄存器001A口010B口011C口100定时器/计数器低8位101定时器/计数器高8位8155的A口有输入和输出两种工作方式,B口也有输入和输出两种工作方式,而C口有输入方式(ALT1),输出方式(ALT2),A口控制端口方式(ALT3)以及A口 和B口控制端口方式(ALT4)四种工作方式。这些端口的工作方式是由8155内部的命令寄存器(命令字)来控制的。命令字除了规定端口的工作方式还规定了定时器/计数器的工作方式。命令字只能进行写操作。其格式如图2-3所示。图2-3 8155的命令字结合8031和8155的芯片结构和特点,可设计出如图2-4所示的扩

7、展电路。图2-4 8155扩展电路2.3 矩阵键盘接口电路编码键盘与单片机的接口单片机系统所用的键盘有编码键盘和非编码键盘两种。非编码键盘是由一些按键排列成的一个行列矩阵。按键的作用,只是简单地实现接点的接通和断开,但必须有一套相应的程序与之配合,才能产生出相应的键码。非编码键盘几乎不需要附加什么硬件电路,目前,在微型计算机控制系统中使用比较普遍。本次设计有一个6行6列的非编码键盘,按行依次为1-36,键盘的行线接8155C口的六条线PB5PB0,键盘的列线则接8155C口的6条线,而且在C口接下拉电阻。如图2-5所示。图2-5 矩阵键盘接口电路2.4 LCD1602接口电路LCD1602字符

8、型液晶显示模块是一种专门用于可以显示16列*2行显示字母、数字、符号等点阵式LCD, 16*2等的模块。其管脚介绍如下: 第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写

9、入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。图2-6 LCD1602接口电路第15脚:背光源正极。第16脚:背光源负极。综合可设计液晶与8031单片机及8155芯片的接口电路如图2-6所示。2.5 主电路设计综上各子模块电路的设计,可设计出主电路图如图2-7所示图2-7 主电路图3系统软件设计3.1主程序设计主程序主要包括三个部分:初始化程序,调用判断子程序和调用检测子程序,其中显示子程序被调用在检测子程序中。其流程图如图3-1所示。开始初始化 调用判断子程序 有键闭合?Y N Y 调用检测子程序 结束 图3-1 主程序流

10、程图3.2 延时程序设计延时程序是采用双重for语句循环自减的方法,将i赋值t,j赋值110运用循环重复t遍110自减到0。延时时间计算方法:振荡器的频率为12MHz,一个振荡器周期为1/12微秒,一个机器周期为12/12=1微秒 计算机执行每步就需要1微秒,延时时间就是执行步数*1微秒。子程序流程图如图3-2所示。开 始i赋初值tj赋初值110j自减一是否为零i 自减一是否为零 NN Y 结 束 图3-2 延时子程序流程图3.3 键盘扫描子程序设计设置8155的PA、PB和PC口依次设为输出、输出和输入,这样在没有任何键按下时,所有键盘行线成高电平,列线上的信号都是低电平。按键识别有各种方法

11、,此系统只 “行扫描”法:(1)确定是否有按键按下。PB口输出到键盘的行线,然后检测键盘的列线信号。若没有键按下,则为00000。若有任一个按键按下,则有某一条列线为0,也就是当PB5PB0不为时,就表示有键按下。(2)通过“行扫描”确定已按键的行、列位置。所谓行扫描就是依次给每条行线输入1信号,而其余各行都输入0,并检测每次扫描时所对应的列信号。并检测每次所对应的C口输入。只有在某行上有键按下时,在这一行上输入1,在列输出上才能检测到1信号。若是输入为1的这一行上没有按键按下,则收到的列信号仍然全是0。因此,只要记下列信号不全为0时的B口输出及C口输入,就能确定以按键的位置。这样,通过行扫描

12、,就可以确定按键的行、列坐标。(3)消除键抖动。一般按键在按下的时候有抖动的问题,即键的簧片在按下时会有轻微的弹跳,需经过一个短暂的时间才会可靠地接触。若在簧片抖动时进行扫描就可能得出不正确的结果。因此,在程序中要考虑防抖动的问题。最简单的办法是在检测到有键按下时,等待(延迟)一段时间再进行“行扫描”,延迟时间为1020ms,这可通过调用子程序来消除抖动。扫描子程序流程图如图3-3所示。开 始扫描键盘是否有按键?消除抖动是否有按键?读按键结 束 图3-3 扫描子程序流程图3.4 显示子程序设计1602液晶模块的读写操作,屏幕和光标的操作都是通过指令编程来实现的。指令1:清显示,指令码01H,光

13、标复位到地址00H位置。指令2:光标复位,光标返回到地址00H指令3:光标和显示位置设置I/D,光标移动方向,高电平右移,低电平左移,S:屏幕上所有文字是否左移或右移,高电平表示有效,低电平表示无效。指令4:显示开关控制。D:控制整体的显示开与关,高电平表示开显示,低电平表示关显示。C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C :高电平时显示移动的文字,低电平时移动光标指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时为双行显示,F:低电平时显示5X7的

14、点阵字符,高电平时显示5X10的显示字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:忙标志位,高电平表示忙,此时模块不能接收命令或数据,如果为低电平表示不忙。读写操作时序如图3-4、3-5所示图3-4 读时序图图3-5 读时序图4 系统调试与结果4.1 调试内容与问题解决软件与硬将件连接,仿真运行时,发现液晶的光标移动但是不显示初始化的字符,经检查发现液晶控制线与单片机的接线出现了错误,改正后可显示初始化字符。当按下按键时,发现液晶的显示与按键不对应,不能正确显示按键,甚至有的按键不能按下去没有反应,经检查是扫描子程序的逻辑发生错误,出现死

15、循环,修改后可正确运行。4.2 运行结果与分析仿真运行开始,初始化后液晶显示器上出现预设的字符串“PLEASE ENTER”,如图4-1所示图4-1 初始化的界面当按下第一行,第二列的按键时,液晶上出现了行和列的标号,别且计算出是2,如图4-2所示。图4-2 按键2显示当按下第4行,第3列时,液晶上也正确显示了按键的位置并且计算出为21,图4-3所示。图4-3 按键21显示依次按下每个键,并且检查液晶的显示,发现36个按键都能正确识别显示,所以本设计合理、正确。小结在现代科学技术的众多领域中,计算机控制技术起着越来越重要的作用,因此做好微型计算机控制技术这门课程的课程设计是非常有必要的,从中可

16、以讲课本中知识运用到实际运用中,也让我深刻的体会到了实践的艰巨性和挑战性,在一周的课程设计中,我不断的改进自己的方法,通过查阅参书和网上的资料,对于自己在知识上的不足进行了非常好的补充和完善,使得我在短短两个星期对于这门业课有了有了更切实的理解,更深的掌握,也学会了通过自己的努力挑战未知的领域!通过这次课设我才知道我们每个人的潜能是远远超过我们想象的,刚开始拿到课设题目听说可以设计成几百行的程序都有点恐惧,因为之前写的汇编程序最多才几十行,用C语言写单片机程序最多也才写过几百行,但是通过查阅资料,一步一步来发现程序越写越长,写完才发现我们的编程水平比我们想象的要高,但是离社会需求的还远。这次课

17、设我对程序的差错和调试也有很多新的想法,虽然我的编译器不能单步运行,但是我可以在程序中添加一些延时程序和输出“*”的语句,这样就可以知道程序运行的大致步骤,是否运行我们需要的语句了。事实在我调试和查错时的确起到了很大的作用。最后,在排版美观方面,也有了较强的意识。在撰写实验报告的时候,格式的要求非常的严格,字体的大小要求,段距,行距也都有统一的要求,开始时候没有注意到这一点,后来发现了,需要全部更改,工作量很大。改正后,看着自己的美观排版,心中还是非常欣慰的。参考文献1.李朝清.单片机原理及接口技术北京航天航空大学出版社.1994年2.何立民.单片机高级教程北京航天航空大学出版社.2000年3

18、.杨光友,朱宏辉等单片机微型计算机原理及接口技术中国水利水电出版社.2002年 4. 于海生. 计算机控制技术. 机械工业出版社,20105. 郑学坚,周斌. 微型计算机原理与应用. 清华大学出版社6 何立民. 单片机应用系统设计. 北京航空航天大学出版社7. 姚燕南,薛钧义. 微型计算机原理. 西安电子科技大学出版社8. 沙占友等. 新编实用数字化测量技术. 国防工业出版社9. 宋春荣等. 通用集成电路手册. 山东科技出版社附录#include /头文件#include /XBYTE 宏定义#include#include#define uchar unsigned char #define

19、 uint unsigned int#define ulong unsigned long#define com XBYTE0x7FF0 /8155命令状态寄存器地址#define pa XBYTE0x7FF1 /8155的A口地址#define pb XBYTE0x7FF2 /8155的B口地址#define pc XBYTE0x7FF3 /8155的C口地址sbit lcdrs=P30;sbit lcden=P32;sbit lcdrw=P31;uchar table1=HANG ;uchar table2= LIE ;uchar table3=WE GET ;uchar table4=P

20、LEASE ENTER ;int x,y,z,hang,lie;void delay(uchar t);void wcom(uint co);void wdate(uchar date);void wdate1(ulong date);void panduan();void jiance();void xianshi();void wcom(uint co)/液晶写控制字子程序 lcdrs=0; pa=co; delay(2); lcden=1; delay(2); lcden=0;void wdate(uchar date)/液晶显示单字符子程序 lcdrs=1; pa=date; dela

21、y(2); lcden=1; delay(2); lcden=0;void wdate1(ulong date)/液晶显示多字符子程序 uchar m; wcom(0x80+0x40+9); wcom(0x04); wcom(0x0C); if(date) while(date) m=date%10; wdate(0x30+m);date/=10;void xianshi()/显示按键子程序 uchar m; wcom(0x01); wcom(0x80); wcom(0x0c); for(m=0;m5;m+) wdate(table1m); delay(2); wdate(0x30+x+1);

22、 for(m=0;m5;m+) wdate(table2m); delay(2); wdate(0x30+y); wcom(0x80+0X40); for(m=0;m8;m+) wdate(table3m); delay(2); wdate1(z);void panduan()/判断是否有键按下子程序 int flag=1;hang=0xff;pb=hang;lie=0;while(!lie&flag)delay(10);lie=pc;if(lie)flag=0;void jiance()/检测按键子程序 int aa;x=-1;y=1;hang=0x01;do x+;pb=hang;lie=

23、pc;hang*=2;while(!lie);aa=0x01;hang=0xff;pb=hang;lie=pc;while(!(lie&aa)aa*=2;y+;lie=pc;z=x*6+y;xianshi();while(pc);delay(5);while(pc);void init()/初始化子程序 int m; pa=0; pb=0; pc=0; lcdrs=lcdrw= lcden=0; com=0x03;/ wcom(0x38); wcom(0x0f); wcom(0x06); wcom(0x01); wcom(0x80); for(m=0;m0;j-) for(i=110;i0;i-); void main() /主程序 init(); while(1) panduan(); jiance(); 专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁