单片机课程设计臧建波_第1页
单片机课程设计臧建波_第2页
单片机课程设计臧建波_第3页
单片机课程设计臧建波_第4页
单片机课程设计臧建波_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

1、 单片机系统课程设计 单片机系统课程设计 题目名称: 12864LCD显示键盘按键的计算器 专业班级: 测控1201班 学生姓名: 臧建波 学 号: 201223030117 指导教师: 郭广灵 成绩:评语:指导老师签名: 日期: 单片机系统课 程 设 计课程设计名称: 12864LCD显示键盘按键的计算器 专 业 班 级 : 测控1201班 学 生 姓 名 : 臧建波 学 号 : 201223030117 指 导 教 师 : 郭广灵 课程设计地点: 31 号楼 课程设计时间: 2014-12-92014-12-20 单片机系统 课程设计任务书学生姓名臧建波专业班级测控1201班学号20122

2、3030117题 目12864LCD显示键盘按键的计算器 课题性质工程设计课题来源自拟指导教师郭广灵主要内容(参数)基于51单片机的电子温度计控制系统的设计,实现了对环境温度的实时测量与显示,且能实现上下限温度设置与超限报警的功能。任务要求(进度)第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。第3-4天:按照确定的方案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。第5-6天:软件设计,编写程序。第7-8天:程序调试。第9-12天:撰写课程设计报告。要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确。主要参考资料【1】

3、电子发烧友论坛【2】 张迎新等,单片机初级教程.北京;航空航天大学出版社,2000.8【3】 阎石数字电路技术基础(第五版)北京:高等教育出版社,2006【4】 皮大能等. 单片机课程设计指导书. 北京:北京理工大学出版社,2010审查意见系(教研室)主任签字: 年 月 日 摘要5一 引言61.1 AT89C51单片机61. LCD接口9本课设所选择的LCD是LGM12641的汉字图形型液晶显示模块,可显示汉字及图形,图形液晶显示显示器接口如图3-1所示。92. 指令描述113. 汉字字模提取15二.硬件电路的设计162.1 硬件电路设计框图162.2硬件设计电路的元件清单1723 硬件设计电

4、路图172.4电路分析18三 设计思路、仿真及调试203.1 设计方法203.2 软件仿真203.3 Proteus仿真软件简介20四 软件应用214.1 硬件调试214.2 软件调试214.3 代码分析22五 设计总结23参考文献26附录1:程序代码2712864LCD显示键盘按键的计算器摘要简易计算器是一种非常广泛日常工具,对现代社会越来越流行。它可以进行一些简易的计算。该电路采用AT89C51单片机作为核心,功耗小,能在5V的低压工作,电压可选用35V电压供电。本系统硬件部分由AT89C52单片机、LCD12864液晶屏、矩阵和独立键盘、蜂鸣器等部分构成。软件部分在keil环境下用C51

5、语言编写,包括简易计算显示等。关键词:AT89C51;液晶屏LCD12864;矩阵键盘一 引言 众所周知单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。本设计要制作的就是单片机于生活中最为常见的异种应用简易计算器。本简易计算器AT89S52单片机作为核心,可以进行简易的计算并作出相应的显示。简易计算器显示电路由LCD12864组成,硬件方面AT89C5

6、1单片机,晶振,电源,液晶屏LCD1602。1.1 AT89C51单片机AT89C51是一种低功耗、高性能CMOS8位微控制器,具有4K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使AT89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89C52具有以下标准功能: 4k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计

7、数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。主要性能1、与MCS-51单片机产品兼容2 、8K字节在系统可编程Flash存储器3 、1000次擦写周期4 、全静态操作:0Hz33Hz5 、三级加密程序存储器6 、32个可编程I/O口线7 、三个16位定时器/计数器8、八个中断源9、全双工UART串行通道10、 低功耗空闲和掉电

8、模式l 1、掉电后中断可唤醒l 2、看门狗定时器l3、 双数据指针l4、 掉电标识符引脚结构P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作

9、为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。引脚号第二功能P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)P1.5 MOSI(在系统编程用)P1.6 MISO(在系统编程用)P1.7 SCK(在系统编程用)P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输

10、出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电

11、平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。引脚号第二功能P3.0 RXD(串行输入)P3.1 TXD(串行输出)P3.2 INT0(外部中断0)P3.3 INT0(外部中断0)P3.4 T0(定时器0外部输入)P3.5 T1(定时器1外部输入)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器写选通)RST: 复位输入。晶振工作时,RST脚持续2 个机器周

