资源描述
毕业设计(论文)
题 目: 基于单片机频率计的设计
姓 名: 胡婷
学 号: 201102322
院 系: 信息工程系
班 级: 通信111
指导教师: 廖老师
时 间: 2013-8-20
基于单片机频率计的设计
摘要:
在设计单片机和数字电路时经常需要测量脉冲个数、脉冲宽度、脉冲周期、脉冲频率等参数,虽然使用逻辑分析仪可以很好地测量这些参数,但其价格昂贵。且实现测量的数字化、自动化、智能化已成为各类仪器仪表设计的方向,这里介绍一种用单片机AT89C51控制的、全自动、数字显示的测量频率的方法。
频率计是我们在电子电路试验中经常会用到的测量仪器之一,它能将频率用数码管或液晶显示器直接显示出来,给测试带来很大的方便,使结果更加直接;且频率计还能对其它多种物理量进行测量,如机械振动的频率、声音的频率等,都可以先转变成电信号,然后用频率计来测量,研究频率计的设计与制作将会对我们的生活有很大意义。现代的频率计多是用数码管显示的,其结果不明确,表示也不直接,研究液晶显示的频率计对频率计的发展很有意义。
数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。 因此,数字频率计是一种应用很广泛的仪器。它的基本功能是测量正弦信号、方波信号、尖脉冲信号及其他各种单位时间内变化的物理量。 它被广泛应用于航天、电子、测控等领域。
数字式频率计是基于时间或频率的A/D转换原理,并依赖于数字电路技术发展起来的一种新型的数字测量仪器。由于数字电路的飞速发展,数字频率计的发展也很快。在电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功能,从而提高了系统的可靠性和速度。
纵观现在的数字频率计,其基本原理都是相同的,频率是单位时间(1S)内信号发生周期变化的次数。如果我们能在给定的 1S 时间内对信号波形计数,并将计数结果显示出来,就能读取被测信号的频率。数字频率计首先必须获得相对稳定与准确的时间,同时将被测信号转换成幅度与波形均能被数字电路识别的脉冲信号,然后通过计数器计算这一段时间间隔内的脉冲个数,将其换算后显示出来。这就是数字频率计的基本原理。但现在的频率计其显示部分都是通过LED数码管显示的,显示内容是BCD码,不直观,若用LCD液晶来显示,会使输出结果更直接,便于观察。正因为如此,所以未来数字频率计的发展必定会向用液晶显示的方向发展。
关键词:单片机AT89C51,频率计,液晶显示
目 录
第一章:绪 论 4
1.1 概述 4
1.2 发展现状 4
1.3 单片机的发展 5
第二章:方案论证与选择 5
2.1 方案一 基于VHDL语言的频率计的设计 6
2.2 方案二 基于单片机的频率计的设计 7
2.3 方案的选择 8
第三章:基于单片机频率计的设计 9
3.1系统硬件电路的设计 9
基于单片机频率计的原理框图 9
3.1.1 单片机的管脚 9
3.1.2 单片机的外围电路 11
3.1.3 液晶显示模块1602 12
3.1.4 硬件电路原理图 13
3.2 系统软件的设计 14
3.2.1 定时器/计数器工作方式的设置 14
3.2.2 定时器/计数器开启/关闭的设置 15
3.2.3 中断的设置 15
3.2.4 液晶显示模块1602内部的控制指令 17
3.3 系统软件设计中的主要流程图 18
3.4 系统软件设计中的主要子程序 21
3.4.1 T1计数器中断服务子程序 21
3.4.2 T0定时器中断服务子程序 21
3.4.3 数据处理子程序 22
3.5程序的编译、仿真 23
3.5.1在Keil环境下的程序编写 23
3.5.2在PROTEUS环境下的仿真结果 26
3.6电路的调试 27
致谢 30
参考文献 31
附录A 33
源程序: 33
附录B 42
元器件清单: 42
第一章:绪 论
1.1 概述
在电子系统非常广泛的应用领域内,到处可见到处理离散信息的数字电路。数字电路制造工业的进步,使得系统设计人员能在更小的空间内实现更多的功能,从而提高了系统的可靠性和速度。集成电路的类型很多,从大的方面可以分为模拟电路和数字集成电路两大类。数字集成电路广泛用于计算机、控制与测量系统,以及其它电子设备中。一般说来,数字系统中运行的电信号,其大小往往并不改变,但在实践分布上却有着严格的要求,这是数字电路的一个特点。数字集成电路作为电子技术最重要的基础产品之一,已广泛地深入到各个应用领域。测量频率是电子测量技术中最常见的测量之一,不少物理量的测量, 如时间、速度等都涉及到或本身可转化为频率的测量。数字频率计是用数字显示被测信号频率的仪器,被测信号可以是正弦波、方波或其它周期性变化的信号,如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。 因此,数字频率计是一种应用很广泛的仪器。
1.2 发展现状
数字频率计发展到现在,有基于CPLD的数字频率计的设计,基于VHDL语言的数字频率计的设计,还有基于单片机的简易数字频率计等。CPLD是一种新兴的高密度大规模可编程逻辑器件,它具有门阵列的高密度和PLD器件的灵活性和易用性,目前已成为一类主要的可编程器件;可编程器件的最大特点是可通过软件编程对其器件的结构和工作方式进行重构,能随时进行设计调整而满足产品升级,使得硬件的设计可以如软件设计一样方便快捷,从而改变了传统数字系统及用单片机构成的数字系统的设计方法、设计过程及设计概念,使电子设计的技术操作和系统构成在整体上发生了质的飞跃。VHDL(Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE(The Institute of Electrical and Electronics Engineers)的一种工业标准硬件描述语言;相比传统的电路系统的设计方法,VHDL具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down)和基于库(Library Based)的设计的特点。单片机技术在短短的20余年间已发展成为计算机技术中一个非常有活力的分支,它有自己的技术特征、规范、发展道路和应用环境。
1.3 单片机的发展
目前计算机硬件技术向巨型化、微型化和单片化三个方向发展。自1975年美国德克萨斯仪器公司第一块单片机芯片TMS-1000问世以来,在短短的30余年间,单片机技术已发展成为计算机技术中一个非常有活力的分支,它有自己的技术特征、规范、发展道路和应用环境。按单片机的生产技术和应用对象,单片机先后经历了4位机、8位机、16位机、32位机几个有代表性的发展阶段。
单片机与通用微机相比较,在结构、指令设置上均有其独特之处,其主要特点有:
1) 单片机的存储器ROM和RAM是严格区分的,ROM称为程序存储器,只存放固定常数及数据。RAM则为数据存储器,用于工作区及存放用户数据。
2) 采用面向控制的指令系统。
3) 单片机的输入/输出引脚通常是多功能的。
4) 单片机的外部扩展能力强。
从80年代单片机被引入我国,单片机已广泛地应用于电子设计中。单片机的应用迅速发展,其性价比高,大量的外围接口电路,使基于单片机的电子系统设计方便,周期缩短,而且不断发展。新型单片机支持高级语言,进一步延伸了其发展空间。
第二章:方案论证与选择
2.1 方案一 基于VHDL语言的频率计的设计
设计的基于VHDL语言频率计的系统原理框图系统原理框图如图2.1所示。
小 数 点
闸门信号
待测信号
启 停 信 号
译码显示电路
计 数 器
开 关 控 制
标 准 信 号 发 生 器
时钟
量程选择
锁 存 器
使能
1K输出使能
锁存信号
计数控制器
分 频 器
分频器
闸门信号
100Hz或10Hz
图2.1 设计的基于VHDL语言频率计的系统原理框图
各模块说明如下:
(1) 标准信号发生器, 开关控制电路。标准信号发生器产生1kHz 基准信号。开关控制
电路对键盘输入的启停信号进行处理
(2)分频器
当收到使能信号, 分频器启动, 将标准1kHz 信号经3次10分频, 得到100Hz, 10Hz, 1Hz 信号。1kHz, 100Hz, 10Hz 信号作为计数器闸门信号来控制计数, 以实现不同量程。
(3) 计数控制器
计数控制模块将输入的分频信号处理, 产生计数闸门信号、计数清零信号和锁存信号。
(4) 计数器
采用3个十进制计数器级联作为计数模块。闸门信号与待测信号相与作为计数输入。计数结果直接输出给锁存器。
(5)锁存器
每当锁存使能信号来临, 锁存器便将锁存结果读入、锁存。锁存器还完成量程选择功能。锁存器还根据当前量程, 选择合适的小数点位置输出。
(6)译码显示电路
由于小数点由锁存器输出, 故在此仅考虑数码管的7段驱动,7段译码器将计数值译成相应的7 段数码驱动值。
2.2 方案二 基于单片机的频率计的设计
设计的基于单片机频率计的原理框图如图2.2所示。
液 晶 显 示 模 块 1602
AT89C51 单 片 机
复位电路
时钟电路
被测信号
图2.2 设计的基于单片机频率计的原理框图
复位电路采用上电复位方式,每次单片机上电工作时使单片机处于复位状态,即初始状态,为测量频率作好准备。
时钟电路中片内高增益反相放大器通过XTAL1、XTAL2外接作为反馈元件的晶振(呈感性)与电容组成的并联谐振回路构成一个自激振荡器向内部时钟电路提供振荡时钟,由此向单片机提供振荡脉冲。
AT89C51单片机内部具有2个16位的定时器/计数器,并可以在定时或计数溢出时产生中断。将被测信号通过P3.5口送入单片机,将T0设置为定时方式,每50ms产生一次中断,产生20次中断所用时间正好为1S,将T1设置为计数方式,T1的初值设置为0,计65535个脉冲后产生一次溢出中断,在T1中断溢出时对溢出次数进行计数(计数值为N)。1S内T1计的总的脉冲数为65535×N+TH1×256+TL1,这个数值就是被测信号的频率值。
单片机计的脉冲数值经过转换送到液晶显示模块1602,从而显示被测信号的频率,测量结果用十进制表示,很直接。
2.3 方案的选择
基于VHDL语言的频率计设计的优点:VHDL语言,对设计的描述具有相对独立性, 设计者可以不懂硬件结构, 降低了硬件电路设计难度。利用EDA工具maxplus II 对源程序进行编译、选配、优化、逻辑综合, 自动地把VHDL描述转变成门级电路, 进而完成电路分析、纠错、验证、自动布局布线、仿真等各种测试工作。最后通过编程电缆下载数据流, 将所设计内容下载到所选中的FPGA器件中, 即完成设计工作。这种设计方法减少了电路设计的时间和可能发生的错误, 降低了开发成本。
基于VHDL语言的频率计设计的缺点:FPGA大部分是基于SRAM编程,编程数据信息在系统断电时会丢失,每次上电时需从器件的外部存储器或计算机中将编程数据写入,布线结构和逻辑实现复杂,其编程信息需存放在外部存储器上,需外部存储器芯片,且使用方法复杂,保密性差。
基于单片机的频率计的设计的优点:单片机在控制领域中有很多优点,如体积小、成本低、运用灵活、抗干扰能力强,可以方便地实现多机和分布式控制。并且利用单片机设计的频率计原理框图简单,所用元器件少,电路不易出错,其程序存放在内部存储器上,不需要外部存储器芯片,使用方法简单。且单片机便宜、稳定、开发简单、通用性好。
基于单片机的频率计的设计的缺点:所测信号的频率范围窄,若要扩大频率范围需外加分频器。
综合比较上述两种方案,选择用单片机来设计频率计,显示部分用液晶显示模块,以使测量结果更加直接、明确。
第三章:基于单片机频率计的设计
3.1系统硬件电路的设计
基于单片机频率计的原理框图
液 晶 显 示 模 块 1602
AT89C51 单 片 机
复位电路
时钟电路
被测信号
图3 基于单片机频率计的原理框图
3.1.1 单片机的管脚
AT89C51单片机的管脚排部如图3.1所示。
图3.1 AT89C51单片机的管脚排布
主电源引脚
VCC(40脚):接+5V电源正端。
VSS(20脚):接+5V电源地端。
1、
外接晶体引脚
XTAL1(19脚):接外部石英晶体的一端。在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
XTAL2(18脚):接外部石英晶体的另一端。在单片机内部,它是片内振荡器的反相放大器的输出端。
输入/输出引脚
P0口(39~32脚):P0.0~P0.7统称为P0口,在不接片外存储器与不扩展I/O口时,可作为准双向输入/输出口。
P1口(1~8脚):P1.0~P1.7统称为P1口,可作为准双向输入/输出口使用。
P2口(21~28脚):P2.0~P2.7统称为P2口,一般可作为准双向输入/输出口使用;在接有片外存储器或扩展I/O口且寻址范围超过256字节时,P2口用作高8位地址总线。
P3口(10~17脚):P3.0~P3.7统称为P3口,除作为准双向输入/输出口使用,还可以将每一位用于第二功能。
控制线
ALE/ (30脚):地址锁存有效信号输出端。
(29脚):片外程序存储器读选通信号输出端,低电平有效。
RST/VPD(9脚):RST即为RESET,VPD为备用电源。该引脚为单片机的上电复位或掉电保护端。
/VPP(31脚):EA为片外存储器选用端。该引脚有效(低电平)时,只选用片外程序存储器,否则单片机上电或复位后选用片内程序存储器。
3.1.2 单片机的外围电路
1)时钟电路
单片机的定时控制功能是用片内的时钟电路和定时电路来完成的,而片内的时钟产生有两种方式:内部时钟方式和外部时钟方式,实际中常应用内部时钟方式。设计的内部时钟方式图如图3.2所示。XTAL1
单 片 机
C1
C2
30PF
30PF
XTAL2
图3.2 设计的内部时钟方式图
电容在22PF~33PF之间选择,起微调作用,在此采用30PF。晶振可采用6MHz或12MHz,但是若用6MHz的晶振,所测频率范围太窄,最高只能测到250KHz,用12MHz的晶振,最高频率可测到500KHz,故在此选用12MHz的晶振。
2)复位电路
单 片 机
单片机的复位电路可采用上电复位或按扭复位,实际中常应用上电复位的方式,设计的上电复位方式图
如图3.3所示。
10μF
RST
10K
图3.3 上电复位方式图
3.1.3 液晶显示模块1602
液晶显示器(LCD)具有显示信息丰富、功耗低、体积小、重量轻、超薄等许多其他显示器无法比拟的优点,近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。LCD型显示器的构成原理很简单,在两片透明绝缘的有机薄膜或者玻璃之间均匀充填着液晶流体,底层透明薄膜上镀有一层导电体,而顶层透明薄膜上则按需要的形状敷有透明的导电电极,当电极通电后,就与下层导电体之间(约10μm)形成一个电场,由于这个电场的作用,其间的液晶体的透光状况就发生了变化,从而对外来光线产生了吸收作用,使人们看见了与电极形状相同的字形显示。
1602采用标准的16脚接口,从该模块的正面看,引脚排列从左向右为:1-16脚,1602的管脚排部如图3.4所示。
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
图3.4 1602的管脚排部
其中:
第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15~16脚:空脚。
3.1.4 硬件电路原理图
设计的系统硬件电路原理图如图3.5所示。
+5V
P2.0
P2.1
P2.2
RST
P0.0
P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
P0.7
P3.5
XTAL1 XTAL2
+5V
VCC
RS
RW VDD
E
D0
D1 VL
D2
D3
D4
D5
D6 VSS
D7
液 晶 显 示 模 块 1602
AT89S51 单 片 机
VSS
被测信号
图3.5 系统硬件电路原理图
硬件电路图中,单片机的管脚必须接高电平,因为接低电平时只选用片外程序存储器,而试验所用的是片内程序存储器。液晶显示器1602的VL管脚必须接一个电位器来调节,因为VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,对比度过弱时,看不到屏幕上显示的数据。
硬件电路中所选用的元器件的规格/型号见附录B。
3.2 系统软件的设计
3.2.1 定时器/计数器工作方式的设置
定时器/计数器T0、T1都有四种工作方式,可通过程序对TMOD设置选择。TMOD的低四位用于定时器/计数器0,高四位用于定时器/计数器1。TMOD的位定义如图1.1所示。
D5
D2
D1
D0
D7
D6
D4
D3
GATE
M1
M0
GATE
C/
M1
M0
C/
图3.6 TMOD的位定义
C/T:定时或计数功能选择位,当C/T=1时为计数方式;当C/T=0时为定时方式。
M1、M0:定时器/计数器工作方式选择位。
GATE:门控位,用于控制定时器/计数器的启动是否受外部中断请求信号的影响。一般情况下GATE=0。
当M1M0=00时,定时器/计数器设定为工作方式0,构成13位定时器/计数器。计数值由下式确定:N=8192-X,式中N为计数值,X是THX、TLX的初值。计数范围为1~8192。
定时时间由下式确定:T=N ×Tcy =(8192-X)Tcy,式中Tcy为单片机的机器周期。如果振荡频率为12MHZ,则Tcy=1us,定时范围为1~8192us。
当M1M0=01时,定时器/计数器设定为工作方式1,构成16位定时器/计数器。在方式1时,计数器的计数值由下式确定:N=65536-X,计数范围为1~65536。
定时器的定时时间由下式确定:T=N × Tcy =(65536-X)Tcy,如果振荡频率为12MHZ,则Tcy=1us,定时范围为1~65536 us。
当M1M0=10时,定时器/计数器设定为工作方式2。方式2是自动重装初值的8位定时器/计数器。在方式2时,计数器的计数值由下式确定:N=256-X,计数范围为1~256。
定时器的定时时间由下式确定:T=N × Tcy =(256-X)Tcy,如果振荡频率为12MHZ,则Tcy=1us,定时范围为1~256 us.
当M1M0=11时,定时器/计数器设定为工作方式3。方式3只适用于定时器/计数器T0。当T0工作在方式3时,TH0和TL0被分成两个独立的8位计数器。方式3下定时器/计数器的定时、计数的范围和定时、计数值的确定同方式2。
在试验中需将T0设置为定时方式,将T1设置为计数方式;定时器T0定时50ms,即50000us,需选用工作方式1,即M1M0=01,因此,在编制程序时,将TMOD的高四位设为0101,低四位设为0001。
3.2.2 定时器/计数器开启/关闭的设置
定时器/计数器的开启和关闭可通过控制寄存器TCON来设置, TCON的位定义如图3.7所示。
D0
D1
D2
D3
D4
D5
D6
D7
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
图3.7 TCON的位定义
TF0(TF1):T0(T1)定时器/计数器溢出中断标志位。当T0(T1)计数溢出时,由硬件置位,并在允许中断的情况下,向CPU发出中断请求信号,CPU响应中断转向中断服务程序时,由硬件自动将该位清零。
TR0(TR1):T0(T1)运行控制位。当TR0(TR1)=1时启动T0(T1);TR0(TR1)=0时关闭T0(T1)。该位由软件进行设置。
TCON的低四位与外部中断有关。
编写程序时,若需启动T0(T1),通过指令SETB TR0 或SETB TR1将TR0(TR1)设为1,需关闭T0(T1),通过指令CLR TR0 或CLR TR1将TR0(TR1)设为0。
3.2.3 中断的设置
所谓中断是指CPU对系统中或系统外发生的某个事件的一种响应过程,即CPU暂时停止现行程序的执行,而自动转去执行预先安排好的处理该事件的服务子程序。当处理结束后,再返回到被暂停程序的断点处,继续执行原来的程序。实现这种中断功能的硬件系统和软件系统统称为中断系统。
试验中涉及到的T0或T1的中断,中断的控制可通过中断允许寄存器IE来设置。IE的位定义如图3.8所示。
D3
D5
D6
D0
D1
D2
D4
D7
EA
—
ET2
ES
ETI
EX1
ET0
EX0
图3.8 IE的位定义
EA:中断允许总控位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。EA的作用是使中断允许形成两级控制。即各中断源首先受EA位的控制;其次还要受各中断源自己的中断允许总控位控制。
ET2:定时器/计数器T2的溢出中断允许位,只用于52子系列。
ES: 串行口中断允许位。ES=0,禁止串行口中断;ES=1允许串行口中断。
ET1:定时器/计数器T1的溢出中断允许位。ET1=0,禁止T1中断;ET1=1,允许T1中断。
EX1:外部中断1的中断允许位。EX1=0,禁止外部中断1中断;EX1=1,允许外部中断1中断。
ET0:定时器/计数器T0的溢出中断允许位。ET0=0,禁止T0中断;ET0=1,允许T0中断。
EX0:外部中断0的中断允许位。EX0=0,禁止外部中断0中断;ET0=1,允许外部中断0中断。
试验中需开中断允许总控位,需允许定时器T0和T1中断,因此在编程时使EA=1,使ET0=1且ET1=1。
中断源有多种, 每个中断源的优先级可通过中断优先级寄存器IP进行设置并管理。IP的位定义如图3.9所示。
D0
D1
D2
D3
D4
D5
D6
D7
—
PT2
PS
PT1
PX1
PT0
PX0
图3.9 IP的位定义
PT2: 定时器/计数器T2的中断优先级控制位。
PS: 串行口的中断优先级控制位。
PT1:定时器/计数器T1的中断优先级控制位。
PX1:外部中断INT1的中断优先级控制位。
PT0:定时器/计数器T0的中断优先级控制位
PX0:外部中断INT0的中断优先级控制位。
试验中为提高测量结果的准确度,需要将T1的中断设置为优先,通过指令SETB PT1来实现。
3.2.4 液晶显示模块1602内部的控制指令
1602液晶模块内部的控制器共有11条指令,控制指令表如表3.1所示:
表3.1 控制指令表
指 令
RS
R/W
E
D7
D6
D5
D4
D3
D2
D1
D0
清显示
0
0
1
0
0
0
0
0
0
0
1
光标返回
0
0
1
0
0
0
0
0
0
1
*
置输入模式
0
0
1
0
0
0
0
0
1
I/D
S
显示开/关控制
0
0
1
0
0
0
0
1
D
C
B
光标或字符移位
0
0
1
0
0
0
1
S/C
R/L
*
*
置功能
0
0
1
0
0
1
DL
N
F
*
*
置字符发生存储器地址
0
0
1
0
1
字符发生存储器地址(AGG)
置数据存储器地址
0
0
1
1
显示数据存储器地址(ADD)
读忙标志或地址
0
1
1
BF
计数器地址(AC)
写数到CGRAM或DDRAM
1
0
1
要写的数
从CGRAM或DDRAM读数
1
1
1
读出的数据
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明: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的点阵字符 (有些模块是 DL:高电平时为8位总线,低电平时为4位总线)。
指令7:字符发生器RAM地址设置 。
指令8:DDRAM地址设置 。
指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:写数据 。
指令11:读数据 。
在对液晶显示模块1602写入指令或写入数据前,需要进行初始化,如清屏幕,光标返回到00H位置,开显示,将液晶模块设置为双行显示等。编程时,要根据表3.1来编制程序,通过对RS、RW、D0-D7设置不同的高低电平来实现不同的功能。
3.3 系统软件设计中的主要流程图
设计的主程序和T0中断服务子程序的流程图如图3.10所示。
设计的数据处理子程序和T1中断子程序的流程图如图3.11所示。
T0中断服务子程序
中断
主程序
开始
设置T0、T1的工作方式
LCD的初始化
89C51的初始化
设置SP指针地址
关闭T0定时器
重新赋初值
TIMCOUNT加1
P1.4取反产生自测信号
TIMCOUNT=20?
开启T0、T1
关闭T1计数器
延时120MS
开启T1、T0定时器/计数器
2AH单元清零
T1存储空间清零
将数值存入存储单元
TIMCOUNT清零
ASCⅡ码的转换及结果显示在1602上
三字节二进制整数转换成四字节BCD码
中断返回
图3.10 设计的主程序和T0中断服务子程序的流程图
数据处理子程序 T1中断服务子程序
开始
开始
2AH单元地址加1
清出口单元
中断返回
三字节二进制数据带进位依次左移一位
十进制调整
保存出口单元调整后的数据
原数据左移24次?
N
Y
子程序返回
图3.11 设计的数据处理子程序和T1中断服务子程序的流程图
3.4 系统软件设计中的主要子程序
3.4.1 T1计数器中断服务子程序
根据图3.11中的T1中断服务子程序流程图设计的T1计数器中断服务子程序如下。
TIMER1:
INC 2AH
RETI
3.4.2 T0定时器中断服务子程序
根据图3.10中的T0中断服务子程序流程图设计的T0定时器中断服务子程序如下。
TIMER_INT:
CLR TR0
MOV TL0, TIMER_L
MOV TH0, TIMER_H
INC TIMCOUNT
MOV A , TIMCOUNT
CPL P1.4
CJNE A, #20H,T_END
CLR TR1
MOV TIMCOUNT ,#00H;
MOV INT_L, TL1
MOV INT_H, TH1
MOV INT_G, 2AH
MOV TH1, #00H
MOV TL1, #00H
MOV 2AH, #00H
SETB TR1
SETB TR0
RETI
3.4.3 数据处理子程序
根据图3.11中的数据处理子程序流程图设计的数据处理子程序如下。
SBIN_SBCD:
CLR A
MOV T_G, A
MOV T_H, A
MOV T_M, A
MOV T_S, A
MOV R5, INT_G
MOV R7, INT_L
MOV R6, INT_H
MOV R2, #24
CLR C
SBIN_SBCD1:
MOV A, R7
RLC A
MOV R7, A
MOV A, R6
RLC A
MOV R6, A
MOV A, R5
RLC A
MOV R5, A
MOV A, T_S
ADDC A, T_S
DA A
MOV T_S, A
MOV A, T_M
ADDC A, T_M
DA A
MOV T_M, A
MOV A, T_H
ADDC A, T_H
DA A
MOV T_H, A
MOV A, T_H
ADDDC A, T_H
DA A
MOV T_G, A
MOV A, T_G
DA A
MOV T_G, A
DJNZ R2, SBIN_SBCD1
POP PSW
RET
总的源程序见附录A
3.5程序的编译、仿真
3.5.1在Keil环境下的程序编写
1)建立一个新工程
单击 Project 菜单,在弹出的下拉菜单中选中 New Project选项,然后选择你要保存的路径,输入工程文件的名字,比如保存到 C51 目录里,工程文件的名字为 C51 如下图所示,然后点击保存.保存新工程的界面图如图3.12所示。
图3.12保存新工程的界面图
完成上述步骤后会出现一对话框,选择需要的单片机型号,然后点击确定。
2)建立一个新的文件
单击“File”菜单,再在下拉菜单中单击“New”选项,此时光标在编辑窗口里闪烁,这时可以键入应用程序了,但应首先保存空白的文件,单击菜单上的“File”,在下拉菜单中选中“Save As”选项单击,屏幕如下图所示,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名为(.asm),然后单击“保存”按扭。回到编辑界面后,单击“Target 1”前面的“+”号,然后在“Source Group 1”上击右键,添加文件的界面图如图3.13所示。
图3.13 添加文件的界面图
然后单击“Add File to Group ‘Source Group 1’”, 选中要添加的文件,然后单击
展开阅读全文