基于单片机的大棚温湿度设计(编辑修改稿)内容摘要:
是整个系统的控制中枢,它指挥外围器件协调工作,从而完成特定的功能。 硬件实现上采用模块化设计,每一模块只 实现一个特定功能,最后再将各个模块搭接在一起。 这种设计方法可以降低系统设计的复杂性。 系统电路原理图如图 2所示。 本系统主要硬件设计包括电源电路、晶振电路、复位电路、 LCD 显示电路以及温湿度传感器电路。 控制电路的核心器件是由美国 Atmel公司生产的 AT89S52单片机,属于 MCS51系列。 AT89S52 是一种低功耗、高性能的 CMOS8 位微控制器,具有 8K 在系统可编程 Flash 存储器,采用的工艺是 Atmel 公司的高密度非易失存储器技术;片上 Flash 允许程序存储器在系统可编程,亦适于常规编程器;在单芯片上, 拥有灵巧的 8位 CPU 和在系统可编程Flash,使得 AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方案;价格低廉、性能可靠、抗干扰能力强。 因此广泛应用于工业控制和嵌入式系统中。 AT89S52 外围电路 简述 单片机 AT89S52 作为主控芯片,控制整个电路的运行。 单片机外围需要一个复位电路,复位电路的功能是:系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。 为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分 合过程中引起的抖动而影响复位。 该设计在电源 电压瞬间下降时可以使电容迅速放电,可令系统可靠复位。 图 31 复位电路图 图 32 时钟电路 AT89S52中有一个用于构成内部振荡器的高增益反相放大器,引脚 XTAL1和 XTAL2分别为该反向放大器的输入端和输出端。 这个反向放大器与作为反馈元件的片外石英晶10UFC310KR1S1VCCRST复位电路112MC130pC230pXTAL2 XTAL1振荡电路电子 104 班 苏宇宁 大棚温湿度设计 5 体或陶瓷谐振器一起构成自激振荡器。 外接石英晶体 (或陶瓷谐振器 )及电容 C C2 接在放大器的反馈回路中构成并联振荡电路。 对外接电容 C C2 虽然没有十分严格的要求 ,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。 如果使用石英晶体 ,电容应该使用 30pF。 还可以使用外部时钟。 这种情况下 ,外部时钟脉冲接 XTAL1 端 ,即内部时钟发生器的输入端 , XTAL2 应悬空。 由于外部时钟信号是通过一个 2分频触发器后作为内部时钟信号的 ,所以外部时钟信号的占空比没有特殊要求 ,但最小高电平持续时间和最大低电平持续时间应符合产品技术条件的要求。 液晶显示模块电路设计 这部分设计液晶屏显示,包括 显示温度、显示湿度以及设置温湿度上下限值。 LCD12864 内部提供 128 2字节的字符显示 RAM 缓冲区( DDRAM)。 字符显示是通过将字符显示编码写入该字符显示 RAM实现的。 根据写入内容的不同,可分别在液晶屏上显示 CGROM(中文字库)、 HCGROM( ASCII 码字库)及 CGRAM(自定义字形)的内容。 三种不同字符 /字型的选择编码范围为: 0000~ 0006H(其代码分别是 0000、 000 0000006 共 4 个)显示自定义字型, 02H~ 7FH 显示半宽 ASCII 码字符, A1A0H~ F7FFH 显示8192 种 GB2312 中文字库字形。 字符显示 RAM 在液晶模块中的地址 80H~ 9FH。 字符显示的 RAM 的地址与 32 个字符显示区域有着一一对应的关系,其对应关系如下表 3所示。 表 3: 80H 81H 82H 83H 84H 85H 86H 87H 90H 91H 92H 93H 94H 95H 96H 97H 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH LCD 通过 RS、 R/W、 E构成的时序图实现数据的读与写,时序图如图 5图 55所示。 电子 104 班 苏宇宁 大棚温湿度设计 6 图 33 MPU 写资料到 ST7920( 8 位数据线模式) 图 34 MPU 从 ST7920 读资料( 8 位数据线模式) 模块控制芯片提供两套控制命令,基本指令和扩充指令如下表 表 5: 指令表 4:( RE=0:基本指令) 指 指 令 码 功 能 令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 清除 显示 0 0 0 0 0 0 0 0 0 1 将 DDRAM填满 20H,并且设定 DDRAM的地址计数器 (AC)到 00H 地址 归位 0 0 0 0 0 0 0 0 1 X 设定 DDRAM 的地址计数器 (AC)到00H,并且将游标移到开头原点位置。 这个指令不改变 DDRAM 的内容 显示状态开 /关 0 0 0 0 0 0 1 D C B D=1: 整体显示 ON C=1: 游标 ON B=1:游标位置反白允许 进入点 设定 0 0 0 0 0 0 0 1 I/D S 指定在数据的读取与写入时 ,设定游标的移动方向及指定显示的移位 游标或显示移位控制 0 0 0 0 0 1 S/C R/L X X 设定游标的移动与显示的移位控制位。 这个指令不改变 DDRAM 的内容 功能 设定 0 0 0 0 1 DL X RE X X DL=0/1: 4/8位数据 RE=1: 扩充指令操作 RE=0: 基本指令操作 设定CGRAM 地址 0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0 设定 CGRAM 地址 电子 104 班 苏宇宁 大棚温湿度设计 7 设定DDRAM 地址 0 0 1 0 AC5 AC4 AC3 AC2 AC1 AC0 设定 DDRAM 地址(显示位址) 第一行: 80H- 87H 第二行: 90H- 97H 读取忙标志和地址 0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0 读取忙标志 (BF)可以确认内部动作是否完成 ,同时可以读出地址计数器 (AC)的值 写数据到 RAM 1 0 数据 将数据 D7—— D0 写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM) 读出RAM 的值 1 1 数据 从内部 RAM读取数据 D7—— D0 (DDRAM/CGRAM/IRAM/GRAM) 指令表 5:( RE=1:扩充指令) 指 指 令 码 功 能 令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0 待命 模式 0 0 0 0 0 0 0 0 0 1 进入待命模式 ,执行其他指令都棵终止 待命模式 卷动地址开关开启 0 0 0 0 0 0 0 0 1 SR SR=1:允许输入垂直卷动地址 SR=0:允许输入 IRAM 和CGRAM地址 反白 选择 0 0 0 0 0 0 0 1 R1 R0 选择 2 行中的任一行作反白 显示,并可决定反白与否。 初始值 R1R0= 00,第一次设定为反白显示,再次设定变回正常 睡眠 模式。基于单片机的大棚温湿度设计(编辑修改稿)
相关推荐
1 5KR P 21 5KQ18 05 0Q38 05 0Q28 05 0Q48 05 0U 1 AU 1 BR 1 02 0KR 1 11 0KR 1 21 0KR 1 31 0KF1F U S E 1蓄电池K1太阳能板J2J1K2K3灯过充过放停放保护+ 24 VCOM1 COM2停充指示 图 过充过放控制电路 10 过充电,过放电的判断主要是基于电池的电压水平,其工作原理如下
2在众多嵌入式控制应用系统中得到广泛应用。 它具有完整的输入输出、控制端口、以及内部程序存储空间 [17]。 与我们通常意义上的微机原理类似,可以通过外接 A/D, D/A转换电路及运放 芯片 实现对传感器传送信息的采集,且能够提供以点阵或 LCD 液晶及外接按键实现人机交互,能对内部众多 I/O 端口连接步进电机对外围设备进行精确操控,具有强大的工控能力。
0中断服务程序 ======================= T0IT: PUSH PSW MOV PSW,10H MOV TH0,TIMEH MOV TL0,TIMEL INC R7 CJNE R7,32H,T0IT1 MOV R7,00H SETB TIME1SOK。 1s定时到标志 T0IT1: POP PSW RETI。 =============================
复位,上电以后,复位电路通过电容使 RST 持续一段时间的高电平,如果 RST 能够持续充足时间的高电平,系统就有足够 的时间复位,那么就实现了系统复位的可靠性。 基于单片机的多路温度采集系统设计 8 但是,电容的充电时间决定了 RST 端持续高电平的时间。 随着电容充电的完成,RST 端变成低电平。 如图 33所示。 对于手动按钮复位,它是通过手动操作按键来给 RST 一个高电平
138P 0 .2 /A D 237P 0 .3 /A D 336P 0 .4 /A D 435P 0 .5 /A D 534P 0 .6 /A D 633P 0 .7 /A D 732P 1 . 01P 1 . 12P 1 . 23P 1 . 34P 1 . 45P 1 . 56P 1 . 67P 1 . 78P 3 .0 /R X D10P 3 .1 /T X D11P 3 .2 /I NT
ring(1,1,SPD)。 L1602_string(2,1, )。 L1602_char(1,5,speed/10+0x30)。 L1602_char(1,6,39。 39。 )。 while(1) { kevent()。 if(key_val==15) { if(flag_lsd) { L1602_char(1,4,39。 *39。 )。 L1602_char(1,6,39。 *39。 )