12、期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE 仅在执行

13、MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当AT89c51从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发

14、生电路的输入端。XTAL2:振荡器反相放大器的输出端。1. LCD接口液晶显示器件(LCD)独具的低压、微功耗特性使他在单片机系统中特得到了广泛的应用,常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国应用较为广泛,因为汉字不能像西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。本课设所选择的LCD是LGM12641的汉字图形型液晶显示模块,可显示汉字及图形,图形液晶显示显示器接口如图3-1所示。 图1-1 LCD电路图36 表1.1 LGM12641接口说明表管脚号 管脚 电平 说明 1CS1H/L 片选择信号,高电平时选择前64列2CS

15、2H/L片选择信号,高电平时选择后64列3GND0V 逻辑电源地4VCC 5.0V 逻辑电源正5V0 LCD驱动电压,应用时在VEE与V0之间加一2K可调电阻6RSH/L 数据指令选择:高电平:数据D0-D7将送入显示RAM; 低电平:数据D0-D7将送入指令寄存器执行7R/WH/L 读写选择: 高电平:读数据;低电平:写数据8E H/L 读写使能,高电平有效,下降沿锁定数据9DB0H/L 数据输入输出引脚10DB1H/L 数据输入输出引脚11DB2H/L 数据输入输出引脚12DB3H/L 数据输入输出引脚13DB4 H/L数据输入输出引脚14DB5H/L数据输入输出引脚15DB6H/L数据输

16、入输出引脚16DB7H/L数据输入输出引脚17RSTL复位信号,低电平有效18VOUT-10VLCD驱动电源2. 指令描述 (1) 显示开/关设置LLLLHHHHHH/LCODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 功能:设置屏幕显示开/关。 DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DD RAM)中的内容。 (2) 设置显示起始行 CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHH行地址(063)功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动

17、将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。(3) 设置页地址 CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLHLHHH页地址(07)功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。地址就是DD RAM 的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。DDRAM地址映像表如表3.2所示。 表3.2 RAM地址映像表 Y 地址 0

18、 1 2 61 62 63 DB0 PAGE0 DB7 X=0 DB0 PAGE1 DB7 X=1 DB0 PAGE6 DB7 X=6 DB0 PAGE7 DB7 X=7 (4) 设置列地址 CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLH列地址(063) 功能:DDRAM 的列地址存储在Y地址计数器中,读写数据对列地址有影响在对DDRAM进行读写操作后,Y地址自动加一。 (5)状态检测 CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HLBFLON/OFF RST LLLL功能:读忙信号标志位(BF)、复位标

19、志位(RST)以及显示状态位(ON/OFF)。BF=H:内部正在执行操作; BF=L:空闲状态。RST=H:正处于复位初始化状态; RST=L:正常状态。ON/OFF=H:表示显示关闭; ON/OFF=L:表示显示开。(6)写显示数据 CODE:R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0L HD7D6D5D4D3D2D1D0功能:写数据到DDRAM,DDRAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。D7-D0位数据为1表示显示,数据为0表示不显示。写数据到DD RAM前,要先执行“设置页地址”及“设置列地址”命令。(7)读显示数据 CODE:

20、R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HHD7D6D5D4D3D2D1D0基本操作时序: 读状态:输入:RS=L,R/W=H,CS1 或CS2=H,E=H 输出:D0D7=状态字 写指令:输入:RS=L,R/W=L,D0D7=指令码,CS1或CS2=H,E=高脉冲输出:无 读数据:输入:RS=H,R/W=H,CS1 或CS2=H,E=H 输出:D0D7=数据 写数据:输入:RS=H,R/W=L,D0D7=数据,CS1 或CS2=H,E=高脉冲 输出:无由RAM 地址映射表可知LCD 显示屏由两片控制器控制,分别用CS1和CS2控制。每个内部带有64X64

21、位(512字节)的RAM 缓冲区,对应关系如图3-2所示。LCD 128*64点 IC18页*64列64*64点IC28页*64列64*64点 图2-2 LCD地址映射图整个屏幕分左、右两个屏,每个半屏右8页,每页有8行,注意数据是竖行排列,如表3.2。显示一个字要16*16点,全屏有128*64个点,故可显示32个中文汉字。每两页显示一行汉字,可显示4行汉字,每行8个汉字,共32个汉字。而显示数据需要16*8个点,可显示数据是汉字的两陪。屏幕是通过CS1、CS2两信号来控制的,不同的组合方式所选的屏幕是不同的,对应关系如表3.3所示。表2-3 屏幕选择表 CS1 CS2 选屏 0 0 全屏

