本帖最后由 BigTree2017 于 2017-10-9 13:48 编辑
1. 概述本设计基于CPLD设计一款数字温度计,温度传感器使用DS18B20,CPLD采用EPM240T100C5。DS18B20 具有体积小,硬件开销低(只需要一根信号线),抗干扰能力强等优点。EPM240T00C5具有延时低、功耗小、稳定性高等优点。 2. 硬件简介硬件平台采用额ETree的CPLD开发板,有如下硬件资源: - CPLD EPM240T100C5;
- USB 转串口(省去 USB 转串口线);
- LED;
- 有源蜂鸣器;
- DS18B20 温度传感器;
- 四位共阳极数码管;
- 按键;
- GPIO 拓展接口(18 个通用 IO)。
有需要的朋友可以在 shop397545458.taobao.com 购买。
3. 进制转换(Hex2Dec)由于 DS18B20 输出的是十六进制数据, 所以需要做进制转换为 10 进制输出。这里由于CPLD 资源问题,故只设计温度显示范围为: 0~47 度,最小分辨率为 1 度。 wire [7:0] data_in;
assign data_in = {1'b0,temperature_buf[10:4]};
reg [7:0] buf0;
reg [7:0] buf1;
reg [7:0] buf2;
reg [7:0] data_out;
always @(*)
case(data_in[7:4])
0:
begin
buf0[3:0] = (data_in[3:0]>=10)?(data_in[3:0]-10):data_in[3:0];
buf0[7:4] = (data_in[3:0]>=10)?(data_in[7:4]+1):data_in[7:4];
data_out = buf0;
end
1:
begin
buf0[3:0] = (data_in[3:0]>=10)?(data_in[3:0]-10 + 6):(data_in[3:0]+6);
buf0[7:4] = (data_in[3:0]>=10)?(data_in[7:4]+1):data_in[7:4];
buf1[3:0] = (buf0[3:0]>=10)?(buf0[3:0]-10):buf0[3:0];
buf1[7:4] = (buf0[3:0]>=10)?(buf0[7:4]+1):buf0[7:4];
data_out = buf1;
end
2:
begin
buf0[3:0] = (data_in[3:0]>=10)?(data_in[3:0]-10 + 6):(data_in[3:0]+6);
buf0[7:4] = (data_in[3:0]>=10)?(data_in[7:4]+1):data_in[7:4];
buf1[3:0] = (buf0[3:0]>=10)?(buf0[3:0]-10 + 6):(buf0[3:0]+6);
buf1[7:4] = (buf0[3:0]>=10)?(buf0[7:4]+1):buf0[7:4];
buf2[3:0] = (buf1[3:0]>=10)?(buf1[3:0]-10):(buf1[3:0]);
buf2[7:4] = (buf1[3:0]>=10)?(buf1[7:4]+1):buf1[7:4];
data_out = buf2;
end
default:
begin
data_out = data_in;
end
endcase
assign temperature = data_out[7:0];
|