程序代码
#include
unsigned char code dis1[] = {%unsigned char code dis2[] = {\void delay(unsigned char ms) {
unsigned char i; while(ms--) {
for(i = 0; i< 250; i++) {
_nop_(); _nop_(); _nop_(); _nop_(); } } }
bit lcd_bz() {
bit result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_();
result = (bit)(P0 & 0x80); ep = 0;
return result; }
void lcd_wcmd(unsigned char cmd) {
while(lcd_bz());//判断LCD是否忙碌 rs = 0; rw = 0; ep = 0;
_nop_(); _nop_(); P0 = cmd; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; }
void lcd_pos(unsigned char pos) {
lcd_wcmd(pos | 0x80); }
void lcd_wdat(unsigned char dat) {
while(lcd_bz());//判断LCD是否忙碌 rs = 1; rw = 0; ep = 0; P0 = dat; _nop_(); _nop_(); _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; }
void lcd_init() {
lcd_wcmd(0x38); delay(1);
lcd_wcmd(0x0c); delay(1);
lcd_wcmd(0x06); delay(1);
lcd_wcmd(0x01); delay(1); }
void main(void) {
unsigned char i;
lcd_init();// 初始化LCD delay(10);
lcd_pos(0x01);//设置显示位置 i = 0;
while(dis1[i] != '\\0') {
lcd_wdat(dis1[i]);//显示字符 i++; }
lcd_pos(0x42);// 设置显示位置 i = 0;
while(dis2[i] != '\\0') {
lcd_wdat(dis2[i]);// 显示字符 i++; }
3.2.3 DS1302
S1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图3.8所示及内部结构如图3.9所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。
图3.8 DS1302的外部引脚图
图3.9 DS1302的内部结构
各引脚的功能为:
Vcc1:主电源;Vcc2:备份电源。当Vcc2>Vcc1+0.2V时,由Vcc2向DS1302供电,当Vcc2< Vcc1时,由Vcc1向DS1302供电。SCLK:串行时钟,输入; I/O:三线接口时的双向数据线;CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。
3.2.4 DHT21
DHT21数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集激素和和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC测湿元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT21传感器都在极为精确的湿度校验室进行校准。校准系数以程序的形式储存在OPT内存中,传感器内部在检测检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离高达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。
第四章 系统软件总体设计
4.1 温湿度传感模块程序设计
DHT21的数据通信是以单总线串行输入/输出的方式,读写数据时均从字节最低位开始逐位写入或读取。编程时需要按照广州奥松有限公司公司官方DATASHEET精确地进行时序控制。它包含微秒级延时程序模块、DHT21读数据程序模块、数据处理模块,下面是模块程序设计的详细介绍。
(1) 微秒级延时子程序 void delay(int n) { while(n--); }
该函数用于控制时序中的高低脉冲时间,具体延迟时间所需设定的形参值均由KEIL软件计算得出。while(us--);连续执行n 个周期的空指令,一个周期大约是1us,则该程序大约延时n us。
(2) DHT21的读数据程序
DHT21读数据程序的流程图如图4.1 所示。
图4.1 DHT21读数据程序流程图