22、0 1 左屏 1 0 右屏 1 1 不选(8)操作 设定开始页地址和列地址; 设定读写模式,进行读写操作。 只有理解了液晶显示器各个指令的功能,再结合单片机的指令系统,就能编写C语言程序来达到混合显示汉字与数字的目的。通过程序将字的代码写入相应的DDRAM地址,就可以再相应的位置显示相应的字。3. 汉字字模提取液晶显示器件(LCD)独具的低压、微功耗特性使他在单片机系统中特得到了广泛的应用,常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国应用较为广泛,因为汉字不能象西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。液晶模块显示汉字方法:使

23、用图形液晶模块以点阵形式来显示汉字和图形,每8个点组成1个字节,每个点用一个二进制位表示,存1的点显示时在屏上显示一个亮点,存0的点则在屏上不显示,最常用的16×16的汉字点阵由32个字节组成。以在我国应用较为普及的液晶显示驱动控制器12864为例,在液晶屏上竖向8个点为1个字节数据,通过字模提取软件按照先左后右,先上后下的方式对汉字进行字模提取。 D0 . D7 上一页下一页 图3-3 字提取方格由于D0-D7是从上到下排列的,最上面8行是上一页,我们先提取上面一页的数据16个,在按照相同的方法提取下一页的数据16个,在分别写入对应的DDRAM地址,就可以显示我们所需要的字。简单的

24、字可手工制作,也可以用起模软件zimo221【5】提取标准的宋体汉字,不过本文所用的液晶显示屏用这款软件要设计纵向取模并且要反字节,否则将显示乱码。数字只需起汉字的一半数据就可以了,如图3-3所示的左边8列或者右边8列。计算器键盘键盘电路的设计原理首先行列式键盘中的键盘实际上就是一个机械开关,该开关位于行线和列线的交点处,通过按键加以连接。当按下某个键时,该交点的行线和列线接通,相应的行线或列线上的电平发生变化,从而可以确定被按下的功能键。4*4的行列式键盘如图所示:其次运用线翻转法判断有无按键按下:按键的高4位用于列控制,低4位用于行控制,并将全部的行线P0.0P0.3置低电平,然后再检查列

