摘 要
人机交互、人机互动(英文Human–Computer Interaction或Human–Machine Interaction,简称HCI或HMI),是一门研究系统与用户之间的交互关系的学问。系统可以是各种各样的机器,也可以是计算机化的系统和软件。人机交互界面通常是指用户可见的部分。用户通过人机交互界面与系统交流,并进行操作。小如收音机的播放按键,大至飞机上的仪表板、或是发电厂的控制室。人机交互界面的设计要包含用户对系统的理解,那是为了系统的可用性或者用户友好性。
在现代各类仪器的开发中,人机交互功能正在起着无可替代的作用,人机交互界面友好的仪器将更加容易操作和使用,从而提高工作效率。现代社会中,单片机在人机交互中应用十分广泛,单片机具有成本低廉,简单便携的特点,所以通过单片机进行人机交互具有十分有用的研究价值。本文以AT89C52单片机为控制核心,以LCD为显示器件,通过4x4矩阵键盘实现显示按键值0-F,实现一种简单的人机交互。进一步介绍了单片机AT89C52应用在系统中的应用,分析了系统各部分的硬件及软件实现。
本次设计目是完成一个简单方便,能可靠稳定工作的人机交互系统,该方案结构简单,控制可靠, 便于推广。
关键词:AT89C51单片机;人机交互;4X4矩阵键盘;液晶显示
1
Abstract
HCI is a research system and the interactions between users of knowledge. System may be a variety of machines, it can be computerized system and software. Interactive interface usually refers to the user-visible parts. User interactive interface with the system through exchanges and conduct operations. Small as a radio play button, ranging from aircraft
instrument panel, or the power plant control room. The design of man-machine interface that contains the user's understanding of the system, that is, to the availability of the system or user-friendliness.
In the modern types of instrument development, interactive features is playing an irreplaceable role in human-computer interaction will be more user-friendly instrument is easy to operate and use, thereby improving efficiency. In modern society, the microcontroller applications in a wide range of
human-computer interaction, microcontroller with low cost, simple and portable features, so by the microcontroller has a very useful human-computer interaction research value. In this paper, AT89C52
microcontroller as the core of the LCD, through a simple 4x4 matrix keyboard to achieve human-computer interaction design.AT89C52 single-chip application further describes the application of the system, analyzing each part of the system hardware and software.
The design goal is to complete a simple, stable and reliable work of human-computer interaction system, the program structure is simple, reliable control, easy to promote.
Keywords: AT89C51 microcontroller; Human–Computer Interaction; 4X4 matrix keyboard; LCD display
2
插图清单
图2-1 总体框图
图2-2 单片机AT89C52引脚图
图2-3 键盘输入模块 图2-5 LCD1602引脚图 图2-6 复位电路 图2-7 晶振电路 图3-1选择单片机型号 图3-2 加入文件 图3-3 主程序流程图 图3-4键盘按键流程图 图3-5 LCD显示流程图
图4-1 仿真结果
3
插表目录
表2.1 P1.0和P1.1的第二功能
表2.2 P3口第二功能 表2-3寄存器选择控制
4
引言
人机交互技术(Human-Computer Interaction Techniques)是指通过计算机输入、输出设备,以有效的方式实现人与计算机对话的技术。它包括机器通过输出或显示设备给人提供大量有关信息及提示请示等,人通过输入设备给机器输入有关信息,回答问题及提示请示等。人机交互技术是计算机用户界面设计中的重要内容之一。它与认知学、人机工程学、心理学等学科领域有密切的联系。人机交互在人类文明和社会进步中起着重要的作用 。
目前,人机交互技术正处于多通道、多媒体的智能人机交互阶段,已经取得了不少研究成果,不少产品已经问世。侧重多媒体技术的有:触摸式显示屏实现的“桌面”计算机,能够随意折叠的柔性显示屏制造的电子书,从电影院搬进客厅指日可待的3D显示器,使用红绿蓝光激光二极管的视网膜成像显示器;侧重多通道技术的有:“汉王笔”手写汉字识别系统,结合在微软的Tablet PC 操作系统中数字墨水技术,广泛应用于Office/XP的中文版等办公、应用软件中的IBM/Via Voice连续中文语音识别系统,输入设备为摄像机、图像采集卡的手势识别技术,以IPHONE手机为代表的可支持更复杂的姿势识别的多触点式触摸屏技术,以及IPHONE中基于传感器的捕捉用户意图的隐式输入技术。
人机交互技术领域热点技术的应用潜力已经开始展现,比如智能手机配备的地理空间跟踪技术,应用于可穿戴式计算机、隐身技术、浸入式游戏等的动作识别技术,应用于虚拟现实、遥控机器人及远程医疗等的触觉交互技术,应用于呼叫路由、家庭自动化及语音拨号等场合的语音识别技术,对于有语言障碍的人士的无声语音识别,应用于广告、网站、产品目录、杂志效用测试的眼动跟踪技术,针对有语言和行动障碍人开发的“意念轮椅”采用的基于脑电波的人机界面技术等。热点技术的应用开发是机遇也是挑战,基于视觉的手势识别率低,实时性差,需要研究各种算法来改善识别的精度和速度,眼睛虹膜、掌纹、笔迹、步态、语音、唇读、人脸、DNA等人类特征的研发应用也正受到关注,自然语言理解虽然目前在语言模型、语料库等方面有进展外,仍将是人机交互的重要目标,多通道的整合也是人机交互的热点,另外,与“无所不在的计算”、“云计算”等相关技术的融合与促进也需要继续探索。
5
第1章 绪 论
1.1课题的研究意义
人机交互(Human-Computer Interaction,HCI),就是人与机器的交互,本质上是指人与计算机的交互,或者可以理解为人与\"含有计算机的机器\"的交互。人机交互研究的最终目的在于探讨如何使所设计的计算机能帮助人们更安全,更高效地完成所需的任务。人机交互领域是一个科学技术转化为生产力的重要领域,人机交互的发展,技术与设备的成熟必然意味着巨大的市场。当先进的人机交互技术应用于电子产品,通信设施,机械设备,交通工具,人工智能,智能仪器,多媒体,情报采集,身份认证,安全防范以及武器现代化时,将会对科学技术,生产领域,国家安全,社会的工作方式和生活方式等方向产生深远影响。企业决策人员在考虑自己的产品战略时需要更加重视人机界面这一渗透各个产品的因素。产品设计人员也应该在新产品开发的过程中,进一步从人机交互方式的角度来探究新产品的可能性。
1.2课题研究的现状和发展的趋势
目前,人机交互技术正处于多通道、多媒体的智能人机交互阶段,已经取得了不少研究成果,不少产品已经问世。侧重多媒体技术的有:触摸式显示屏实现的“桌面”计算机,能够随意折叠的柔性显示屏制造的电子书,从电影院搬进客厅指日可待的3D显示器,使用红绿蓝光激光二极管的视网膜成像显示器;侧重多通道技术的有:“汉王笔”手写汉字识别系统,结合在微软的Tablet PC 操作系统中数字墨水技术,广泛应用于Office/XP的中文版等办公、应用软件中的IBM/Via Voice连续中文语音识别系统,输入设备为摄像机、图像采集卡的手势识别技术,以IPHONE手机为代表的可支持更复杂的姿势识别的多触点式触摸屏技术,以及IPHONE中基于传感器的捕捉用户意图的隐式输入技术。人机交互技术与计算机始终相伴发展,CPU、GPU的运算能力日趋强大,网络和通信技术
的快速发展,显示技术的重大突破都将为人机交互提供新的起点与高度。也许有一天,你的房间的墙壁和窗户都是基于PLED技术的巨型显示器,无需遥控器和控制器,游戏机或电视机就能“感应”到你目光的变化、捕捉到你的手势和动作、听懂你语音的命令,用你的头、手、足、躯干就可以控制游戏中的角色。互联网正在向“云端”计算时代发展,人机交互的发展仍将延续由以计算机为中心的复杂交互向以人为中心的简单、自然交互转移的理念,理想的人机交互模式就是“用户自由”,将来,能听、能看、能说、能感觉的计算机会看不见,而计算会无所不在,不可见的人机交互也会无所不在,就像我们时刻呼吸着的氧气一样。
1.3本文研究的主要内容和结构安排
研究内容:本设计采用AT89C52单片机为主控芯片,结合外围电路,4x4矩阵式键盘,LCD显示模块,通过软件程序组成简单的人机交互系统,能够实现用单片机AT89C52控制矩阵键盘显示按键值0~F。结构安排:本系统初定以AT89C52系列单片机为控制核心,主要完成对键盘的响应、液晶显示、系统复位功能的控制,起到总控和协调各模块之间工作的作用。系统结构分别由以下模块:单片机主控模块、4X4矩阵键盘模块、复位电路、液晶显示模块、晶振电路。
6
第2.1系统的总体框架
2章 系统硬件电路的设计
根据设计的要求系统可以分为以下几个模块:单片机模块、LCD显示模块与按键模块,模块之间的关系图如下方框电路图2-1所示。
晶振电路手动复位按键控制单片机机AT89C52LCD显示 图2-1 总体框图 各模块功能如下:
键盘控制模块:采用4x4的矩阵式键盘,用于完成字符的输入功能。 复位电路:完成系统的复位。
晶振电路:晶振电路是给单片机提供时钟信号。
显示模块:用于完成对系统输出的显示及操作提示功能。
本系统外围电路包括键盘输入部分、晶振部分、复位部分、显示部分,根据实际情况键盘输入部分选择4×4矩阵键盘,显示部分选择字符型液晶显示LCD1602,实现功能就是通过矩阵式键盘显示0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。
2.2主控模块的设计
2.2.1概述
主控模块采用的是AT89C52单片机,AT89C52是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的只读程序存储器(PEROM)和256 bytes的随即存储数据存储(RAM),器件采用ATMEL公司的高密度,非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置通用8位中央处理器和
7
FLASH存储单元。功能强大AT89C52单片机适合与许多较为复杂控制应用场合。
AT89C52提供以下标准功能:8k字节FLASH闪速存储器,256字节内部RAM,32个I/O口线,3个16位定时/计数器,一个6向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路。同时,AT89C52可降至OHZ的静态逻辑操作,并支持两种软件可选的节点工作模式。空闲方式停止CPU工作,但允许RAM,定时/计数器,串行口及中断系统继续工作。掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个部件复位。 2.2.2AT89C52主要性能参数
AT89C52单片机与MCS-51产品指令和引脚兼容,内部含有8K字节可擦写FALSH闪存,1000次擦写周期。同时具有全静态操作:OHZ-24MHZ,三级加密程序存储器,256×8字节内部RAM,32个可编程I/O口线,3个15位定时/计数器,8个中断源,可编程串行UART通道的功能部件。 2.2.3引脚功能说明 引脚图如图2.1所示:
图2-2 AT89C52单片机引脚图
8
功能说明如下:
1 VCC:电源电压
2 GND:地
3 P0 口:P0 口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash 编程时,P0 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 4 P1 口:P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参数见表2.1.
表2.1 P1.0和P1.1的第二功能
引脚号 P1.0 P1.1 功能特性 T2(定时/计数器2外部计数脉冲输入),时钟输出 T2EX(定时/计数2捕获、重装载触发和方向控制)
5 P2 口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX @RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。
6 P3口:P3口是一组带有内部上拉电阻的8位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能,如表2.2所示,此外,P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。
9
表2.2 P3口第二功能
7 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
8 ALE/PROG: 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。
9 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。
·EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H—FFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。
·XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 ·XTAL2:振荡器反相放大器的输出端。
本设计单片机AT89C52的主要任务就是接受4X4矩阵式键盘的输入,使其输出并显示于数码管LM106L上。 2.3键盘输入模块的设计
由于本设计所要求的是显示字符0,1,2,3,4,5,6,7,8,9,10,A,B,C,D,E,F,所用到的按键数量较多而不适合用独立按键式键盘。采用的是矩阵式按键键盘,它由行和列组成,也称行列式键盘,按键位于行列的交叉点上,显示字符由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口。本设计中使用的这个4×4键盘可以显示出0-F。键盘的每个按键功能在程序设计中设置。它与单片机的连接如图2-3所示。
10
图2-3键盘输入模块 2.4显示模块的设计 2.4.1液晶原理介绍
显示器是人与机器沟通的重要界面,早期以显像管(CRT/Cathode Ray Tube)显示器为主,但随着科技不断进步,各种显示技术如雨后春笋般诞生,近来由于液晶(LCD)显示器具有轻薄短小、耗电量低、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,在近年来价格不断下跌的吸引下,逐渐取代CRT之主流地位,显示器明日之星架势十足。 液晶是一种既具有液体的流动性又具有光学特性的有机化合物,它的透明程度和呈现的颜色受外加电场的影响,利用这特点便可做成字符显示器。
液晶显示器(LCD)英文全称为Liquid Crystal Display,它一种是采用了液晶控制透光度技术来实现色彩的显示器。和CRT显示器相比,LCD的优点是很明显的。由于通过控制是否透光来控制亮和暗,当色彩不变时,液晶也保持不变,这样就无须考虑刷新率的问题。
显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用的是LCD液晶模块,采用一个16×1的字符型液晶显示模块。 点阵图形式液晶由 M 行×N 列个显示单元组成,假设 LCD 显示屏有64行,每行有 128列,每 8列对应 1 个字节的 8 个位,即每行由 16 字节,共 16×8=128个点组成,屏上 64×16 个显示单元和显示 RAM 区 1024 个字节相对应,每一字节的内容和屏上相应位置的亮暗对应。一个字符由 6×8 或 8×8点阵组成,即要找到和屏上某几个位置对应的显示 RAM区的 8 个字节,并且要使每个字节的不同的位为‘1’,其它的为‘0’,为‘1’的点亮,为‘0’的点暗,这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单
11
了,可让控制器工作在文本方式,根据在LCD 上开始显示的行列号及每行的列数找出显示 RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
2.4.2液晶模块简介
LCD1602液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码, CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,可以查看参考文献(30)中的表4. CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM但愿,LCD1602液晶模块的引脚图如图2-5所示。
图2-5 LCD1602引脚图
LCD1602引脚介绍: Vss(1脚):一般接地。 Vdd(2脚):接电源。 Vee(3脚):液晶显示器对比度调整端,接电源时对比度最弱,接地时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
RS(4脚):RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
R/W(5脚):R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
E(6脚):E(或EN)端为使能(enable)端,下降沿使能。 DB0(7脚):底4位三态、 双向数据总线 0位(最低位)。 DB1(8脚):底4位三态、 双向数据总线 1位。 DB2(9脚):底4位三态、 双向数据总线 2位。 DB3(10脚):底4位三态、 双向数据总线 3位。
12
DB4(11脚):高4位三态、 双向数据总线 4位。 DB5(12脚):高4位三态、 双向数据总线 5位。 DB6(13脚):高4位三态、 双向数据总线 6位。
DB7(14脚):高4位三态、 双向数据总线 7位(最高位)(也是busy flang)。 寄存器选择控制如表2-3。
表2-3寄存器选择控制
RS 0 0 1 1 R/W 0 1 0 1 操作说明 写入指令寄存器(清除屏等) 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 写入数据寄存器(显示各字型等) 从数据寄存器读取数据 2.5复位部分
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C3上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,在电容充电的过程中RST端电压逐渐下降,当RST端的电压小于某一数值后,CPU脱离复位状态,由于电容C3足够大,可以保证RST高电平有效时间大于24个振荡周期,CPU能够可靠复位。增加手动复位按键是为了避免死机时无法可靠复位。当复位按键按下后电容C3通过R1放电。当电容C3放电结束后,RST端的电位由R1与R2分压比决定。由于R1 图2-6 复位电路 2.6晶振部分 晶振电路的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的 13 方法保持同步。晶振电路通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。 AT89S52引脚XTAL1和XTAL2与晶体振荡器及电容C1、C2按图2-7所示方式连接。晶振、电容C1/C2及片内与非门(作为反馈、放大元件)构成了电容三点式振荡器,振荡信号频率与晶振频率及电容C1、C2的容量有关,但主要由晶振频率决定,范围在0~33MHz之间,电容C1、C2取值范围在5~30pF之间。其电路图如2-7所示。 图2-7 晶振部分 根据实际情况,本设计中采用12MHZ作为系统的外部晶振。 第3章 系统软件的设计 3.1编程语言介绍 14 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言 的特点。它由美国贝尔研究所的D.M.Ritchie于1972年推出,1978年后,C语言已先后被移植到大、中、小及微型机上,它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画,具体应用比如单片机以及嵌入式系统开发。C语言是世界上最流行、使用最广泛的高级程序设计语言之一。 在操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。 C语言绘图能力强,具有可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。 3.2 keil开发环境和建立工程 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 启动uVison4,点击“File New„”在工程管理器的右侧打开一个新的文件输入窗口,在这个窗口里输入一个源程序,注意大小写及每行后的分号,不要错输及漏输。 输入完毕之后,选择“File Save”,给这个文件取名保存,取名字的时候必须要加上扩展名,一般C语言程序均以“.C”为扩展名,这里将其命名为fgf.c,保存完毕后可以将该文件关闭。Keil不能直接对单个的C语言源程序进行处理,还必须选择单片机型号;确定编译、汇编、连接的参数;指定调试的方式;而且一些项目中往往有多个文件,为管理和使用方便,Keil使用工程(Project)这一概念,将这些参数设置和所需的所有文件都加在一个工程中,只能对工程而不能对单一的源程序进行编译和连接等操作。 点击“Project->New Project„”菜单,出现对话框,要求给将要建立的工程起一个名字,这里起名为fgf,不需要输入扩展名。点击“保存”按钮,出现第二个对话框,如图3-1所示,这个对话框要求选择目标CPU(即你所用芯片的型号),Keil支持的CPU很多,这里选择Atmel公司的89S52芯片。点击ATMEL前面的“+”号,展开该层,点击其中的89S52,然后再点击“确定”按钮,回到主窗口,此时,在工程窗口的文件页中,出现了“Target 1”,前面有“+”号,点击“+”号展开,可以看到下一层的“Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,如图3-2所示,选中其中的“Add file to Group Source Group1”,出现一个对话框,要求寻找源文件。 15 图3-1 选择单片机型号 图3-2 加入文件 双击fgf.c文件,将文件加入项目,注意,在文件加入项目后,该对话框并不消失,等待继续加入其它文件,但初学时常会误认为操作没有成功而再次双击同一文件,这时会出现如图2.4所示的对话框,提示你所选文件已在列表中,此时应点击“确定”,返回前一对话框,然后点击“Close”即可返回主接口,返回后,点击“Source Group 1”前的加 16 号,fgf.c文件已在其中。双击文件名,即打开该源程序。 3.3系统程序流程图 3.3.1 主程序流程图 系统在接通电源后,首先要对系统进行初始化。初始化的过程中包括模式的选择,按键的输入,按键的识别,LCD显示内容初始化,设定系统状态指示等。: 主程序设计流程图如图3-3所示。 图3-3 主程序流程图 3.3.2 键盘按键流程图 按键扫描子程序原理图是这样的。一次完整的击键过程,包含以下5个阶段: 1. 等待阶段:此时按键尚未按下,处于空闲阶段。2.前沿(闭合)抖动阶段:此时按键刚刚按下,但按键信号还处于抖动状态,这个时间一般为5~20ms,这里设置为20ms。为了确保按键操作不会误动作,此时必须有个前沿消抖动延时。3.键稳定阶段:此时抖动已经结束,一个有效的按键动作已经产生。系统应该在此时执行按键功能;或将按键所对应的键值记录下来,待按键释放时再执行。4.后沿(释放)抖动阶段:一般来说,考究一点的程序应该在这里再做一次消抖延时,以防误动作。但是,如果前面“前沿抖动阶段”的消抖延时时间取值合适的话,可以忽略此阶段。5.按键释放阶段:此时后沿抖动已经结束,按键已经处于完全释放状态,如果按键是采用释放后再执行功能,则可以在这个阶段进行按键操作的相关处理。键盘按键流程图如图3-4所示 17 开始N是否有按键Y延时去抖N是否有键闭合Y扫描取得按键值N闭合键是否释放结束 图3-4 键盘按键程序图 3.3.3 LCD显示流程图 本系统显示的模块采用的是LCD1602显示,LCD显示的流程图如图3-5所示。 18 开始初始化字型赋值是否有信息NY调用字型编码完成显示结束 图3-5 LCD显示流程图 3.4 子程序举例 由于设计是分模块化进行,所以子程序是整体软件系统的组成部分,子程序不但可以使程序化整为零,使其复杂简单化,同时也方便阅读,修改等,每个功能模块都有它自己的子程序,在本设计中是用LCD显示数据,所以就要用到显示子程序,设计中用的是矩阵键盘,所以就用到键盘扫描子程序。以下是键盘扫描子程序,LCD显示子程序举例: 3.4.1键盘扫描子程序 #ifndef __KEY4X4_H__ #define __KEY4X4_H__ #define uchar unsigned char // 无符号字符整形 0~ 256 #define uint unsigned int //定义无符号整形0~65536 #include 19 /*********************************************/ uint temp,temp1,temp2,i; uint key_ok,ok,dengdai; void key4x4() { P1=0x0f; //设定P1端口的初始值 //将P1端口的值读取 准备进行判断 //做按键消抖处理,延时20ms //再次读取P1端口值进行比较 temp1=P1; { } if(key_ok==1) { key_ok=0; P1=0xf0; //消除按键识别自锁功能,执行完毕既可,不用重复执行 //将P1端口值取反,设定为0xf0. //按键识别程序 if(temp1!=0x0f) //判断不等于0f,则说明有按键按下。 delay_ms(20); temp1=P1; { } key_ok=1; //启动按键识别程序 if(temp1!=0x0f) //不等于0x0f,说明确实有按键按下 delay_ms(20); //延时20ms temp2=P1; //读取端口值, temp=temp1 | temp2; //将两次读取的端口值进行取位或运算,求出键值 if(temp==0xee) i=0; /*********************************************///查键值表判断i的顺序号 else if(temp==0xde) i=1; else if(temp==0xbe) i=2; else if(temp==0x7e) else if(temp==0xed) else if(temp==0xdd) else if(temp==0x7d) i=3; i=4; i=5; i=7; /*********************************************/ else if(temp==0xbd) i=6; /*********************************************/ 20 } } else if(temp==0xeb) else if(temp==0xdb) else if(temp==0xbb) else if(temp==0x7b) else if(temp==0xe7) else if(temp==0xd7) else if(temp==0xb7) else if(temp==0x77) i=8; i=9; i=10; i=11; i=12; i=13; i=14; i=15; /*********************************************/ /*********************************************/ ok=1; //确认按键已经按下等待判断值标志 P1=0x0f; //恢复设置为初始值 dengdai=1;//查询按键是否松开标志 void deng_dai() //等待释放按键, { } #endif 3.4.2 LCD显示子程序 #ifndef __LCD1602_H__ #define __LCD1602_H__ #include #define uchar unsigned char // 无符号字符整形 0~ 256 #define uint unsigned int //定义无符号整形 0~65536 //********************************************* 21 while(dengdai==1) //将P1端口的值读出判断按键是否松开, { } temp1=P1; if(temp1!=0x0f) else dengdai=1; //按下就继续等待 dengdai=0; //松开就返回 sbit rs=P2^7; sbit rw=P2^6; sbit e=P2^5; //定义控制引脚 //定义控制引脚 //定义控制引脚 /******LCD1602显示内容************************************/ uchar code table1[]=\" The 4X4Key 0~F \"; //显示的代码ASCLL码表 uchar code table2[]=\"0123456789ABCDEF\"; //显示的代码ASCLL码表 uchar code table3[]=\" \"; //显示的代码ASCLL码表 /*********************************************************/ void write_com(uchar com) /*写指令*/ { } void write_data(uchar dat) { } void init_lcd1602() { 22 e=0; rs=0; rw=0; P0=com; delay_ms(1); //500us e=1; delay_ms(1); e=0; /*写数据*/ e=0; rs=1; rw=0; P0=dat; delay_ms(1); //500us e=1; delay_ms(1); e=0; delay_ms(15); write_com(0x38); delay_ms(5); write_com(0x38); delay_ms(5); write_com(0x38); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); } 23 第4章 系统的仿真 4.1 Protues软件介绍 Protues是英国Labcenter公司开发的嵌入式系统仿真软件,组合了高级原理图设计工具ISIS(Intelligent Schematic Input System)、混合模式SPICE仿真、PCB设计以及自动布线而形成了一个完整的电子设计系统。它运行于Windows操作系统上,可以仿真、分析各种模拟和数字电路,并且对PC机的硬件配置要求不高。该软件具有以下主要特点: 实现了单片机仿真与SPICE(Simulation Program with Intigrated Circuit Emphasis)电路仿真相结合,具有模拟电路仿真、数字电路仿真、单片机及其外围电路仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能,提供了大量的元器件,涉及电阻、电容、二极管、三极管、MOS管、变压器、继电器、各种放大器、各种激励源、各种微控制器、各种门电路和各种终端等;同时,也提供了许多虚拟测试仪器,如电流表、电压表、示波器、逻辑分析仪、信号发生器、定时/计数器等。支持主流单片机系统的仿真。如,68000系列、8051系列、AVR系列、PIC系列等。提供软硬件调试功能。同时支持第三方的软件编译和调试环境,如Keil C μVision4等软件。具有强大的原理图编辑及原理图后处理功能Protues VSM 组合了混合模式的SPICE电路仿真、动态器件和微控制器模型,实现了完整的基于微控制器设计的协同仿真,真正使在物理原型出来之前对这类设计的开发和测试成为可能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。Protues电路设计是在Protues ISIS(Intelligent Schematic Input System)集成环境中完成的。 Proteus软件具有其它EDA工具软件(例:multisim)的功能。这些功能是: 1).原理布图。 2).PCB自动或人工布线。 3).SPICE电路仿真。 4).互动的电路仿真用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD, AD/DA,部分SPI器件,部分IIC器件。 5).仿真处理器及其外围电路可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。 还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。 4.2 仿真过程 1).在计算机上打开“ISIS 7 professional”. 2).建立新程序选择菜单[文件|保存文件]或[文件|另存为]功能。 3).建立新的项目,选择菜单[文件|新建项目]功能。新建项目分三步走,首先,加入模 块文件。在加入模块文件的对话框中选择刚才保存的文件,按打开键。如果你是模块项目,可以同时选择多个文件再打开。然后,加入包含文件。在加入包含文件对话框中,选择所要加入的包含文件。如果没有则按取消键。最后,保存项目。在保 24 存项目对话框中输入项目名称,按保存键将项目保存在与你的源文件相同的文件夹下。 4).然后再设置项目。选择菜单栏的编译功能编译项目。在编译过程中如果有错误可以 在信息窗口中显示出来。双击错误信息,可以在源程序中定位所在行。纠正错误后,再次编译只到正确为止。 5).在编译没有错误后,就可以执行、调试程序了。 6).软件仿真的显示图: 图4-1 仿真结果 25 结论与展望 本次设计由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。 这次实训提高了我们的设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固.本次实验熟悉了单片机的使用和功能,了解了DS130经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计的功能,熟悉了Keil uVision4进行程序调试,利用 Proteus7.8进行硬件仿真。 通过此次的课程设计,我不仅加深了对单片机理论的理解,深刻懂得了要不断的时间才能掌握知识,而且还学会了如何去加强锻炼创新精神,从而不断地战胜自己,超越自己。创新,是要我们将理论很好的联系实际,并不断地去开动自己的脑子,从为先到并做到别人没想到没做的事,不断超越别人,超越自己;同时更重要的是,在这一设计过程中,我懂得了坚持不懈,不轻易言弃是做到成功的必要素质。设计过程,也好比我们的成长历程,常有一些不如意的事情发生,这就对我们提出了挑战。只要自己坚持,坚持,在坚持,任何努力都是值得的。 由于所学知识有限,硬件选择和程序编写有一定不合理性,有待改进。 26 致谢 感谢学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。这次完成了毕业设计离不开许多认得帮助,首先我要感谢我的指导老师俞晓峰老师,从本本设计从选题到完成,每一步都是在老师的指导下完成的,倾注了老师大量的心血及努力。另外,本设计的完成也离不开其他同学对我的帮助,包括帮助我安装软件,对我程序编写的指导,是他们让我明白了团队合作的精神,在此,我谨向俞晓峰老师和帮助过我的同学老师们表示最崇高的敬意和衷心的感谢,谢谢你们! 27 作者:程小磊 时间: 参考文献 [1] 彭伟.单片机C语言程序设计实训100例[M].电子工业出版社,2009 [2] 吴运昌.模拟电子线路基础[M].广州:华南理工大学出版社,2004 [3] 阎石.数字电子技术基础[M].北京:高等教育出版社,1997 [4] 刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现[J].微计算机信息,2007(14):35-36 [5] 李建忠.单片机原理及应用[M].西安:西安电子科技大学,2002 [6] 林志奇,郎建军,李会杰.基于Proteus的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社,2006 [7] 李晓静等.液晶显示控制器与单片机的接口及编程[J],电子技术,2004(06):09-11 [8] 张俊谟.单片机中级教程—原理与应用[J].北京:北京航空航天大学出版社,1999:66-77 [9] 胡汉才.单片机原理及其接口技术(第2版)[M].北京:清华大学出版社,2004 [10] 沈红卫. 基于单片机的智能系统设计与实现[M].北京:电子工业出版社,2005.1 [11] 黄继昌.检测专用集成电路及其应用[M].北京: 人民邮电出版社,2006 [12] 张克彦.AVR单片机实用程序设计[M].北京: 北京航空航天大学出版社,2004.2 [13] 周航慈编著.《单片机应用程序设计技术》.[J]北京:北京航空航天大学出版社,2003(03):12-14 [14]康万新.毕业设计指导及案例剖析应用电子技术方向[M].北京:清华大学出版社,2007 [15] Yeager Brent.How to troubleshoot your electronic scale[J].. Powder and Bulk Engineering. 1995 [16]Meehan Joanne,Muir Lindsey.SCM in Merseyside SMEs:Benefits and barriers[J].. TQM Journal. 2008 28 附录A 总电路原理图 29 附录B 外文文献及其译文 Single chip brief introduction The monolithic integrated circuit said that the monolithic micro controller, it is not completes some logical function the chip, but integrates a computer system to a chip on. Summary speaking: A chip has become a computer. Its volume is small, the quality is light, the price cheap, for the study, the application and the development has provided the convenient condition. At the same time, the study use monolithic integrated circuit is understands the computer principle and the structure best choice. The monolithic integrated circuit interior also uses with the computer function similar module, for instance CPU, memory, parallel main line, but also has with the hard disk behave identically the memory component, what is different is its these part performance is opposite our home-use computer weak many, but the price is also low, generally does not surpass 10 Yuan the Made some control electric appliance one kind with it is not the very complex work foot. We use now the completely automatic drum washer, the platoon petti-coat pipe, VCD and so on inside the electrical appliances may see its form! It is mainly takes the control section the core part. It is one kind of online -like real-time control computer, online -like is the scene control, needs to have the strong antijamming ability, the low cost, this is also and the off-line type computer (for instance home use PC) main difference. The monolithic integrated circuit is depending on the procedure, and may revise. Realizes the different function through the different procedure, particularly special unique some functions, this is other component needs to take the very big effort to be able to achieve, some are the flowered big strength is also very difficult to achieve. One is not the very complex function, if develops in the 50s with the US 74 series, or the 60s's CD4000 series these pure hardware do decides, the electric circuit certainly are a big PCB board! But if, if succeeded in the 70s with the US puts in the market the series monolithic integrated circuit, the result will have the huge difference! Because only the monolithic integrated circuit compiles through you the procedure may realize the high intelligence, high efficiency, as well as redundant reliability! Because the monolithic integrated circuit to the cost is sensitive, therefore present occupies the dominant status the software is the most preliminary assembly language, it was except the binary machine code 30 above the most preliminary language, since why were such preliminary must use? Why high-level did the language already achieve the visualization programming level not to use? The reason is very simple, is the monolithic integrated circuit does not have home computer such CPU, also has not looked like the hard disk such mass memory equipment. Inside even if a visualization higher order language compilation script only then a button, also will achieve several dozens K the sizes! Does not speak anything regarding the home use PC hard disk, but says regarding the monolithic integrated circuit cannot accept. The monolithic integrated circuit in the hardware source aspect's use factor must very Gao Caixing, therefore assembly, although primitive actually massively is using. Same truth, if attains supercomputer's on operating system and the application software home use PC to come up the movement, home use PC could also not withstand. It can be said that the 20th century surmounted three “the electricity” the time, namely the electrical time, the Electronic Age and already entered computer time. However, this kind of computer, usually refers to the personal computer, is called PC machine. It by the main engine, the keyboard, the monitor and so on is composed. Also has a kind of computer, most people actually not how familiar. This kind of computer is entrusts with the intelligence each kind of mechanical monolithic integrated circuit (also to call micro controller). , This kind of computer's smallest system only has used as the name suggests a piece of integrated circuit, then carries on the simple operation and the control. Because its volume is small, usually hides in is accused the machinery “the belly”. It in the entire installment, plays is having like the human brains role, it went wrong, the entire installment paralyzed. Now, this kind of monolithic integrated circuit's use domain already very widespread, like the intelligent measuring appliance, the solid work paid by time control, the communication equipment, the guidance system, the domestic electric appliances and so on. Once each product used the monolithic integrated circuit, could get up causes the effect which the product turned to a new generation, often before product range crown by adjective - - “intelligence”, like intelligence washer and so on. Now some factory's technical personnel or other extra-curricular electronic exploiter do certain products, are not the electric circuit are too complex, is the function is too simple, and is imitated extremely easily. Investigates its reason, possibly on card, in the product has not used on the monolithic integrated circuit or other programmable logical component. 31 附录C 中文文献译文 单片机简介单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可,用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!......它主要是作为控制部分的核心部件。它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。单片机是靠程序的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很大力气才能做到的,有些则是花大力气也很难做到的。一个不是很复杂的功能要是用美国50年代开发的74系列,或者60年代的CD4000系列这些纯硬件来搞定的话,电路一定是一块大PCB板!但是如果要是用美国70年代成功投放市场的系列单片机,结果就会有天壤之别!只因为单片机的通过你编写的程序可以实现高智能,高效率,以及高可靠性!由于单片机对成本是敏感的,所以目前占统治地位的软件还是最低级汇编语言,它是除了二进制机器码以上最低级的语言了,既然这么低级为什么还要用呢?很多高级的语言已经达到了可视化编程的水平为什么不用呢?原因很简单,就是单片机没有家用计算机那样的CPU,也没有像硬盘那样的海量存储设备。一个可视化高级语言编写的小程序里面即使只有一个按钮,也会达到几十K的尺寸!对于家用PC的硬盘来讲没什么,可是对于单片机来讲是不能接受的。单片机在硬件资源方面的利用率必须很高才行,所以汇编虽然原始却还是在大量使用。一样的道理,如果把巨型计算机上的操作系统和应用软件拿到家用PC上来运行,家用PC的也是承受不了的。可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋。予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机 32 的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。 附录D 程序代码 主程序: *********************************************/ //**************头文件****定义变量型 ******************* #include #include \"lcd1602.h\" //lcd1602液晶显示器显示头文件 #include \"key4x4.h\" //键盘头文件_ /********************************************* uchar等价于unsigned char,无符号字符整数,占用一个字节8位,等于51单片机字长,因此处理最快。 uint等价于unsigned int,无符号整数,占用两个字节16位,处理稍慢。 *********************************************/ uint bitt,j; void main( ) { init_lcd1602(); write_com(0x80); for(j=0;j<16;j++) { write_data(table1[j]); delay_us(10); } while(1) { key4x4(); if(ok==1) { ok=0;//清楚按键查询标志 write_com(0xc0+bitt); //显示在第一行, bitt是第几位 33 write_data(table2[i]);//显示按键编码所对应的的表值 /* bitt++; //位加1,跳到下一位显示 if(bitt==16) //判断第一行是否显示完,如等于16,即显示完, { bitt=0; //返回到第一列开始显示 write_com(0xc0); //同时清楚第二行显示,清屏时bitt要修改判断为是否等于17 for(j=0;j<16;j++) { write_data(table3[j]); delay_us(10); } } */ deng_dai(); //判断按键是否松开,如没松开继续等待释放 } } } 矩阵键盘程序: #ifndef __KEY4X4_H__ #define __KEY4X4_H__ #define uchar unsigned char // 无符号字符整形 0~ 256 #define uint unsigned int //定义无符号整形0~65536 #include /*********************************************/ uint temp,temp1,temp2,i; uint key_ok,ok,dengdai; void key4x4() { P1=0x0f; //设定P1端口的初始值 temp1=P1; //将P1端口的值读取 准备进行判断 if(temp1!=0x0f) //判断不等于0f,则说明有按键按下。 { //做按键消抖处理,延时20ms delay_ms(20); temp1=P1; //再次读取P1端口值进行比较 if(temp1!=0x0f) //不等于0x0f,说明确实有按键按下 { key_ok=1; //启动按键识别程序 } } 34 if(key_ok==1) //按键识别程序 { key_ok=0; //消除按键识别自锁功能,执行完毕既可,不用重复执行 P1=0xf0; //将P1端口值取反,设定为0xf0. delay_ms(20); //延时20ms temp2=P1; //读取端口值, temp=temp1 | temp2; //将两次读取的端口值进行取位或运算,求出键值 /*********************************************///查键值表判断i的顺序号 if(temp==0xee) i=0; else if(temp==0xde) i=1; else if(temp==0xbe) i=2; else if(temp==0x7e) i=3; /*********************************************/ else if(temp==0xed) i=4; else if(temp==0xdd) i=5; else if(temp==0xbd) i=6; else if(temp==0x7d) i=7; /*********************************************/ else if(temp==0xeb) i=8; else if(temp==0xdb) i=9; else if(temp==0xbb) i=10; else if(temp==0x7b) i=11; /*********************************************/ else if(temp==0xe7) i=12; else if(temp==0xd7) i=13; else if(temp==0xb7) i=14; else if(temp==0x77) i=15; /*********************************************/ ok=1; //确认按键已经按下等待判断值标志 P1=0x0f; //恢复设置为初始值 dengdai=1;//查询按键是否松开标志 } } void deng_dai() //等待释放按键, { while(dengdai==1) //将P1端口的值读出判断按键是否松开, { temp1=P1; if(temp1!=0x0f) dengdai=1; //按下就继续等待 else dengdai=0; //松开就返回 } } #endif 35 LCD显示程序: #ifndef __LCD1602_H__ #define __LCD1602_H__ #include #define uchar unsigned char // 无符号字符整形 0~ 256 #define uint unsigned int //定义无符号整形 0~65536 //********************************************* sbit rs=P2^7; //定义控制引脚 sbit rw=P2^6; //定义控制引脚 sbit e=P2^5; //定义控制引脚 /******LCD1602显示内容************************************/ uchar code table1[]=\" The 4X4Key 0~F \"; //显示的代码ASCLL码表 uchar code table2[]=\"0123456789ABCDEF\"; //显示的代码ASCLL码表 uchar code table3[]=\" \"; //显示的代码ASCLL码表 /*********************************************************/ void write_com(uchar com) /*写指令*/ { e=0; rs=0; rw=0; P0=com; delay_ms(1); //500us e=1; delay_ms(1); e=0; } void write_data(uchar dat) /*写数据*/ { e=0; rs=1; rw=0; P0=dat; delay_ms(1); //500us e=1; delay_ms(1); e=0; } void init_lcd1602() { delay_ms(15); write_com(0x38); delay_ms(5); write_com(0x38); delay_ms(5); write_com(0x38); 36 write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); } /***********使用主函数案例****************************** uchar code table1[]=\" www.huildz.com \"; uchar code table2[]=\"LCD1602 test ok!\"; void main() { uchar j; init_lcd1602(); write_com(0x80); for(j=0;j<16;j++) { write_data(table1[j]); delay_us(10); } write_com(0xc0); for(j=0;j<16;j++) { write_data(table2[j]); delay_us(10); } while(1); } ***************************************************/ #end if 延时程序: #ifndef __DELAY_H__ //延时程序,直接调用即可 #define __DELAY_H__ #define uchar unsigned char // 无符号字符整形 0~ 256 #define uint unsigned int //定义无符号整形 0~65536 #include /********************************************* 功能:延时函数 延时时间:在12MHz晶振下延时约 1ms *********************************************/ void delay_ms(uint ms) { uint x,y; for(x=ms;x>0;x--) 37 for(y=110;y>0;y--); } /********************************************* 功能:延时函数 延时时间:在12MHz晶振下延时约 1us *********************************************/ void delay_us(uint us) { uint x; for(x=us;x>0;x--) { _nop_(); } }#endif 附录E 元器件清单 1)单片机 2)晶振 3)电容 4)按键 5)排阻 6)电阻 7)LCD数码显示管 AT89C52 12MHZ 22pf /10uf BUTTON RESPACK-8/5.1K 220 LM016L 1个; 1个 2个/ 1个; 17个; 1个; 2个; 1个; 38 附录F 参考文献题录及摘要 [1] 彭伟.单片机C语言程序设计实训100例[M].电子工业出版社,2009 摘要:本书以简明的语言比较系统地阐述了Intel公司MCS-51单片机的基本结构、原理、指令系统、软件、接口和应用系统设计等知识,并对ATMEL公司生产的89系列及MCS-96系列单片机作了简要介绍。本书深入浅出,层次分明;实例丰富,通俗易懂;突出实用,可操作性强,特别适合高职高专计算机专业类、电子类和电气自动化及机械专业的学生使用,也可以作为高等学校相应专业的教材,还可作为单片机原理及应用的培训班教材。同时亦可供从事微机应用、智能仪器仪表领域的工程技术人员阅读和参考。 [2] 吴运昌.模拟电子线路基础[M].广州:华南理工大学出版社,2004 摘要:本书以单片机及外围器件、相关电路设计的实际应用为内容,以“实例导航”的方式向读者介绍如何合理选择单片机硬件、程序和外围器件应用实施到实际项目开发中。本书所选实例基本覆盖了单片机的主要应用技术。 [3] 李建忠.单片机原理及应用[M].西安:西安电子科技大学,2002 摘要:本书系统地论述了MCS-51单片机的组成原理、指令系统和汇编语言程序设计、中断系统和接口技术等问题,并在此基础上讨论了单片机应用系统的设计,书继承和发扬了第1版的风格和特色,并增加了MCS-51对LCD的接口、MCS-51的多机通信以及单片机硬件和软件的抗干扰设计等新内容。 [4] 沈红卫. 基于单片机的智能系统设计与实现[M].北京:电子工业出版社,2005.1 摘要:所有系统均以51系列单片机为基础,主要涉及ATMEL 89系列和Philips 89LPC两个主流系列。介绍的实例,从单片机结构来说,既有单CPU系统,又有双CPU系统;从通信总线来说,既有RS-232串行总线,又有CAN现场总线;从开发语言来说,所有系统均以ASM 51和C51两种语言分别实现,并提供了完整的源程序。 [5黄继昌.检测专用集成电路及其应用[M].北京: 人民邮电出版社,2006 摘要:主要内容包括集成传感器、电压检测专用集成电路、电流检测专用集成电路、集成运算放大器、仪表专用集成电路及数字测量专用集成电路等。对于每种类型的集成电路,在介绍其特性、工作参数、引脚功能的基础上,着重介绍其应用问题,并给出了具体应用电路。 39 [6]张克彦.AVR单片机实用程序设计[M].北京: 北京航空航天大学出版社,2004.2 摘要:本书在介绍AVR单片机系统结构﹑运行原理和指令系统的基础上,给出众多实用程序的设计和使用方法并提供详细程序清单。它们有的结合AVR单片机的先进性和特点,如脉宽调制(PWM)输出,看门狗定时器,休眠模式(低功耗)的应用,片内A/D转换器(8535)的使用,异、同步串口通信,软件DAA等;有的属于对传统程序的优化,如对简易键盘LED显示管理,精确定时及对重装时间常数的修正,模拟半双工口,断电保护,带循环冗余检测(CRC)的异步串口通信,多机通信,定点、浮点运算以及并、串行时钟日历芯片和串行测温器件应用等。主要程序都附有流程图,所有程序都列出清单并带详细注释 [7]耿德根.AVR嵌入式单片机原理与应用[M].北京: 北京航空航天大学出版社,2002.10 摘要:本书详细介绍了ATMEL公司开发的AVR高速嵌入式单片机的结构;讲述AVR单片机的开发工具,包括AVR Studio调试工具,单片机汇编器和AVR单片机串行下载实验;学习指令系统时,每条指令均有实例,边学习边调试,使学者者看得见指令流向及操作结果,真正理解每条指令的功能及使用注意事项;介绍AT90S系列多种单片机功能特点,实用程序设计及应用实例;作为提高篇,讲述简单易学,适用AVR单片机的高级语言BASCOM-AVR及IAR C编译器。 [8]林志奇,郎建军,李会杰.基于Proteus的单片机可视化软硬件仿真[M].北京:北京航空航天大学出版社,2006 摘要:本书介绍如何运用Proteus来进行实际开发,分别从现实生活中常用的发光二极管显示屏、数字电压表、八音盒、多机通信系统、电子书、AVR单片机日历系统、国际象棋系统等实例中向读者阐述单片机开发过程。 [9] 李晓静等.液晶显示控制器与单片机的接口及编程[J],电子技术,2004(06):09-11 摘要:本书在介绍AVR单片机系统结构﹑运行原理和指令系统的基础上,给出众多实用程序的设计和使用方法并提供详细程序清单。 [10]康万新.毕业设计指导及案例剖析应用电子技术方向[M].北京:清华大学出版社,2007 摘要:本书分为两篇,共10章。第一篇为毕业设计导论,包含第1、2章,第1章详细介绍了毕业设计的完整教学流程,指导学生怎样逐步实施毕业设计的各个环节,同时给出相关设计文档样式和管理、评价规范。第2章介绍应用电子技术专业系统设计的思路,从硬件设计角度给出常用的电路硬件设计过程、调试的步骤和技巧,从软件设计角度给出常用的EDA设计软件的使用方法。第二篇为毕业设计案例,包含第3~10章,通过多个典型设计案例分析,详细传授设计的思路、方法、步骤和技巧。 40 因篇幅问题不能全部显示,请点此查看更多更全内容