单片机课程设计液晶显示器与键盘系统.docx_第1页
单片机课程设计液晶显示器与键盘系统.docx_第2页
单片机课程设计液晶显示器与键盘系统.docx_第3页
单片机课程设计液晶显示器与键盘系统.docx_第4页
单片机课程设计液晶显示器与键盘系统.docx_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电路图找不到了,不过下面有一张整体的仿真图,看着哪个把接口接对就可以 微机原理与接口技术综合实践设计书设计题目:液晶显示器与键盘系统组 长:鲁 强 10225043小组成员:王 瑞 10225049 李雪莹 10225038 徐 峰 10224025 王晓炜 10225050班 级:机电1007班 指导老师:肖燕彩目录一、设计要求2二、任务分工及进度安排32.1、任务分工表32.2、进度安排3三、主要元器件介绍43.1、at89c5143.2、 1602lcd概述73.3、发光二极管93.4、蜂鸣器11四、 仿真电路设计与系统仿真图124.1、 protues仿真软件的相关介绍124.2、 复位电路仿真电路图:124.3、时钟电路仿真电路图134.4、1602lcd显示仿真电路图134.5、 键盘仿真电路图144.6、蜂鸣器和发光二极管电路仿真图如图6和图7154.7、 相关功能仿真显示图15五、硬件电路及相关功能显示175.1、硬件电路整体图:175.2、相关功能显示图:17六、程序流程图及相关程序196.1、程序构思:196.2、程序流程图:20七、遇到问题及解决方案217.1、硬件问题:217.2、软件问题21八、体会与感想23九、参考文献24十、附件25一、设计要求 系统上电显示初始化界面,如“欢迎使用本系统!” ; 按数字键显示相应数字;1、按功能键“a” ,发光二极管发光;2、按功能键“b” ,发光二极管不发光;3、按功能键“c” ,蜂鸣器报警;4、按功能键“d” ,蜂鸣器停止报警;5、按功能键“e”,显示“机电1007,thak you!”;6、按功能键“f”,显示“good bye”。二、任务分工及进度安排2.1、任务分工表姓 名任务分工鲁 强仿真电路设计与连接,pretous仿真,编写设计书。王 瑞程序编写与调试,编写设计书。李雪莹程序编写与调试,编写设计书。王晓炜电路板焊接,硬件调试,资料查阅。徐 峰电路板焊接,硬件调试,资料查阅。2.2、进度安排 资料查询与元器件的选择,1天 电路连接与protues仿真,程序编写与调试;2天 硬件焊接,硬件调试;2天 综合调试,2天 课程设计任务书,2天三、主要元器件介绍3.1、at89c51at89c51简介:at89c51是一个低功耗,高性能cmos8位单片机,片内含4k b的可反复擦写1000次的flash只读程序存储器,器件采用atmel公司的高密度、非易失性存储技术制造,兼容标准mcs-51指令系统及80c51引脚结构,芯片内集成了通用8位中央处理器和isp flash存储单元,at89s51在众多嵌入式控制应用系统中得到广泛应用。 at89c51主要特征: 4k bytes flash片内程序存储器; 128 bytes的随机存取数据存储器(ram) 32个外部双向输入/输出(i/o)口; 2个中断优先级、2层中断嵌套中断; 6个中断源; 2个16位可编程定时器/计数器; 2个全双工串行通信口; 看门狗(wdt)电路; 片内振荡器和时钟电路; 与mcs-51兼容; 全静态工作:0hz-33mhz; 三级程序存储器保密锁定; 可编程串行通道; 低功耗的闲置和掉电模式。 管脚说明vcc:供电电压gnd:接地图1 at89c51引脚图p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门电流。当p1口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0 口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。 p1.0 t2(定时器/计数器t2的外部计数输入) ,时钟输出;p1.1 t2ex(定时器/计数器t2的捕捉/重载触发信号和方向控制);p1.5 mosi(在系统编程用);p1.6 miso(在系统编程用);p1.7 sck(在系统编程用)。p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号和控制信号。p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。p3口也可作为at89c51的一些特殊功能口,如下表所示:管脚 备选功能p3.0 rxd(串行输入口)p3.1 txd(串行输出口)p3.2 int0(外部中断0)p3.3 int1(外部中断1)p3.4 t0(记时器0外部输入)p3.5 t1(记时器1外部输入)p3.6 wr(外部数据存储器写选通)p3.7 rd(外部数据存储器读选通)p3口同时为闪烁编程和编程校验接收一些控制信号rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。 ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输出。3.2、 1602lcd概述1602lcd 分为带背光和不带背光两种,基控制器大部分为hd44780,带背光的比不带背光的厚,是否带背光在应用中并无差别.16字2行的字符型液晶显示器显示模块可以与8位或4位微处理器直接接口,其内置式字符发生器rom可提供160种符合工业标准的字符,包括全部英文大小写字母,阿拉伯数字,以及32个特殊字符或符号,其 内置的ram可以根据用户需要,由用户自行设计字符或符号,其指令系统为用户提供了方便的操作指令,点阵字符型液晶显示模块采用了+5v单电源供电,功耗低。 1602lcd 主要技术参数:显示容量:162 个字符芯片工作电压:4.55.5v工作电流:2.0ma(5.0v)模块最佳工作电压:5.0v字符尺寸:2.954.35(wh)mm 引脚功能说明:1602lcd 采用标准的14 脚(无背光)或16 脚(带背光)接口,引脚接口说明如下表。引线号符号电平功能1vss0vgnd2vdd+5v电源电压+5v3v005v液晶驱动电压4rsh/l寄存器选择:1、数据寄存器;0、读写寄存器5r/wh/l读写操作选择:1、读;0、写6eh,hl使能信号:enable714db0db7h/l数据总线第1 脚:vss 为地电源。第2 脚:vdd 接5v 正电源。第3 脚:vl 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k 的电位器调整对比度。第4 脚:rs 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5 脚:r/w 为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs 和r/w共同为低电平时可以写入指令或者显示地址,当rs 为低电平r/w 为高电平时可以读忙信号,当rs 为高电平r/w 为低电平时可以写入数据。第6 脚:e 端为使能端,当e 端由高电平跳变成低电平时,液晶模块执行命令。第714 脚:d0d7 为8 位双向数据线。第15 脚:背光源正极。第16 脚:背光源负极。 1602lcd控制指令:1620液晶模块内部的控制器共有11条控制指令,如下表所示。它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01h,光标复位到地址00h位置指令2:光标复位,光标返回到地址00h指令3:光标和显示模式设置 i/d:光标移动方向,高电平右移,低电平左移 s:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效指令4:显示开关控制。 d:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 c:控制光标的开与关,高电平表示有光标,低电平表示无光标 b:控制光标是否闪烁,高电平闪烁,低电平不闪烁指令5:光标或显示移位 s/c:高电平时移动显示的文字,低电平时移动光标指令6:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符指令7:字符发生器ram地址设置指令8:ddram地址设置指令9:读忙信号和光标地址 bf:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据指令11:读数据1620液晶显示模块可以和单片机直接接口。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。3.3、发光二极管光是能量的一种形式,一种可以被原子释放出来。是由许多有能量和动力但没质量的微小粒子似的小捆组成的。这些粒子被叫做光子,是光的最基本单位。光子是因为电子移动才释放出来。在原子中,电子在原子的四周围以轨道形式移动。电子在不同的轨函数有着不同等的能量。通常来说,有着更大能量的电子以轨道移动远离了核子。当电子从一个更低的轨道跳到一个更高的轨道,能量水平就增高,反过来,当从更高轨函数跌落到更低的轨函数里时电子就会释放能量。能量是以光子形式释放出来的。更高能量下降释放更高能量的光子,它的特点在于它的高频率。自由电子从p型层通过二极管落入空的电子空穴。这包含从传导带跌落到一个更低的轨函数,所以电子就是以光子形式释放能量。这在任何二极管里都会发生的,当二极管是由某种物质组成的时候,你只是可以看见光子。在标准硅二极管的原子,比如说,当电子跌落到相对短距离原子是以这样的方式排列。结果,由于电子频率这么低的情况下人的眼睛是无法看得到的。 可见光发光二极管,比如用在数字显示式时钟的,间隙的大小决定了光子的频率,换句话说就是决定了光的色彩。当所有二极管都发出光时,大多数都不是很有效的。在普通二极管里,半导体材料本身吸引大量的光能而结束。发光二极管是由一个塑性灯泡覆盖集中灯光在一个特定方向。发光二极管比传统的白炽灯有几个优点。第一个是发光二极管没有灯丝会烧坏,所以寿命就更长。此外,发光二极管的小小塑性灯泡使得发光二极管更持久耐用。还可以更加容易适合现在的电子电路。传统白炽灯的发光过程包含了产生大量热量。这是完全是浪费能源。除非你把灯当做发热器用,因为绝大部分有效电流并不是直接产生可见光的。发光二极管所发出的热非常少,相对来说,越多电能直接发光就是越大程度上减少对电能的需求。3.4、蜂鸣器蜂鸣器是一种一体化结构的电子讯响器,广泛应用于计算机、打印机、报警器、定时器等电子产品中作发生器件;主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。本试验中应用电磁式,所以只介绍这一种。电磁式蜂鸣器由振荡器、电磁线圈、磁圈、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。电磁式蜂鸣器驱动原理:蜂鸣器发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机io引脚输出的电流较小,单片机输出的ttl电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。s51增强型单片机实验板通过一个三极管c8550来放大驱动蜂鸣器,原理图见下面图:驱动蜂鸣器原理图 蜂鸣器实物图如图所示,蜂鸣器的正极接到vcc(+5v)电源上面,蜂鸣器的负极接到三极发射管的发射极e,三极管的基级b经过限流电阻r2后由单片机的p3.4引脚控制,当p3.4输出高电平时,三极管t1截止,没有电流流过线圈,蜂鸣器不发声;当p3.4输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制p3.4引脚的电平来使蜂鸣器发出声音和关闭。程序中改变单片机p3.4引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色,音调的声音。另外,改变p3.4输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小,这些我们都可以通过编程实验来验证。四、 仿真电路设计与系统仿真图4.1、 protues仿真软件的相关介绍proteus软件是英国labcenter electronics公司出版的eda工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它eda工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。proteus是世界上著名的eda工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到pcb设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、pcb设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、hc11、pic10/12/16/18/24/30/dspic33、avr、arm、8086和msp430等,2010年又增加了cortex和dsp系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持iar、keil和mplab等多种编译器。4.2、 复位电路仿真电路图:复位是任何一种微型计算机都必须具备的工作方式。复位操作使单片机处于一种初始化的状态。mcs-51单片机的rst引脚上出现持续24个振荡周期的高电平信号时,单片机进入复位。通常有上电复位与人工按钮复位两种方式。本设计中采用上电复位方式。如图2所示。 图24.3、时钟电路仿真电路图通常单片机系统电路的实际有内部时钟和外部时钟两种形式,两种电路都向单片机提供最基本的振荡脉冲信号。本设计中的晶体振荡电路如图3所示。 图34.4、1602lcd显示仿真电路图1602lcd 采用标准的14 脚(无背光)或16 脚(带背光)接口。本设计中采用14脚lcd。vss和vdd为电源端和接地端,vee用于调整液晶显示器对比度。d0d7为8位双向数据线。电路连接图如图4所示。 图44.5、 键盘仿真电路图 设计中采用行列式非编码键盘,由行线、列线和键盘开关矩阵3部分组成。在这种键盘中,每根行线和列线的交叉处都有一个按键,当某个键被按下时,与这个按键相连的行线和列线就会接通,否者行线和列线不接通。如图5所示。 图54.6、蜂鸣器和发光二极管电路仿真图如图6和图7 图7图64.7、 相关功能仿真显示图系统初始界面如图8: 图8按数字键1显示数字1如图9: 图9按下功能键e显示内容如图10: 图10按下功能键f显示如图11: 图11 五、硬件电路及相关功能显示5.1、硬件电路整体图:p2.7 口为高电平,为打开lcd的celcd 的个端口地址为:8000h:写指令端口地址8100h:写数据端口地址 8200h: 读数据端口地址p3.5 为低电平灯亮,为高电平灯灭p3.4为低电平不响,送高电平响5.2、相关功能显示图:系统最初界面硬件显示如图12 按数字键6后硬件显示如图13 图12 图13 按功能键a后硬件显示如图14 按功能键b后硬件显示如图15 图14 图15 按e键后显示如图16 按功能键f后显示如图17 图16 图17六、程序流程图及相关程序6.1、程序构思:a、参考微机原理与接口技术教科书中的9.2点阵字符型lcd显示器与4*4键盘的应用为基础进行编写。b、认真研读参考程序,掌握了lcd液晶显示器的功能及使用方法。c、在源程序基础上修改、加工,加入满足实验要求的子程序。d、对每个子程序进行详细编写,对于4x4的键盘采用行列式扫描法,并在得到键值之后调用子程序将键值转化成ascii码来显示在lcd显示屏上。e、针对不同的按键功能以及不同的显示要求编写相对的子程序包括显示初始化子程序,按键显示子程序,功能键显示子程序以及蜂鸣器发声的子程序,这一系列的程序都由主程序来安排执行。f、对每个程序进行了单独的调试,并在综合起来之后进行了系统的仿真,解决实际遇到的问题比如各个显示之间的干扰、按键扫描对功能键实现的干扰等等,最终实现了基本的操作功能。g、考虑到整个系统的使用,设置f键位关机键。6.2、程序流程图:是否为e键显示“机电1007”,“thank you!”是否为f键显示“good bye”,系统关闭结束yy是否为c键蜂鸣器响是否为d键蜂鸣器静音yy是否为b键二极管灭y是否为a键二极管亮是否为数字键输出键值是否为功能键nyy开始调用lcd初始化子程序本系统显示欢迎使用调用键扫描子程序判断是否有键按下ynynnnnn七、遇到问题及解决方案7.1、硬件问题a、lcd屏未接通电源解决方案:用万用表检查焊接中是否有连线断路,发现有焊接处接触不良,重新焊接后即可正常使用。b、按下c键后蜂鸣器不响解决方案:查看仿真电路,发现p3.4处不论置1还是清0蜂鸣器处电平不改变。分析三极管原理后发现电阻r1与r2接反,经调换之后蜂鸣器正常。c、正确连接后,发现lcd不亮解决方案:组内讨论后,发现应调节蓝色电位器,调试之后正常。7.2、软件问题a、e键按下后第二行显示”thank you ! !”时预计在第二行显示但是显示在了第一行解决方案:在e键功能下调用lcd3显示机电1007时错将选择ddram中显示字符的地址删除,导致没能显示出汉字,将下面的程序添加后恢复正常:lcd33: movdptr,#8100h inc a movxdptr,a acallbusy acall del djnz r5,lcd33b、设置p3.4为低电平后,蜂鸣器不响解决方案:将清0改为输入方波,在高低电平的变化下,蜂鸣器响。输入方波程序如下:clr p3.4 mov r7,#0ffhca: mov r6,#0ffhca6: djnz r6,ca6 cpl p3.4 djnz r7,ca clr p3.4c、在文字显示过程中,有些文字较为复杂,例如机电,很难在8x5的lcd上完整显示。解决方案:将要显示的文字拆成两半,分别在两个8x5的lcd上显示即可。cgram的内容如下:db 04h,1fh,04h,0eh,15h,04h,04h,04hdb 00h,0eh,0ah,0ah,0ah,0bh,13h,13hdb 01h,0fh,09h,0fh,09h,0fh,01h,01hdb 00h,1ch,04h,1ch,04h,1ch,01h,1fhdb 04h,04h,04h,04h,04h,04h,04h,04hdb 1fh,11h,11h,11h,11h,11h,11h,1fhdb 1fh,11h,11h,11h,11h,11h,11h,1fhdb 1fh,01h,01h,02h,02h,04h,04h,08hd、在显示字母及汉字时,都遇到显示不全的情况。如:初始值显示“欢迎使用本系统”时只能显示“欢迎使用本系”,而且字没有显示完全。解决方案:经过组员的讨论之后发现是第一行显示的字型码没有完全输入显示屏,最后在修改过控制输入的字符量的r1之后问题得到解决。修改后程序如下:aaa: movdptr,#tab mova,r1 movca,a+dptr movdptr,#8100h movxdptr,a acallbusy incr1 cjner1,#40h,aaa针对字形没有显示完全,经过与课本上例题的对比发现是工作方式控制存在问题,在lcd初始化子程序中将方式控制字修改:由5x7改为5x10显示,即由38h改为3ch,光标不显示。lcdini: mov dptr,#8000h mov a,#3ch movx dptr,a acall busy mov dptr,#8000h mov a,#0ch movx dptr,a acall busy retf、按下f键结束之后,原先的显示还在lcd上,出现了重叠的现象解决方案:没有进行清屏,原先存入的字型码依然存在ddram中,需要赋值清除ddram和ac的值。改进后的程序如下:next05: cjne r0,#46h,next4 mov dptr,#8000h mov a,#01h movx dptr,a ljmp main 八、体会与感想我们所实践的这门课,使我们机电类本科生教学的主要基础课之一,课程紧密结合机电大类专业特点,围绕单片机原理和应用主题,系统介绍单片机的基本知识,基本组成,体系结构和工作模式等,从而让我们能清楚地了单片机的结构与工作流程,建立起系统的概念,为以后的更深层次的研究打下坚实基础。 这次微机原理课程设计历时约十天完成,在这些天里,我们发扬团队合作的精神,共同克服了很多难题,在较短的时间里成功完成了本次实验,看着我们的劳动成果,我们每个人都觉得自己的付出得到了回报。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。从各种元器件的资料查阅和电路的设计,到程序的编写和仿真电路的调试,再到硬件电路的焊接和硬件整体调试等,一个个都被我们解决了,我们收获很大。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,就比如在这次实践中,我们部分同学虽然对理论掌握得很不错,但在开始那段时间还是不能得心应手地进行设计与实践,这就是实践与理论的联系的过程,我们体会到了所谓的“纸上谈兵”,因此只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。通过本次课程设计,我们能够更深层次地了解和掌握单片机的基本知识和基本的编写程序,也更加深入地了解单片机这么课程,掌握汇编语言的设计和调试方法,熟悉设计的流程及程序的组合、调用和系统的调试。总之,我们默对单片机的应用有所了解,这对我们以后的研究与学习会有很大帮助!这次课程设计,也让我们意识到小组合作的重要性。在团队的共同努力下,每个成员都有明确分工,大家有自己的任务,同时也参与其他的任务环节,这样,我们小组的每一个成员既完成了自己的任务,同时又对整个设计十分了解。大家的一起努力下,众人拾材火焰高,才使我们的课设顺利完成。这次课程设计终于顺利完成了,在设计中遇到了很多编程、硬件调试问题,在小组讨论、老师及学长指导下找到了。在此,我们小组所有成员,感谢老师的指导与帮助,我们会更加努力地的去学习工作!九、参考文献1.赵嘉蔚,张家栋,霍凯,肖燕彩.单片机原理与接口技术.北京:清华大学出版社, 2010 2.朱大奇,李念强.单片机原理、接口及应用.南京:南京大学出版社,20033.胡汉才.单片机原理及其接口技术(第二版)。北京:清华大学出版社,20044.张家田.液晶显示器件应用技术.北京:机械工业出版社, 20045.刘法治.常用电子元器件及典型芯片的应用技术.北京:机械工业出版社,2007十、附件 程序清单: org 0000h ajmp main org 0300hmain: mov sp,#60h acall lcdini;调用lcd初始化子程序 acall lcd1loop: acall key;调用键扫描子程序 mov r0,#50h cjne r0,#0ffh,next0;若50h单元不等于0ffh,转到next0处执行 ajmp loop; 若50h单元等于0ffh,无键,转到loop处执行next0: acall xiang cjne r0,#0ah,next1;判断是否是数字键next1: jnc next2;不是则转到next2处执行 acall busy acall asc;键值转换为字符码 acall lcd2;键值显示 ? ajmp loop;转到loop处执行next2: cjne r0,#10h,next3;判断是否是功能键next3: jnc next4;不是功能键,转至loop循环 acall busy acall ascnext00: cjne r0,#41h,next01 ;判断是否为a键 acall lcd2 ;键值显示 clr p3.5 ;二极管亮 ljmp loopnext01: cjne r0,#42h,next02 ;判断是否为b键 acall lcd2 setb p3.5 ;二极管灭 ljmp loopnext02: cjne r0,#43h,next03 ;判断是否为c键 acall lcd2 clr p3.4 mov r5 ,#010h mov r7,#0ffhca: mov r6,#0ffhca6: djnz r6,ca6 cpl p3.4 djnz r7,ca djnz r5,ca setb p3.4 ;键蜂鸣器响 ljmp loopnext03: cjne r0,#44h,next04 ;判断是否为d键 setb p3.4 ;键蜂鸣器静音 acall lcd2 ljmp loopnext04: cjne r0,#45h,next05 ;判断是否为e键 acall lcd3 ;显示机电1007 acall lcd5 ;显示thank you ljmp loopnext05: cjne r0,#46h,next4 ;判断是否为f键 acall lcd4 ;逐个显示good bye acall tim1 mov dptr,#8000h mov a,#01h movx dptr,a ljmp loopnext4: ajmp loopkey: mov 50h,#0ffh;键扫描子程序,无键按下,50h为0ffh 、调用判断有无键按下子程序 cjne a,#0f0h,lk1;有键按下时,转消抖延时 ajmp kret;无键按下返回lk1: acall tim;调延时子程序消抖 acall ks1;再查有无键按下,若有则需进行按键处理 cjne a,#0f0h,lk2;有键按下,转求键码 ajmp kret;无键按下,返回lk2: mov r4,#00h;列号送入r4 jb p3.5,tiaozhuan mov r2,#0ceh ajmp lk3tiaozhuan:mov r2,#0feh;第一次扫描输出信号11111110送入r2 lk3: mov a,r2;输入列扫描信号 mov p3,a; mov p1,#0ffh;p1口置0ffh mov a,p1;读入行状态 jb acc.4,l1;第一行无键按下,转查第二行 mov a,#00h;第一行有键按下,该行首键号#00h送入 a ajmp lk;转求键号l1: jb acc.5,l2;第二行无键按下,转查第三行 mov a,#04h;第二行有键按下,该行首键号#04h送入 a ajmp lk;转求键号l2: jb acc.6,l3; 第三行无键按下,转查第四行 mov a,#08h; 第三行有键按下,该行首键号#08h送入 a ajmp lk;转求键号l3: jb acc.7,knext; 第四行无键按下,转查下一列 mov a,#0ch; 第四行有键按下,该行首键号#0ch送入 alk: add a,r4;求键号,键号=行首键号+列号 push acc;键号进栈保护lk4: acall ks1;等待键释放 cjne a,#0f0h,lk4;未释放,等待 pop acc;键释放,键号送入a mov 50h,a; ajmp kret;扫描结束,出口状态50h=键号knext: inc r4;列号加1 mov a,r2 jnb acc.3,kret;四列扫描完毕,返回主程序 rl a;形成下次扫描输出信号 mov r2,a ajmp lk3kret: retasc: mov dptr,#asctab;键值转换为子程序 mov a,50h;键值的字符码送入 movc a,a+dptr mov 50h,a retasctab: db 30h,31h,32h,33h,34h,35h db 36h,37h,38h,39h,41h,42h db 43h,44h,45h,46hks1: clr p3.0;判断有无键按下子程序 clr p3.1 clr p3.2 clr p3.3 mov p1,#0ffh mov a,p1;输入p1口状态 anl a,#0f0h;屏蔽低四位 ret;出口状态,累加器不等于0f时,有键按下tim: mov r7,#18h;延时子程序tm: mov r6,#0ffhtm6: djnz r6,tm6 djnz r7,tm retdel: mov r7,#01hde: mov r6,#01hde6: djnz r6,de6 djnz r7,de ret ;lcd初始化子程序lcdini: mov dptr,#8000h;选择指令寄存器地址 mov a,#3ch;方式设置控制字 movx dptr,a;两行显示,八位数据传送 acall busy;忙状态检查 mov dptr,#8000h;清屏 mov a,#01h movx dptr,a acall busy;忙状态检查 mov dptr,#8000h mov a,#0ch;显示开及光标设置 movx dptr,a acall busy retlcd1: mov dptr,#8000h;显示自定义字符欢迎使用本系统 mov a,#40h;设置cgram地址,显示欢迎使用本系统 movx dptr,a acall busy mov r1,#00haaa: mov dptr,#tab;查表,将欢迎使用本系统字符依次送入 mov a,r1movc a,a+dptrmov dptr,#8100hmovx dptr,aacall busyinc r1cjne r1,#40h,aaamov dptr,#8000hmov a,#80h;设置显示地址控制字movx dptr,a;第一行首地址80hacall busy mov r5,#08h mov a,#00h; 欢字符的地址lcd11:mov dptr,#8100h movx dptr,a inc a a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论