25、线电平的状态。只要其中有一列为低,则表示有键按下,并且按下的键位于低电平和4根行线交叉的某一个按键中。判断被按下的键的位置:依次将所有的行线P0.4P0.7置为低电平,在判断4根列线的电平状态,当遇到某一列的电平为低时表示此键按下。计算器键盘就是一个4*4的行列扫描,行对应着A,B,C,D(和P1.4P1.7相连,读取P1口的值判断哪个键被按下了,执行该操作。二.硬件电路的设计2.1 硬件电路设计框图51系列单片机系统4*4键盘LCD显示 晶振电路复位电路线路原理框图2.2硬件设计电路的元件清单器件名称数量AT89C511按键1774LS08110K电阻9电容22uF1LCD16021晶振12

26、MHz1电容30pF25K电位器123 硬件设计电路图将4*4的键盘直接接在P1口上,用P0口作为LCD的显示输入,P3.7口作为蜂鸣器的接口。2.4电路分析1、 通过AT89C51芯片P0口与键盘相接,键盘中的键就是一个行列开关,该开关位于行列的交点处,通过按下的某个键,该交点的行线和列线联通,相应的行列电平发生变化,从而可以确定按下的键的功能。读取P0的值就可以确定按键,再由AT89C51芯片读取按键的值,通过P1口和P2口显示在LCD12864上,每显示一个按键值LS1发出声音。接P3.7口,判断按键是否按下,一旦键盘某个键按下,此元件会发出声音。2、 时钟电路由AT89C51的18,1

27、9引脚的时钟端以及132MHz的晶振、47pF的电容C1、C2组成,采用片内振荡方式。其时间周期为1/12us,机器周期为1s。单片机的外部电路如图所示AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体和陶瓷谐振器一起构成振荡器。振荡器特性:XTAL1和XTAL2分别为反馈放大器的输入和输出。该反相放大器可以配置为片内振荡器。石英振荡器和陶瓷振荡器均可采用。如采用外部时钟源驱动器件,XTAL2应不接。其余输入至少要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高

28、低电平。3、 复位电路采用简单的手动复位,由按钮、R1、R2、C接到AT89c51的RST复位端。在时钟电路工作之后,当外部电路使得RST端出现2个机器周期以上的高电平,系统内部复位。所谓手动复位,就是使用按键,按键按下,是单片机进入复位状态。图所示电路具有上电复位和手动复位功能。显然按下R2不起任何作用,按键按下后,R1、R2组成分压电路,可以给RST引脚提供高电平以实现复位。如果RST引脚一直保持高电平,单片机将循环复位。三 设计思路、仿真及调试3.1 设计方法本电路设计采用AT89S52单片机为核心,利用晶振产生频率为1HZ的时钟脉冲信号,利用液晶屏LCD1602显示计算及其时间信息,通

29、过对AT89S52单片机的编程控制液晶屏LCD1602的显示。显示计算和简易计算的信息同在LCD1602,通过按键切换选择。外部按键可及时设定或调整时间或计算的信息。本程序组成可分为3个模块:矩阵键盘模块,LCD显示模块,和运算模块。3.2 软件仿真在硬件设计完成后,利用软件对其进行仿真,以尽可能的减少做板的次数。本次我采用Proteus软件仿真。3.3 Proteus仿真软件简介PROTEUS软件是英国Lab center electronics公司研发的EDA工具软件。它是一个集模拟电路、数字电路、模/数混合电路以及多种微控制器系统为一体的系统设计和仿真平台。是目前同类软件中最先

30、进、最完整的电子类仿真平台之一。它真正实现了在计算机上完成从原理图、电路分析与仿真、单片机代码调试与仿真、系统测试与功能验证到PCB板生成的完整的电子产品研发过程。为了尽快排查系统的软硬件错误,使整个单片机系统实现预期功能,最直接而有效的方法是对系统进行软硬件联调,即Proteus 与KEIL 联合仿真,先通过KEIL C51编辑、修改、编译源程序并生成.HEX单片机能识别的文件,然后再运行Proteus将HEX文件与原理图中的单片机系统进行仿真。PROTEUS的实时仿真解决了理论上电路设计的不合理性问题,为电路的正确设计提供了很好的参考标准。四 软件应用4.1

31、硬件调试 硬件调试分为静态调试和动态调试,对于硬件调试而言,只要认真焊接,硬件一般不会出现什么问题的。静态调试一般采用的工具是万用表,它是在用户系统未工作时的一种硬件检测。动态调试是在用户系统工作的情况下发现和排查错误的一种硬件检测。调试步骤是:首先把电路分为若干模块,调试过程中与该模块无关的元件可以不加考虑,这样可把故障限定在一定的范围内;故障清除后,把各个模块合在一起进行联调,即可完成整个硬件调试工作。4.2 软件调试软件调试是通过对程序的汇编、连接、执行来发现程序中存在的语法错误与逻辑错误并加以排除纠正的过程。调试过程:1、代码录入完成进行调试,运行出现了31个错误2、在Keil uVi

32、sion3中检测查找错误,3、检测过程中总是有一处错误无法解决4、最后把原程序分开逐个调试,检查每段程序的错误,修正每个代码错误5、这种分开调试方法的效率还是很不错的,经过几次修改就完成了程序的调试,运行结果没有错误,电路显示也完全正确。4.3 代码分析#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#include<reg51.h>,#include<intrins.h> 皆属于头文件,前者是定义51单片机特殊功能

33、寄存器和位寄存器的,后者包含特殊指令例如:crol( ),cror( )。#define uchar unsigned char,#define uint unsigned int,define delayNOP()nop();nop();nop()皆属于宏定义,后者是将三个延时周期定义在一起,用一个delayNOP()表示。Void LCD_intialize, , void Display_String(char*,char);皆为调用函数,第一个是调用LCD初始化函数;第二个是调用LCD写数据函数。void main()uchar i;LCD_Initialize();主函数,中断允许寄

34、存器IE,IE=0x82=10000010表示EA为1,CPU开放中断;ET0=1,允许外部中断1中断。定时/计数器方式控制寄存器TMOD,TMOD=0x01=00000001,表示在T0方式字段中工作方式为方式1,是定时器方式,定时器的技术不受外部引脚输入电平的控制,而只受定时器运行控制位(TR0、TR1)的控制。进行高低8为赋初值。接着调用初始化LCD子函数,在其子函数中进行顺序执行,每个都先延时5毫秒,接着调用写指令函数。返回至主程序。接着调用显示函数,在LCD指定行上显示字符串,Display_String(msg1,0x00),msg1为一个一维数组(Second Watch 0),

35、即Display_String(Second Watch 0,0x00),在该子函数中调用设置显示位置子函数,在该子函数中调用写指令子函数进行或操作五 设计总结(1)该系统硬件电路比较简单明了,主要是由集成芯片和一些电阻电容组成,关键的还是在系统软件方面。系统温度测量范围广,显示范围可以从-55到125。当然数字温度计的测量范围不会这么大,但因小数点位置变化而引起显示情况的增加,就造成程序的复杂性增加了。此系统是一个基础的数字电子温度计系统,技术含量不是非常高,只是由一些基本的电路,子程序组成,但是组成系统的子程序比较多,这就在我们做系统时的细心是个考验。经过调试,本系统基本能满足设计要求。(

36、2)对学习使用PROTEUS电路设计软件有了比较初步认识,文无论是档组织结构、文件管理、还是工作界面管理,这帮助了我更好更快的熟练的掌握 PROTEUS电路设计的使用方法和操作过程。(3)仿真的时候可能电路能够正确的运行,但是在实际的电路设计过程中还要考虑信号线之间的干扰问题。(4)在进行一个大的系统设计的时候,要将系统模块化,单独进行各个模块的设计,最后应用逻辑功能将其电气连接起来。(5)所以在课程设计的实践中,我们应将实验课与课堂教学结合起来,锻炼自己的理论联系实际的能力与实际动手能力。掌握了比较常用的仪器的使用方法,提高了动手能力,同时培养了严谨的工作作风和科学态度。开始初始化

37、参数初始化LCD显示有键输入?读取键码LCD显示数字键清零键功能键状态清零输入数值数值送显示缓冲YN等待数值输入结果送显示缓冲根据上次功能键和输入的数据计算结果本次功能键?等待数值输入结果送显示缓冲等待数值输入结果送显示缓冲参考文献1 杨家成单片机原理与应用及C51程序设计北京:清华大学出版社,20072 夏路易 石宗义Protel 99se电路原理图与电路板设计教程北京:北京希望电子出版社,2004.115-1253 阎石.数字电子技术基础.北京:高等教育出版社,2009.35-574 张迎新单片微型计算机原理、应用及接口技术北京:国防工业出版社,2004.206-2135 李林功单片机原理

38、与应用基于实例驱动和Proteus仿真北京:科学出版社,2011.25-636张迎新.单片微型计算机原理及接口技术.北京:国防工业出版社,1993.127张迎新等,单片机初级教程.北京;航空航天大学出版社,2000.8.33-628 皮大能等. 单片机课程设计指导书. 北京:北京理工大学出版社,2010.73-96附录1:程序代码/12864LCD显示计算器键盘按键实验源代码#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/定义DotMat

39、ri.c 中的点阵,数字,符号等编码extern uchar code Word_String32;extern uchar code Keyboard_Chars16;extern uchar code KeyPosTable;extern uchar KeyScan();/ keypad.c中的键盘扫描函数/定义在LCP_12864.c中的相关液晶显示函数extern LCD_Initialize();void Display_A_Char(uchar,uchar,uchar*);void Display_A_WORD(uchar,uchar,uchar*);void Display_A_

40、WORD_String(uchar,uchar,uchar,uchar*);/键盘扫描开启标志,其值由外部中断0控制bit KeyPressDown = 0;uchar T_Count = 0;sbit SPK = P37;/Keybord_Chars中数字与符号编码与键盘按键对照表uchar code KeyPosTable=7,8,9,10,4,5,6,11,1,2,3,12,15,0,14,13;/蜂鸣器发声void Beep()uchar i,x=20;while (x-)for(i=0;i<120;i+); SPK=SPK;/主程序void main()uchar i;LCD_

41、Initialize(); /初始化LCDfor (i=0;i<7;i+) /从第一页开始,左边距16点,显示7个16*16点阵的中文提示信息Display_A_WORD_String (1,16*(i+1),1,Word_Stringi);P1=0x0f;IE=0x83;/允许外部0和定时器0中断IT0=1;/设为下降沿中断方式,外部中断0用于启停键盘扫描处理TH0=(65536-5000)/256;/50ms定时TL0=(65536-5000)%256;while(1)/如果有按键按下则处理按键if(KeyPressDown=1)Beep();KeyPressDown=0;Displ

42、ay_A_Char(4,55,Keyboard_Chars KeyPosTableKeyScan() );TR0=0;/外部中断0控制消抖延时void EX0_INT() interrupt 0TR0=1;/开启定时器0,延时300ms消抖/定时器用于消抖并确认有键按下,启动主程序中的按键扫描void T0_INT() interrupt 1if(+T_Count=6) /50*6=300ms延时抖动 T_Count=0; KeyPressDown=1; /确定有键按下TH0=(65526-50000)/256; /50ms定时 TL0=(65526-50000)%256; /-LCD_128

43、64.C-/名称:12864LCD显示驱动程序(不带字库)/-#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LCD_DB_PORT P0 /液晶DB0DB7#define LCD_START_ROW 0xC0 /起始行#define LCD_PAGE 0xB8 /页指令#define LCD_COL 0x40 /列指令/液晶引脚定义sbit DI=P20;sbit RW=P21;sbit E=P22;sbit CS1=P2

44、3;sbit CS2=P24;sbit RST=P25;/检查LCD是否忙bit LCD_Check_Busy()LCD_DB_PORT=0xFF;RW=1;_nop_();DI=0;E=1;_nop_();E=0;return (bit)(P0 & 0X80);/向LCD发送命令void LCD_Write_Command(uchar c)while (LCD_Check_Busy(); LCD_DB_PORT=0xFF;RW=0;_nop_();DI=0; LCD_DB_PORT=c;E=1;_nop_();E=0;/向LCD发送数据void LCD_Write_Data(ucha

45、r d )while (LCD_Check_Busy(); LCD_DB_PORT=0xFF;RW=0;_nop_();DI=1;LCD_DB_PORT=d; E=1;_nop_();E=0;/初始化LCDvoid LCD_Initialize()CS1=1; CS2=1;LCD_Write_Command(0x38); /8位形式,2行字符LCD_Write_Command(0x0F); /开显示LCD_Write_Command(0x01); /清屏LCD_Write_Command(0x06); /画面不动光标右移LCD_Write_Command(LCD_START_ROW); /设置

46、起始行/通用显示函数/从第P页第L列开始显示W字节数据,数据在r所指向的缓冲/每字节8位是垂直显示的,高位在下,低位在上/每个8*128的矩形区域为一页(每页分左半页与右半页)/整个LCD又由64*64的左半习工和64*64的右半屏构成void Common_Show(uchar P,uchar L,uchar W,uchar *r)uchar i;if(L<64) /显示在左半屏或右半屏CS1=1;CS2=0;LCD_Write_Command(LCD_PAGE+P);LCD_Write_Command(LCD_COL+L);if(L+W<64) /全部显示在左半屏for(i=0

47、;i<W;i+) LCD_Write_Data(ri);else /如果越界则跨越左右半屏显示for(i=0;i<64-L;i+) LCD_Write_Data(ri); /左半屏显示CS1=0; CS2=1; /右半屏显示LCD_Write_Command(LCD_PAGE+P); LCD_Write_Command(LCD_COL); for(i=64-L;i<W;i+) LCD_Write_Data(ri);else /全部显示在右半屏CS1=0;CS2=1;LCD_Write_Command(LCD_PAGE+P);LCD_Write_Command(LCD_COL+

48、L-64);for(i=0;i<W;i+) LCD_Write_Data(ri);/显示一个8*16点阵字符(字符上半部分与下半部分分别处在相邻两页中)void Display_A_Uchar(uchar P,uchar L,uchar *M)Common_Show(P,L,8,M);Common_Show(P+1,L,8,M+8);/显示一个16*16点阵汉字(汉字上半部分与下半部分分别处在相邻两页中)void Display_A_WORD(uchar P,uchar L,uchar *M) Common_Show(P,L,16,M); /显示汉字上半部分Common_Show(P+1,L,16,M+16); /显示汉字下半部分/显示一串16*16点阵汉字void Display_A_WORD_String(uchar P,uchar L,uchar C,uchar *M)uchar i;for

温馨提示

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

最新文档

评论

0/150

提交评论