设计步骤:
1 使用数字温度传感器DS18B20检测温度,内含AD转换器,因此线路连接十分简单,它无需其他外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简单,它能够达到0.5℃的固有分辨率,使用读取温度暂存寄存器的方法还能达到0.2℃以上精度,应用方便。
2 固态继电器控制加热器工作,固态继电器使用非常简单,而且没有触点,无需外加光耦,自身就可以实现电气隔离,还可以频繁动作。可以使用类似pwm的方式,通过控制固态继电器的开,断时间比来达到控制加热器功率的目的,适合功率不大精度不高,简易水温控制系统。
3 给系统加一个微型打印机,由单片机控制打印机工作,但这样单片机软件能打印实测水温值。 系统框图
串口通讯部分电路
系统设计要求控制系统能同PC联机通信,以利用PC图形处理能力打印显示温度曲线以及下载程序。由于AT89S52串行口电平和PC不一致,AT89S52的I/O为TTL电平,PC串行口为RS232电平利用单片机片内串行口外加逻辑电平转换电路组成RS-232C标准接口以实现系统相互通道的扩展,逻辑电平转换电路采用了一片专用芯片MAX232,外加少量电容即可完成TTL到RS-232或RS-232到TTL的逻辑电平转换。
RS-232C是美国电子工业协会EIA(Electronic Industry
Association)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有
25条信号线,包括一个主通道和一个辅助通道。
电平标准:3--15V=“0”,-3---15V=“1”。
UART模块提供了一个全双工标准通信口,用于完成AT89S52与外设之间的串行通信。根据RS-232的标准,AT89S52单片机也是按照字节传输数据的。 数码显示电路
数码管作为单片机系统最为常用的输出器件,在显示时可以由数字和少量字母组合完成输出功能的系统中应用十分方便。AT89S52最小系统以及一个四位共阴数码管,DIG0、DIG1、DIG2、DIG3分别与单片机的P21、P22、P23、P24相连,每一个都拥有一个共阴的位选端。从而可以通过单片机选通所需显示的数码管。SegA--SegDp口传输要显示的数据,利用其串/并转换功能,送入数码管显示。在此外接了一个10K的排阻来保护LED。
数码管显示电路
第三题、利用VHDL原理设计13进制和24进制计数器,并在开发系统软件进行仿真,给出仿真结果。(20分
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY thireteencout IS
PORT(clk,reset,enable : IN std_logic; count : OUT std_logic_vector(3 downto 0)); END thireteencout;
ARCHITECTURE counter OF thireteencout IS SIGNAL count_int:std_logic_vector(0 to 3);
BEGIN
PROCESS(clk,reset) BEGIN
WAIT UNTIL rising_edge(clk); IF reset = '1' THEN
count_int <= (OTHERS => '0'); ELSIF enable = '1' THEN IF(count_int=\count_int<=\
ELSE
count_int <= count_int +1; --ELSE -- NULL ;
--IF (count_int=\--count_int<=\END IF; END IF;
END PROCESS; count <= count_int; -- IF (reset='0') then --q<=\
---ELSIF(clk'event and clk='1') THEN --q<=q 1;
--IF (q<=\--q<=\---END IF;
--IF (reset<='1')THEN --q<=\--ELSIF
--wait until (clk'event and clk='1');
--WAIT UNTIL (clk'EVENT AND clk = '1');
--WAIT UNTIL (clock'EVENT AND clock = '1'); -- q<=q '1'; --end if; --count<=q;
-- WAIT UNTIL clock = '1';
--if (clock'event and clock='1')then --WAIT UNTIL rising_edge(clock); --clock'event and clock='1'; --count <= 0;
--WAIT UNTIL (clock'EVENT AND clock = '1'); --WAIT riseedge clock = '1';