|
第一章 绪论
目前单片机渗透到我们生活的各个领域, 几乎很难找到哪个领域没有 单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络 通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各 种智能 IC 卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动 洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更 不用说自动控制领域的机器人、 智能仪表、 医疗器械以及各种智能机械了。 因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的 科学家、工程师。
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数 据处理能力的中央处理器 CPU 随机存储器 RAM 、 只读存储器 ROM 、 多种 I/O口和中断系统、定时器 /计时器等功能(可能还包括显示驱动电路、脉宽调制 电路、模拟多路转换器、 A/D转换器等电路)集成到一块硅片上构成的一个 小而完善的计算机系统。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用 设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
在智能仪器仪表上的应用
在工业控制中的应用
在家用电器中的应用
在计算机网络和通信领域中的应用
单片机在医用设备领域中的应用
在各种大型电器中的模块化应用
单片机在汽车设备领域中的应用
基于单片机在现实生活中的广泛应用,及人们对于万年历、温度显示的 需求度,现设计出一款基于 89C51的万年历及温度显示系统。
此设计是数据采集及处理,显示系统及与单片机有效结合。此设计是通 过在“单片机原理及应用”课堂上学习的知识的综合应用。
本系统设计以单片机 89C51为控制器,辅以时钟芯片 Ds1302、温度传
感器 Ds18b20、液晶显示器 LM016L 。
基于 89C51的万年历及温度显示系统, 主要由单片机 89C51、 时钟芯片 Ds1302、温度传感器 Ds18b20、液晶显示器 LM016L 等构成,具有显示当前 时间、年月日及温度的功能。
第二章 设计要求及设计框图 2.1 设计要求
① 具有年、月、日、星期、时、分、秒等功能;
② 具有温度显示功能;
2.2 设计框图
第三章 知识要点
3.1 LMO16L 液晶模块
LM016L 液晶模块采用 HD44780控制器。 HD44780具有简单而功能较强的 指令集,可以实现字符移动、闪烁等功能。
LM016L 与单片机 MCU(Microcontroller Unit )通讯可采用 8位或者 4位并行传输两种方式。 HD44780控制器由两个 8位寄存器、指令寄存器(IR ) 和数据寄存器(DR ) 、忙标志(BF ) 、显示数据 RAM(DDRAM ) 、字符发生器 ROM
(CGROM ) 、 字符发生器 RAM (CGRAM ) 、 地址计数器 (AC ) 。 IR 用于寄存指令码, 只能写入不能读出; DR 用于寄存数据,数据由内部操作自动写入 DDRAM 和 CGRAM ,或者暂存从 DDRAM 和 CGRAM读出的数据。 BF 为 1时,液晶模块处于 内部处理模式,不响应外部操作指令和接受数据。 DDRAM 用来存储显示的字 符, 能存储 80个字符码。 CGROM 由 8位字符码生成 5*7点阵字符 160种和 5*10点阵字符 32种, 8位字符编码和字符的对应关系, 可以查看相关文献。 CGRAM 是为用户编写特殊字符留用的,它的容量仅 64字节。可以自定义 8个 5*7点阵字符或者 4个 5*10点阵字符。 AC 可以存储 DDRAM 和 CGRAM的地址,如 果地址码随指令写入 IR,则 IR 自动把地址码装入 AC ,同时选择 DDRAM 或者 CGRAM 单元。
3.1.1 LM016L 引脚说明
管脚号名称电平功能描述
1 VSS 0V
2 VDD 5.0V
3 RS H/L H:数据线上为数据信号; L :数据线上为指令信号
4 RW H/L H:读数据模式; L :写数据模式
5 E H/L 使能信号端
6 DB0~DB7 H/L 数据线
3.1.2 控制指令
控制指令通过对 HD44780写入控制指令, HD44780产生显示驱动信号来 驱动 LM016L 。
HD44780的控制指令主要有:清除显示(Clear Display) 、地址归位 ( Return Home ) 、 输入模式设定 (Entry Mode Set ) 、 显示开 /关控制 (Display On/Off Control ) 、 功能设定 (Function Set ) 、 设定 CGRAM 的地址 (Set CGRAM Address ) 、 设定 DDRAM 的地址 (Set DDRAM Address ) 、 写 DDRAM/CGRAM(Write Date to DDRAM/CGRAM) 、读忙标志和地址(Read Busy Flagand Address)以 及从 DDRAM 和 CGRAM 中读数据(Read Date from DDRAM/CGRAM) 。
3.1.3 基于 Proteus ISIS 7的液晶模块仿真
1、接口设计
运行 Proteus ISIS 7进入设计界面,依照图所示在元件库中选择需要的 元件。 80C51的 P0口作为 8位数据的输出端, P2.0、 P2.1、 P2.2作为控制信 号的输出端。
2、软件设计
电路图绘制好之后,就可以编写 LM016L 的驱动程序。
LM016L 的操作有两大类:读操作和写操作。一般情况下不需要从液晶中 读取数据,所以对液晶操作主要是写指令和写数据两个写操作,对于忙标志 (BF ) , 采用延时的方法, 保证液晶模块有足够时间进行内部数据处理。 在写 源程序时,需要根据液晶模块的时序图编写程序。
(1)写指令子程序
RS
R/WE DB0 - DB7
WRITE_COMMAND:;写指令子程序
CLR[4] LCDE;清使能信号
CLR RS; RS=0, RW=0写指令
CLR RW
MOV P0, A ;送指令字
(2)写数据子程序
WRITE_DATA
入口参数:数据放在累加器 A 中
WRITE_DATA:;写数据子程序
CLR LCDE;清使能信号
SETB RS ; RS=1, RW=0写数据
CLR RW
MOV P0, A ;送数据
RS BIT P2.0; RW BIT P2.1; LCDE BIT P2.2
下面是写指令和写数据的源代码:
写指令子程序 WRITE_COMMAND
入口参数:指令字放在累加器 A 中
有效数据
T2
T3
T1
T4
SETB LCDE
LCALL DELAY
CLR LCDE
RET
SETB LCDE
LCALL DELAY
CLR LCDE
RET
;设置使能信号
;延时
;设置使能信号
;延时
液晶模块初始化主要包括:功能设定(Function Set) 、显示开 /关控制 (Display On/OffControl) 、 清除显示 (Clear Display ) 、 进入点设定 (Entry Mode Set) 。
INITIAL_LCD:;液晶模块初始化 MOV A, #06H ;
输入方式设置; 8位接口, 两行显示, 5*7点阵字符 LCALL WRITE_COMMAND MOV A, #38H MOV A, #01H ;清屏指令
LCALL WRITE_COMMAND LCALL WRITE_COMMANDMOV A, #0EH ;显示开关设
置 RET
LCALL WRITE_COMMAND3.3自定义字符及其显示
CGRAM 是用户编写特殊字符用的,它的容量仅 64字节,地址为 00~3FH。 定义一个 5*7点阵字符需要 8个字节,这 8个字节由 CGRAM 地址的高 3位确 定,相同的为一组。
3.2 单片机 AT89C51
AT89C51是一种带 4K 字节闪烁可编程可擦除只读存储器 (FPEROM — Falsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8位微处理器,俗称单片机。 AT89C2051是一种带 2K 字节闪烁可编程可擦除只 读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 100次。该器 件采用 ATMEL 高密度非易失存储器制造技术制造, 与工业标准的 MCS-51指令 集和输出管脚相兼容。由于将多功能 8位 CPU 和闪烁存储器组合在单个芯片 中, ATMEL 的 AT89C51是一种高效微控制器, AT89C2051是它的一种精简版本。 AT89C
单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
3.2.1 主要特性
·与 MCS-51 兼容
·4K字节可编程闪烁存储器
寿命:1000写 /擦循环
数据保留时间:10年
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
·128*8位内部 RAM
·32可编程 I/O线
·两个 16位定时器 /计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
3.2.2 管脚说明
VCC:供电电压。
GND:接地。
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口作为第八位地址接收。
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口管脚 备选功能
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.3 振荡器特性
XTAL1和 XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置 为片内振荡器。 石晶振荡和陶瓷振荡均可采用。 如采用外部时钟源驱动器件, XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对 外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 3.2.4 芯片擦除功能
整个 PEROM 阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保 持 ALE 管脚处于低电平 10ms 来完成。 在芯片擦操作中, 代码阵列全被写“1” 且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外, AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑, 支持两种软件可选的掉电模式。在闲置模式下, CPU 停止工作。但 RAM ,定时 器,计数器,串口和中断系统仍在工作。在掉电模式下,保存 RAM 的内容并 且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
3.3 时钟芯片 DS1302
DS1302在每次进行读、写程序前都必须初始化,先把 SCLK 端置 “ 0” , 接着把 RST 端置 “ 1” , 最后才给予 SCLK 脉冲; 读 /写时序如下图 3.3.1所示。 DS1302的控制字, 此控制字的位 7必须置 1, 若为 0则不能把对 DS1302进行 读写数据。 对于位 6, 若对程序进行读 /写时 RAM=1, 对时间进行读 /写时, CK=0。 位 1至位 5指操作单元的地址。 位 0是读 /写操作位, 进行读操作时, 该位为 1;该位为 0则表示进行的是写操作。控制字节总是从最低位开始输入 /输出 的。 DS1302的日历、时间寄存器内容:“ CH ”是时钟暂停标志位,当该位为 1时,时钟振荡器停止, DS1302处于低功耗状态;当该位为 0时,时钟开始运
行。 “ WP ”是写保护位,在任何的对时钟和 RAM 的写操作之前, WP 必须为 0。 当“ WP ”为 1时,写保护位防止对任一寄存器的写操作。
3.3.1 DS1302的控制字节
DS1302的控制字节的高有效位(位 7)必须是逻辑 1,如果它为 0,则不 能把数据写入 DS1302中;位 6如果 0,则表示存取日历时钟数据,为 1表示 存取 RAM 数据;位 5至位 1指示操作单元的地址;最低有效位(位 0)如为 0表示要进行写操作, 为 1表示进行读操作, 控制字节总是从最低位开始输出。
3.3.2 数据输入输出(I/O)
在控制指令字输入后的下一个 SCLK 时钟的上升沿时,数据被写入 DS1302,数据输入从低位即位 0开始。同样,在紧跟 8位的控制指令字后的 下一个 SCLK 脉冲的下降沿读出 DS1302的数据,读出数据时从低位 0位到高 位 7。如下图 3.3
所示
图 3.3.1 DS1302读 /写时序图
3.3.3 DS1302的寄存器
DS1302有 12个寄存器,其中有 7个寄存器与日历、时钟相关,存放的 数据位为 BCD 码形式 , 其日历、时间寄存器及其控制字见表 3.3.2。
表 3.3.2 DS1302的日历、时间寄存器
此外, DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄 存器及与 RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄 存器外的所有寄存器内容。 DS1302与 RAM 相关的寄存器分为两类:一类是 单个 RAM 单元, 共 31个, 每个单元组态为一个 8位的字节, 其命令控制字为 C0H ~FDH ,其中奇数为读操作,偶数为写操作;另一类为突发方式下的 RAM 寄存器,此方式下可一次性读写所有的 RAM 的 31个字节,命令控制字为 FEH(写 ) 、 FFH(读 ) 。
3.4 DS18B20数字温度传感器
3.4.1技术性能描述
1、 独特的单线接口方式, DS18B20在与微处理器连接时仅需要一条口 线即可实现微处理器与 DS18B20的双向通讯。
2、测温范围 -55℃~+125℃,固有测温分辨率 0.5℃。
3、支持多点组网功能,多个 DS18B20可以并联在唯一的三线上,最 多只能并联 8个, 实现多点测温, 如果数量过多, 会使供电电源电压过低, 从而造成信号传输的不稳定。
4、工作电源 : 3~5V/DC。
5、在使用中不需要任何外围元件。
6、测量结果以 9~12位数字量方式串行传送。
应用范围
该产品适用于冷冻库、粮仓、储罐、电讯机房、电力机房、电缆线槽 等测温和控制领域。
接线说明
特点 :独特的一线接口,只需要一条口线通信多点能力,简化了分布 式温度传感应用无需外部元件可用数据总线供电, 电压范围为 3.0 V 至 5.5 V ,无需备用电源测量温度范围为 -55 ℃至 +125 ℃ 。
3.4.2 DS18B20主要的数据部件
光刻 ROM 中的 64位序列号是出厂前被光刻好的,它可以看作是该 DS18B20的地址序列码。 64位光刻 ROM 的排列是:开始 8位(28H )是产 品类型标号,接着的 48位是该 DS18B20自身的序列号,最后 8位是前面 56位的循环冗余校验码(CRC=X8+X5+X4+1) 。光刻 ROM 的作用是使每一个 DS18B20都各不相同,这样就可以实现一根总线上挂接多个 DS18B20的目 的。
DS18B20中的温度传感器可完成对温度的测量, 以 12位转化为例:用 16位符号扩展的二进制补码读数形式提供,以 0.0625℃ /LSB形式表达, 其中 S 为符号位。
DS18B20内部结构主要由四部分组成:64位光刻 ROM ,温度传感器, 温度报警触发器 TH 和 TL, 配置寄存器。
1、存储器
DS18B20的存储器包括高速暂存器 RAM 和可电擦除 RAM , 可电擦除 RAM 又包括温度触发器 TH 和 TL ,以及一个配置寄存器。存储器能完整的确定 一线端口的通讯,数字开始用写寄存器的命令写进寄存器,接着也可以用 读寄存器的命令来确认这些数字。 当确认以后就可以用复制寄存器的命令 来将这些数字转移到可电擦除 RAM 中。当修改过寄存器中的数时,这个过 程能确保数字的完整性。
高速暂存器 RAM 是由 8个字节的存储器组成; 第一和第二个字节是温 度的显示位。第三和第四个字节是复制 TH 和 TL ,同时第三和第四个字节 的数字可以更新;第五个字节是复制配置寄存器,同时第五个字节的数字
可以更新;六、七、八三个字节是计算机自身使用。用读寄存器的命令能 读出第九个字节,这个字节是对前面的八个字节进行校验。
2、 64-位光刻 ROM
64位光刻 ROM 的前 8位是 DS18B20的自身代码,接下来的 48位为连 续的数字代码,最后的 8位是对前 56位的 CRC 校验。 64-位的光刻 ROM 又 包括 5个 ROM 的功能命令:读 ROM ,匹配 ROM ,跳跃 ROM ,查找 ROM 和报警 查找。
3、 DS18B20外部电源的连接方式
DS18B20可以使用外部电源 VDD , 也可以使用内部的寄生电源。 当 VDD 端口接 3.0V — 5.5V 的电压时是使用外部电源;当 VDD 端口接地时使用了 内部的寄生电源。无论是内部寄生电源还是外部供电, I/O口线要接 5K Ω左右的上拉电阻。
4、配置寄存器
配置寄存器是配置不同的位数来确定温度和数字的转化。 R1, R0是温 度的决定位,由 R1, R0的不同组合可以配置为 9位, 10位, 11位, 12位的温度显示。这样就可以知道不同的温度转化位所对应的转化时间,四 种配置的分辨率分别为 0.5℃, 0.25℃, 0.125℃和 0.0625℃,出厂时以 配置为 12位
3.4.3 DS18B20温度处理过程
1、温度的读取
DS18B20在出厂时以配置为 12位,读取温度时共读取 16位,所以把 后 11位的 2进制转化为 10进制后在乘以 0.0625便为所测的温度,还需 要判断正负。 前 5个数字为符号位, 当前 5位为 1时, 读取的温度为负数; 当前 5位为 0时,读取的温度为正数。
2、 DS18B20控制方法
指令约定代码操作说明
(1)温度转换 44H 启动 DS18B20进行温度转换
(2)读暂存器 BEH 读暂存器 9位二进制数字
[后续内容及源码见附件]
|
|