版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、河南理工大学河南理工大学河南理工大学微机原理与单片机课程设计微机原理与单片机课程设计报告报告题目:基于单片机题目:基于单片机 LCD 液晶动态显示液晶动态显示姓 名: * 学 号: * 专业班级: 电气 12* 指导老师: 张宏伟 所在学院:电气工程与自动化学院201*年 4 月 14 日1摘要摘要如今,科技进步给我们的生活带来了很大的变化。液晶显示设备越来越多,各种各样的液晶显示产品走进我们生活中。液晶显示器由于具有低压、微功耗、显示信息量大、体积小等特点,在移动通信终端、便携计算机、GPS 卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。液晶显示控制器作为液晶驱动电路的核心部件通常
2、由集成电路组成,通过为液晶显示系统提供时序信号和显示数据来实现液晶显示。本设计主要是以 AT89C51 单片机为控制设备,AMPIRE128*64 液晶显示器为显示设备,实现的一个可以显示静态汉字、动态字符、图片的液晶显示设计。引入密码锁功能,通过键盘和密码锁的配合,实现控制显示内容与显示效果。通过设置字模提取软件的相关参数值,再根据 AMPIRE128*64LCD 的指令表及程序设计等提取所要用的汉字、字符、图片程序送往液晶显示器显示,并可做一些灵活的动态显示变换,提升显示效果。并能通过设置密码和键盘控制显示内容和提示语。其中,时钟电路和复位电路是单片机中最为基础的两个电路。当键盘中按键数量
3、较多时,为了减少 I/O 口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口就可以构成 4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显。本设计在 Keil 软件下,采用的是 C 语言进行软件设计,C 语言使用助记符、符号、和数字等来表示指令的程序语言,具有容易理解和记忆且通用性强,设计方便等优点。此次设计利用Proteus 软件进行仿真验证了实验的正确性。本次课程设计较好的实现在液晶显示器 AMPIRE128*64 LCD 显示器上显示汉字、图片等,并且实现密码和键盘控制,具有现
4、实使用价值。 2目录目录1.概述概述.31.1 LCD 液晶屏简介.31.2 LCD 工作原理.32.系统总体方案及硬件设计系统总体方案及硬件设计.42.1 设计的目标和功能.42.2 设计的总体思路.42.3 框图.42.4 硬件部分原理图.52.5 控制电路部分.52.5.1 单片机简介.52.5.2 单片机功能.52.5.3 单片机引脚排列图.62.5.4 单片机在本次实验中所用到的引脚说明.62.6 时钟电路部分.72.7 复位电路部分.72.8 LCD 显示部分.82.9 矩阵键盘部分.92.9.1 矩阵键盘外形图.92.9.2 矩阵键盘工作原理.102.9.3 矩阵键盘扫描方法行扫
5、描法.103.软件部分软件部分.113.1 软件部分流程图.113.2 LCD 液晶动态显示的基本性能指标.113.2.1 12864 内部功能器件及相关功能.113.2.2 主要参数.133.2.3 读写操作时序.133.3 AMPIRE128*64 的指令系统.143.4 字模提取软件的应用.164.PROTEUS 软件仿真软件仿真.185.课程设计体会课程设计体会.196.参考文献参考文献.19附附 1 1:源程序代码:源程序代码.20附附 2 2:系统原理图:系统原理图.3631. 概述概述随着科技的高速发展,液晶显示设备越来越多,各种各样的液晶显示产品走进我们生活中。从手机到电脑显示
6、器,从掌上电脑到平板电视。无处没有液晶显示技术的身影。液晶显示器由于具有低压、微功耗、显示信息量大、体积小等特点,在移动通信终端、便携计算机、GPS 卫星定位系统等领域有广泛用途,成为使用量最大的显示器件。液晶显示控制器作为液晶驱动电路的核心部件通常由集成电路组成,通过为液晶显示系统提供时序信号和显示数据来实现液晶显示。本文以 AT89C51 单片机为控制设备,AMPIRE128*64 液晶显示器为显示设备,实现的一个可以显示静态汉字、动态字符、图片的液晶显示设计。1.1 LCD 液晶屏简介液晶是一种有机复合物,由长棒状的分子构成。在自然状态下,这些棒状分子的长轴大致平行。LCD 是由两个相互
7、垂直的极化滤光片构成,所以在正常情况下应该阻断所有试图穿透的光线。但是,由于两个滤光片之间充满了扭曲液晶,所以在光线穿出第一个滤光片后,会被液晶分子扭转 90 度,最后从第二个滤光片中穿出。另一方面,若为液晶加一个电压,分子又会重新排列并完全平行,使光线不再扭转,所以正好被第二个滤光片挡住。总之,加电将光线阻断,不加电则使光线射出。当然,也可以改变 LCD 中的液晶排列,使光线在加电时射出,而不加电时被阻断。但由于液晶屏幕几乎总是亮着的,所以只有加电将光线阻。1.2 LCD 工作原理屏幕能显示的基本原理就是在两块平行板之间填充液晶材料,通过电压来改变液晶材料内部分子的排列状况,以达到遮光和透光
8、的目的来显示深浅不一,错落有致的图像,而且只要在两块平板间再加上三元色的滤光层,就可实现显示彩色图像。42. 系统总体方案及硬件设计系统总体方案及硬件设计2.1 设计的目标和功能 本设计采用 AT89C51 模拟仿真,要求设计 12864 液晶显示与单片机的显示接口电路,显示简单的静态汉字,图片以及由多个图片组成的简单动画。还可实现密码锁的功能。2.2 设计的总体思路 液晶显示器 12864 的控制器 KS0108 可以显示字母、数字符号、中文字型及自定图形显示,只要一个最小的微处理系统,将液晶显示模块的接口作为I/O 设备直接与之连接,就可以进行控制液晶显示器和数据传输,从而达到理想的显示效
9、果。使用 P2 口给液晶显示器提供控制信号,P0 口给液晶显示器传送数据。12864 液晶显示器的控制信号有 PSB、RS、R/W、E,其中 RS、E、 R/W分别对应接在 AT89C51 的 P2.0、P2.1、P2.2、上,在本次设计中采用并行接口,故 PSB 接高电平,而 8 位数据口 DB0DB7 对应接在 P0 口上。背光灯的电源正极、液晶显示器模块的电源正极以及 LCD 驱动电压输入端都接在+5V 的稳压电源上。背光灯负极和模块的电源负极统一接地。液晶显示器模块的复位脚连接开关按纽与地相连。选择按键接高电平,即可实现单片机对液晶显示汉字的控制。2.3 框图此设计控制系统由 AT89
10、C51 单片机芯片、LCD 显示电路、复位电路、晶体振荡电路和按键组成,如图 2.3 所示:5LCD 显示器矩阵键盘AT89C51单片机复位电路时钟电路图 2.3 总设计框图2.4 硬件部分原理图单片机最小系统主要由单片机 AT89C51、电源电路、复位电路、时钟电路组成。图 2.4 硬件部分原理图2.5 控制电路部分2.5.1 单片机简介AT89C51 是一个低电压,高性能 CMOS8 位单片机,片内含 4k bytes 的可反复擦写的 Flash 只读程序存储器和 128bytes 的随机存取数据存储器(RAM) ,器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS
11、-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储单元,AT89C51 单片机在电子行业中有着广泛的应用。2.5.2 单片机功能其主要功能特性有以下几点: 6(1)与 MCS-51 产品指令系统完全兼容 (2)4k 字节可反复擦写(大于 1000 次)Flash ROM; (3)32 个可编程 I/O 口线; (4)128x8bit 内部 RAM; (5)2 个 16 位可编程定时/计数器中断; (6)时钟频率 0-24MHz; (7)可编程 UART 串行通道; (8)6 个中断源; (9)三级加密程序存储器; (10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能; (11)
12、有 PDIP、PQFP、TQFP 及 PLCC 等几种封装形式,以适应不同产品的需求。2.5.3 单片机引脚排列图AT89C51 为 8 位通用微处理器,采用工业标准的 C51 内核,在内部功能及管脚排布上与通用的 8xc51 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主 IC 内部寄存器、数据 RAM 及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号 IR 的接收解码及与主板 CPU 通信等。其引脚图如图 2.5.3 所示。图 2.5.3 AT89C51 引脚图2.5.4 单片机在本次实验中所用到的引脚说明XTAL1:反向振荡放大器的输入及内部时钟工作电路的
13、输入。7XTAL2:反向振荡器的输出。 EA:在 FLASH 编程期间,加编程电源(VPP) 。 RST:复位输入。当振荡器复位器件时,保持 RST 脚两个机器周期的高电平时间。P0 口:数据口可以被定义为数据/地址的低八位,能够用于外部程序/数据存储器。作通用 I/O 口使用时,加上拉电阻。 P1 口:控制按键,标准输入输出 I/O 口,P1 口管脚写入 1 后,被内部上拉为高,可用作输入。 P2 口:控制液晶,既可用于标准输入输出 I/O,也可用于外部或数据存储器程序存储器访问时的高八位地址。 P3.2 /INT0:控制中断,外部中断 0 输入。2.6 时钟电路部分单片机内部有一个用于构成
14、振荡器的高增益反向放大器,引脚 XTAL1 和XTAL2 分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得到的时钟信号比较稳定,实际使用中常采用这种方式。图 2.6 振荡电路图利用晶体本身的特性,可以利用晶振与电容搭建振荡电路与 AT89C51 引脚XTAL1 及 XTAL2 相连,向单片机提供一个频率定度较高的时钟脉冲。 电路中电容典型值通常选择 30pF。电容的大小会影响振荡器频率的高低、振荡器的稳定性和起振的快速性。晶体振荡频率的范围通常是在 1.2-12MHz。晶体频率越高,系统的时钟频率越高,单片机的运行速度也就越快。82.7 复位电路部分单片机在启动运行时,都需
15、要先复位,它的作用是使 CPU 和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51 系列单片机本身,一般不能自动进行复位,必须配合相应的外部电路才能实现。复位电路的作用就是使单片机在上电时能够复位或运行出错时进行复位状态。2.7 复位电路图AT89C51 的复位引脚 RST 外接开关复位电路,当电路工作后,闭合开关,只要在 RST 引脚上出现 2 个机器周期以上的高电平,单片机即可复位。若 RST始终保持高电平,则可对 AT89C51 循环复位。 通过外部复位电路给电容 C 充电加至 RST 引脚一个短的高低电平信号,此信号随着 Vcc 对电容 C 的充电过程而逐渐
16、回落,即 RST 引脚上的高电平持续时间取决于电容 C 的充电时间,因此为保证系统能可靠地复位,RST 引脚上的高电平必须维持足够长的时间。2.8 LCD 显示部分本系统采用液晶显示模块 AMPIRE128X64,为单色 LCD,其外形如图 2.8.1 所示。屏幕分为两半控制,控制引脚为 CS1 和 CS2,数据通过移位寄存器输入。通过改变电压而改变液晶的旋光状态,液晶材料的作用类似于一个个小的光阀,如图 2.8.2 所示。9 图 2.8.1 AMPIRE128*64 外形图 图 2.8.2 旋光光阀其引脚及其功能如表 2.8.3 所示表 2.8.3 AMPIRE128*64 的引脚管脚号管脚
17、名称LEVER管脚功能描述1CS1H/LH:选择芯片(右半屏)信号2CS2H/LH:选择芯片(左半屏)信号3GND0电源地4VCC+5.0V电源电压5PSBH/LH:并口方式 L:口串口方式6RS(CS)H/L并行的指令/数据选择信号;串行的片选信号7R/W(SID)H/L并行的读写选择信号;串行的数据口8E(CLK)H/L并行的使能信号;串行的同步时钟9DB0H/L数据 010DB1H/L数据 111DB2H/L数据 212DB3H/L数据 313DB4H/L数据 414DB5H/L数据 515DB6H/L数据 616DB7H/L数据 717LED_A-背光源正极(LED+5V)18LED_
18、K-背光源负极(LED-OV)102.9 矩阵键盘部分2.9.1 矩阵键盘外形图图 2.9.1 矩阵键盘外形图2.9.2 矩阵键盘工作原理先读取键盘的状态,得到按键的特征编码。先从 P1 口的高四位输出低电平,低四位输出高电平,从 P1 口的低四位读取键盘状态。再从 P1 口的低四位输出低电平,高四位输出高电平,从 P1 口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。使用上述方法我们得到 16 个键的特征编码。图 2.9.2 矩阵键盘2.9.3 矩阵键盘扫描方法行扫描法1、判断键盘中有无键按下 将全部行线 Y0-Y3 置低电平,然后检测列线的状态。只要有一列的电平
19、为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与 4 根行线相交叉的 4 个按键之中。若所有列线均为高电平,则键盘11中无键按下。2、判断闭合键所在的位置 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。高低电平翻转法:1、首先让 P1 口高四位为 1,低四位为 0,。若有按键按下,则高四位中会有一个 1 翻转为 0,低四位不会变,此时即可确定被按下的键的行位置。2、然后让 P1 口高四位为
20、 0,低四位为 1,。若有按键按下,则低四位中会有一个 1 翻转为 0,高四位不会变,此时即可确定被按下的键的列位置。123. 软件部分软件部分3.1 软件部分流程图开始LCD 初始化检测忙信号左写指令子程序左写数据子程序右写指令子程序右写数据子程序清屏程序结 束延时程序LCD 显示图 3.1 软件部分流程图3.2 LCD 液晶动态显示的基本性能指标在使用 12864LCD 前先必须了解以下功能器件才能进行编程。3.2.1 12864 内部功能器件及相关功能 1、指令寄存器(IR)IR 是用于寄存指令码,与数据寄存器数据相对应。当 D/I=0 时,在 E 信号下降沿的作用下,指令码写入 IR。
21、2、数据寄存器(DR)13DR 是用于寄存数据的,与指令寄存器寄存指令相对应。当 D/I=1 时,在下降沿作用下,图形显示数据写入 DR,或在 E 信号高电平作用下由 DR 读到DB7DB0 数据总线。DR 和 DDRAM 之间的数据传输是模块内部自动执行的。3、忙标志:BFBF 标志提供内部工作情况。BF=1 表示模块在内部操作,此时模块不接受外部指令和数据。BF=0 时,模块为准备状态,随时可接受外部指令和数据。利用STATUS READ 指令,可以将 BF 读到 DB7 总线,从检验模块之工作状态。4、显示控制触发器 DFF此触发器是用于模块屏幕显示开和关的控制。DFF=1 为开显示(D
22、ISPLAY OFF) ,DDRAM 的内容就显示在屏幕上,DFF=0 为关显示(DISPLAY OFF) 。DDF 的状态是指令 DISPLAY ON/OFF 和 RST 信号控制的。5、XY 地址计数器XY 地址计数器是一个 9 位计数器。高 3 位是 X 地址计数器,低 6 位为 Y 地址计数器,XY 地址计数器实际上是作为 DDRAM 的地址指针,X 地址计数器DDRAM 的页指针,Y 地址计数器为 DDRAM 的 Y 地址指针。X 地址计数器是没有记数功能的,只能用指令设置。Y 地址计数器具有循环记数功能,各显示数据写入后,Y 地址自动加 1,Y地址指针从 0 到 63。6、显示数据
23、 RAM(DDRAM)DDRAM 是存储图形显示数据的。数据为 1 表示显示选择,数据为 0 表示显示非选择。DDRAM 与地址和显示位置的关系见 DDRAM 地址表。7、Z 地址计数器Z 地址计数器是一个 6 位计数器,此计数器具备循环记数功能,它是用于显示行扫描同步。当一行扫描完成,此地址计数器自动加 1,指向下一行扫描数据,RST 复位后 Z 地址计数器为 0。Z 地址计数器可以用指令 DISPLAY START LINE 预置。因此,显示屏幕的起始行就由此指令控制,即 DDRAM 的数据从哪一行开始显示在屏幕的第一行。此模块的 DDRAM 共 64 行,屏幕可以循环滚动显示 64 行。
24、 3.2.2 主要参数表 3.2.2 主要参数143.2.3 读写操作时序读操作时序如图 3.2.3(1)所示;写操作时序如图 3.2.3(2)所示:图 3.2.3(1) 读操作时序图 3.2.3(2) 写操作时序3.3 AMPIRE128*64 的指令系统此类液晶显示模块的指令系统比较简单,共有七种。其指令如下表所示。151.显示开/关指令表 3.3.1 显示开/关指令代码R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0形式000011111DD=1:开显示(DISPLAY ON)意即显示器可以进行各种显示操作D=0:关显示(DISPLAY OFF)意即不能对显示器可以进行各种显
25、示操作2.显示起始行设置指令表 3.3.2 显示起始行设置指令代码R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0形式0011A5A4A3A2A1A0前面在 Z 地址计数器一节已经描述了显示起始行是由 Z 地址计数器控制的。A5A0 的 6 位地址自动送入 Z 地址计数器,起始行的地址可以是 063 的任意一行。例如:选择 A5A0 是 62,则起始行与 DDRAM 行的对应关系如下:DDRAM 行:62 63 0 1 2 328 29屏幕显示行:1 2 3 4 5 631 323.页设置指令表 3.3.3 页设置指令代码R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0
26、形式0010111A2A1A0所谓页地址就是 DDRAM 的行地址,8 行为一页,模块共 64 行即 8 页, A2A0表示 07 页。读写数据对地址没有影响,页地址由本指令或 RST 信号改变复位后页地址为 0。页地址与 DDRAM 的对应关系见 DDRAM 地址表4.列地址设置指令表 3.3.4(1) 列地址设置指令代码R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0形式0001A5A4A3A2A1A0此指令的作用是将 A5A0 送入列地址计数器,作为 DDRAM 的列地址指针。在对 DDRAM 进行读写操作后,列地址指针自动加 1,指向下一个 DDRAM 单元。16DDRAM
27、 地址表如表 2.3.4(2)所示表 3.3.4(2) DDRAM 地址表5.读状态指令表 3.3.5 读状态指令代码R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0形式00BUSY0ON/OFFRET0000当 R/W=1 D/I=0 时,在 E 信号为“H”的作用下,状态分别输出到数据总线(DB7DB0)的相应位。ON/OFF:表示 DFF 触发器的状态(见 DFF 触发器一节) 。RST:RST=1 表示内部正在初始化,此时组件不接受任何指令和数据。6.写数据指令表 3.3.6 写数据指令代码R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0形式01D7D6D5D4
28、D3D2D1D0D7D0 为显示数据,此指令把 D7D0 写入相应的 DDRAM 单元,Y 地指针自动加 17.读数据指令表 3.3.7 读数据指令代码R/WD/IDB7DB6DB5DB4DB3DB2DB1DB0形式11D7D6D5D4D3D2D1D017此指令把 DDRAM 的内容 D7D0 读到数据总线 DB7DB0,Y 地址指针自动加1。由 RAM 地址映射表可知 LCD 显示屏由两片控制器控制,分别用 CS1 和 CS2控制。每个内部带有 64X64 位(512 字节)的 RAM 缓冲区,对应关系如图 3.3所示。LCD128*64IC18 页*64 列64*64 点IC28 页*64
29、 列64*64 点图 3.3 LCD 地址映射图整个屏幕分左、右两个屏,每个半屏右 8 页,每页有 8 行,注意数据是竖行排列。显示一个字要 16*16 点,全屏有 128*64 个点,故可显示 32 个中文汉字。每两页显示一行汉字,可显示 4 行汉字,每行 8 个汉字,共 32 个汉字。而显示数据需要 16*8 个点,可显示数据是汉字的两陪。屏幕是通过 CS1、CS2 两信号来控制的,不同的组合方式所选的屏幕是不同的,对应关系如表 3.3.8 所示 表 3.3.8 对应关系CS1CS2选屏00全屏01左屏10右屏11不选183.4 字模提取软件的应用对于我们需要显示的一两个字符来说,用手工的
30、方法去取模是可以的,但是随着我们需要显示的字符的数量增加以及多样化,手工取模就显的很吃力,并且效率底下,所以我们需要一个取模工具,网上流传的一个字模提取软件可以让我们高效的得到我们需要显示的字符的代码。随着电子行业的发展,很多研发机构把汉字以代码的形式固化在液晶显示屏中,形成了带字库的液晶显示屏,方便了我们使用液晶显示屏,但是对于复杂多变的图形,他就显得就无能为力了,只能用取模软件去取得显示代码,因此学会字摸软件的使用,会使我们的工作效率事半功倍的。字模软件界面如下:19图 3.4 字模软件界面图4. Proteus 软件仿真软件仿真图 4.1 电路仿真图略. 20 图 4.2 仿真运行结果结
31、果分析:测试的结果如图片所示。显示器显示正确如仿真时的结果。开机后显示开机文字和开机动画,如上图流程,直到出现输入密码界面暂停。用户开始使用键盘输入密码,若密码输入正确,则进入祝福界面;若密码输入错误,则进入密码错误提示界面。键盘可以正确的实现密码输入与控制,效果良好,达到的预期的效果。设计使用的控制器结构简单、显示准确,具有一定的实际应用价值。5. 课程设计体会课程设计体会众所周知,单片机是电子信息工程专业的一们重要的课程,也是当今电子行业的重要分支之一,应用范围之广,普遍程度之高大家有目共睹,所以学好单片机对于电电气学院的学生来说至关重要,甚至直接关系到日后的就业。正因为这重要性才需要我们
32、去实践,去锻炼。在此次课程设计中,在最初的写程序及设计时遇到了一些困难。因为一开始课堂上接触的是汇编语句,但汇编语句不易读懂,所以难以下手。后来改用C 语言,也因为之前的 C 基础,比较容易上手,所以最后程序是用 C 程序编写。这样来不仅进一步增强了自己对单片机的兴趣,也让自己对单片机的认识又有新的提高。虽然此次的选题难度并不大,但是就是这样一个简单的题目却让我明白“纸上得来终觉浅”的深刻意义。经过一次次的修改程序和软件调试,使我了解了 KEIL、PROTUES 和自摸提取软件的使用,为日后自己主动地去设计一些东西打下了基础。当然在此期间也出现了问题,如:1.在写程序的时候,中断的灵活使用掌否
33、则21握不是很好;通过此次课程设计,我们懂得不管做什么事都要有恒心,只要坚持一切都会会实现的。让我了解了 AMPIRE128*64 液晶显示器的基本知识和使用方法,激发了强烈的兴趣,也重新让我温习了下 WORD 的使用。感谢老师的教导,感谢同学的帮助。参考文献参考文献书、专著:书、专著:1张刚毅. 单片机原理及应用.高等教育出版.2012.5.2 徐爱均.徐阳.KeilC51 单片机高级语言应用编程与实践.电子工业出版社.2013.123 李泉溪. 单片机原理与应用实例仿真,中国计量出版北京航空航天大学出版社社.2012.5.4 毛学军.液晶显示技术.北京:电子工业出版社,2014.8电子文献
34、:电子文献:1 LCD12864 原理与应用(源程序+原理图+Proteus 仿真)http:/ 1:源程序代码:源程序代码#include#include lcd12864.h#include ziku.c#include KeyScan.h#define TIME1H 0 x3C#define TIME1L 0 xB0 /定时器 1 溢出时间:50ms#define SCANPORT P1int b;unsigned char t,NUMLINE=10;unsigned char x,w=255,m=1; /键盘防抖动标志位。unsigned int num1;/当按键中断产生时,首先判断
35、此位。bit b_KeyShock=0; /0-执行键盘扫描及键码处理程序;1-不执行。bit b_KillShock=0;/防抖标志清除位:0-不清除;1-清除。unsigned char uc_KillCount=0;/抖动标志清除计数,使用定时器 1。/bit b_KeyScan=0; /0-不扫描; 1-扫描。unsigned char num_table3=1,2,3;char table116=Welcome to: ;char table216= ;char table44= ;char table_f4;void clear(unsigned char page,unsigne
36、d char lineaddress,int n, unsigned char table)unsigned char i,j,k; unsigned char temp16; if(lineaddress0X80) CS1=1;22 CS2=0; for(j=0;j=0X80) CS1=0; CS2=1; lineaddress=lineaddress-0X40; b=tablej-0X20; for(k=0;k16;k+) tempk=ch2bk; writecode(page); writecode(lineaddress); for(i=0;i8;i+) writedata(tempi
37、); writecode(page+1); writecode(lineaddress); for(i=8;i16;i+) writedata(tempi); lineaddress+=8; delay(20); void displayzifu(unsigned char page,unsigned char lineaddress,int n, unsigned char table) unsigned char i,j,k; unsigned char temp16; if(lineaddress0X80) CS1=1; CS2=0; for(j=0;j=0X80) CS1=0; CS2
38、=1; lineaddress=lineaddress-0X40; b=tablej-0X20; for(k=0;k16;k+) tempk=ch2bk; writecode(page); writecode(lineaddress); for(i=0;i8;i+) writedata(tempi); writecode(page+1); writecode(lineaddress); for(i=8;i16;i+) writedata(tempi); lineaddress+=8;delay(100); void vKeyProcess(unsigned char ucKeyCode)swi
39、tch(ucKeyCode)case 11:vShowOneChar(NUMROW,NUMLINE,uca_7);break; /7case 12:vShowOneChar(NUMROW,NUMLINE,uca_8);break; /8case 13:vShowOneChar(NUMROW,NUMLINE,uca_9);break; /9case 21:vShowOneChar(NUMROW,NUMLINE,uca_4);break; /4case 22:vShowOneChar(NUMROW,NUMLINE,uca_5);break; /523case 23:vShowOneChar(NUM
40、ROW,NUMLINE,uca_6);break; /6case 31:vShowOneChar(NUMROW,NUMLINE,uca_1);break; /1case 32:vShowOneChar(NUMROW,NUMLINE,uca_2);break; /2case 33:vShowOneChar(NUMROW,NUMLINE,uca_3);break; /3case 42:vShowOneChar(NUMROW,NUMLINE,uca_0);break; /0case 14:vShowOneChar(NUMROW,NUMLINE,uca_CHU);break; /case 24:vSh
41、owOneChar(NUMROW,NUMLINE,uca_CHENG);break;/*case 34:vShowOneChar(NUMROW,NUMLINE,uca_JIAN);break; /-case 44:vShowOneChar(NUMROW,NUMLINE,uca_JIA);break; /+case 43:vShowOneChar(NUMROW,NUMLINE,uca_DENG);break; /=default:break;void main() SCANPORT=0 x0F;IT0=1;/中断方式:下降沿。EX0=1;/开启外部中断。/TH1=TIME1H;TL1=TIME1
42、L;TR1=1; /开启定时器 1ET1=1; /开定时器 1 中断EA=1;lcdinti();displayzifu(0XB8,0X40,16,&table1);displayhanzi(0XBa,0X40,12,&XUEXIAO);displayzifu(0XBa,0X98+8,4,&table4);displayhanzi(0XBc,0X40,16,&XUEYUAN);displayhanzi(0XBE,0X40,16,&xi);delay(200); delay(200);delay(200); lcdinti();clear(0XB8,0X4
43、0,16,&table2);clear(0XBa,0X40,16,&table2);clear(0XBc,0X40,16,&table2);clear(0XBe,0X40,16,&table2);LCDDisplay(0Xb8,0X40,&ch);delay(200);delay(200);delay(200); clear(0XB8,0X40,16,&table2);clear(0XBa,0X40,16,&table2);clear(0XBc,0X40,16,&table2);clear(0XBe,0X40,16,&ta
44、ble2);displayhanzi(0XBa,0X40,12,&mima);while(1)if(b_KeyScan=1) /如果有按键按下,则进行按键扫描和键码处理。24b_KeyScan=0;t = ucKeyScan();vKeyProcess(t);NUMLINE += 8;w += 1;if(w=3)w = 0;num_tablew = t;delay(500); if(NUMLINE30) for(x=w;x100;x-) /计算出输入的数值 num1 = num1 + num_tablex*m; m = m*10; NUMLINE = 10;m = 1;w = 255;
45、 if(num1=3453)num1 = 0;clear(0XB8,0X40,16,&table2);clear(0XBa,0X40,16,&table2);clear(0XBc,0X40,16,&table2);clear(0XBe,0X40,16,&table2);displayhanzi(0XB8,0X40,16,&huanying);displayhanzi(0XBb,0X40,16,&xi);displayhanzi(0XBe,0X40,16,&writer);elsenum1 = 0;clear(0XB8,0X40,16,&a
46、mp;table2);clear(0XBa,0X40,16,&table2);clear(0XBc,0X40,16,&table2);clear(0XBe,0X40,16,&table2);displayhanzi(0XBa,0X40,16,&cuo); void vINT0(void) interrupt 0if(b_KeyShock=0)b_KeyScan=1;/开启键盘扫描标志。b_KeyShock=1;/设置防抖动标志。else b_KeyShock=0;/如果有抖动则不执行键扫描,恢复防抖动标志。/if(b_KeyShock=1)b_KillShock
47、=1;/如果防抖动标志位开启则开启防抖动标志清除位,/300ms 后清除防抖动标志。25/*定时器 1 中断,用于计时功能和防抖动标志清除*void vTimer1(void) interrupt 3/if(b_KillShock=1)if(uc_KillCount=5)/当防抖动标志位为 1 时,计时 300ms 后清除抖动标志位。b_KeyShock=0;b_KillShock=0;uc_KillCount=0;else uc_KillCount+;/TH1=TIME1H;TL1=TIME1L;unsigned char code uca_0=0 x00,0 xE0,0 x10,0 x08
48、,0 x08,0 x10,0 xE0,0 x00,0 x00,0 x0F,0 x10,0 x20,0 x20,0 x10,0 x0F,0 x00;/*0,0*/unsigned char code uca_1=0 x00,0 x10,0 x10,0 xF8,0 x00,0 x00,0 x00,0 x00,0 x00,0 x20,0 x20,0 x3F,0 x20,0 x20,0 x00,0 x00;/*1,1*/unsigned char code uca_2=0 x00,0 x70,0 x08,0 x08,0 x08,0 x88,0 x70,0 x00,0 x00,0 x30,0 x28,0
49、 x24,0 x22,0 x21,0 x30,0 x00;/*2,2*/unsigned char code uca_3=0 x00,0 x30,0 x08,0 x88,0 x88,0 x48,0 x30,0 x00,0 x00,0 x18,0 x20,0 x20,0 x20,0 x11,0 x0E,0 x00;/*3,3*/unsigned char code uca_4=0 x00,0 x00,0 xC0,0 x20,0 x10,0 xF8,0 x00,0 x00,0 x00,0 x07,0 x04,0 x24,0 x24,0 x3F,0 x24,0 x00;/*4,4*/unsigned
50、 char code uca_5=0 x00,0 xF8,0 x08,0 x88,0 x88,0 x08,0 x08,0 x00,0 x00,0 x19,0 x21,0 x20,0 x20,0 x11,0 x0E,0 x00;/*5,5*/unsigned char code uca_6=0 x00,0 xE0,0 x10,0 x88,0 x88,0 x18,0 x00,0 x00,0 x00,0 x0F,0 x11,0 x20,0 x20,0 x11,0 x0E,0 x00;/*6,6*/unsigned char code uca_7=0 x00,0 x38,0 x08,0 x08,0 x
51、C8,0 x38,0 x08,0 x00,0 x00,0 x00,0 x00,0 x3F,0 x00,0 x00,0 x00,0 x00;/*7,7*/unsigned char code uca_8=0 x00,0 x70,0 x88,0 x08,0 x08,0 x88,0 x70,0 x00,0 x00,0 x1C,0 x22,0 x21,0 x21,0 x22,0 x1C,0 x00;/*8,826*/unsigned char code uca_9=0 x00,0 xE0,0 x10,0 x08,0 x08,0 x10,0 xE0,0 x00,0 x00,0 x00,0 x31,0 x
52、22,0 x22,0 x11,0 x0F,0 x00;/*9,9*/unsigned char code uca_CHU=0 x00,0 x00,0 x00,0 x00,0 x80,0 x60,0 x18,0 x04,0 x00,0 x60,0 x18,0 x06,0 x01,0 x00,0 x00,0 x00;/*/,10*/unsigned char code uca_CHENG=0 x40,0 x40,0 x80,0 xF0,0 x80,0 x40,0 x40,0 x00,0 x02,0 x02,0 x01,0 x0F,0 x01,0 x02,0 x02,0 x00;/*,11*/uns
53、igned char code uca_JIAN=0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x01,0 x01,0 x01,0 x01,0 x01,0 x01,0 x01;/*-,12*/unsigned char code uca_JIA=0 x00,0 x00,0 x00,0 xF0,0 x00,0 x00,0 x00,0 x00,0 x01,0 x01,0 x01,0 x1F,0 x01,0 x01,0 x01,0 x00;/*+,13*/unsigned char code uca_DENG=0 x40,0 x40,
54、0 x40,0 x40,0 x40,0 x40,0 x40,0 x00,0 x04,0 x04,0 x04,0 x04,0 x04,0 x04,0 x04,0 x00;/*=,14*/unsigned char code ch29516=0 x00,0 x04, 0 x00,;unsigned char code XUEXIAO1216=0 x10,0 x60,0 x02,0 x8C,0 x00,0 x04,0 xE4,0 x24,0 x24,0 xE4,0 x04,0 x04,0 xFC,0 x04,0 x04,0 x00,0 x04,0 x04,0 x7E,0 x01,0 x00,0 x0
55、0,0 x0F,0 x04,0 x04,0 x0F,0 x40,0 x80,0 x7F,0 x00,0 x00,0 x00,/*河,0*/0 x04,0 xE4,0 x24,0 x24,0 x64,0 xA4,0 x24,0 x3F,0 x24,0 xA4,0 x64,0 x24,0 x24,0 xE4,0 x04,0 x00,0 x00,0 xFF,0 x00,0 x08,0 x09,0 x09,0 x09,0 x7F,0 x09,0 x09,0 x09,0 x48,0 x80,0 x7F,0 x00,0 x00,/*南,1*/0 x04,0 x84,0 x84,0 xFC,0 x84,0
56、x84,0 x00,0 xFE,0 x92,0 x92,0 xFE,0 x92,0 x92,0 xFE,0 x00,0 x00,0 x20,0 x60,0 x20,0 x1F,0 x10,0 x10,0 x40,0 x44,0 x44,0 x44,0 x7F,0 x44,0 x44,0 x44,0 x40,0 x00,/*理,2*/,0 x04,0 x04,0 x04,0 x04,0 x04,0 x04,0 xFC,0 x04,0 x04,0 x04,0 x04,0 x04,0 x04,0 x00,0 x00,0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,
57、0 x3F,0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,0 x00,/*工,3*/,0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,0 xFF,0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,0 x20,0 x00,0 x80,0 x80,0 x40,0 x20,0 x10,0 x0C,0 x03,0 x00,0 x03,0 x0C,0 x10,0 x20,0 x40,0 x80,0 x80,0 x00,/*大,4*/270 x40,0 x30,0 x11,0 x96,0 x90,0 x90,0 x91,0
58、 x96,0 x90,0 x90,0 x98,0 x14,0 x13,0 x50,0 x30,0 x00,0 x04,0 x04,0 x04,0 x04,0 x04,0 x44,0 x84,0 x7E,0 x06,0 x05,0 x04,0 x04,0 x04,0 x04,0 x04,0 x00,/*学,4*/;unsigned char code writer1616=0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00
59、,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,/* ,0*/0 x00,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,/*,0*/0 x00,0 x80,0 x8
60、0,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x80,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,0 x00,/*,1*/0 x00*00,0 x00,0 x00,0 x00,0 x00,*,0 x00,0 x00,0 x00,/* ,2*/0 x00,* 8,0 x08,0 x00,0 x01,0 x00,* * 1E,0 x00,/* ,3*/0 x10,0 x10*0,0 x00,0 x04*0 x00,/* ,4*/0 x40,0 x50,0 x4E,0 x48,0 x48,0 xFF,0 x48,0 x48,0 x48,0 x40,0 x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年福州软件职业技术学院马克思主义基本原理概论期末考试模拟题及答案解析(必刷)
- 英国生物制药临床试验监管要求变更研究及企业研发投入风险控制方案
- 芬兰教育云平台技术构建数字学习服务应用推广前景评价
- 2025年大连装备制造职业技术学院马克思主义基本原理概论期末考试模拟题及答案解析(必刷)
- 2025年滨州科技职业学院单招职业技能测试题库带答案解析
- 航空维修保养行业市场现状供需分析及投资评估规划分析研究报告
- 航空材料制造行业材料供需种类平衡与投资委托规划报告
- 2025年北京师范大学珠海校区马克思主义基本原理概论期末考试模拟题带答案解析
- 2025年德钦县幼儿园教师招教考试备考题库含答案解析(必刷)
- 2025年费县招教考试备考题库附答案解析(必刷)
- 2025国考国资委申论高分笔记
- 2025年高级经济师《人力资源》考试真题及答案
- 矿山项目经理岗位职责与考核标准
- 2025年乡村旅游民宿业发展现状与前景可行性研究报告
- 国家安全生产公众号
- 2025年中国多深度土壤水分传感器行业市场全景分析及前景机遇研判报告
- 2025档案管理职称考试题库及答案
- 眼科护理读书报告
- 大国兵器(中北大学)学习通网课章节测试答案
- 贵州防空工程管理办法
- 外墙真石漆合同补充协议
评论
0/150
提交评论