仿真版本:Proteus8.6及以上版本
程序編譯:Keil5 C51
編程語言:C語言
設計編號:【E04】
1.? 簡介
? 本文提出了一種基于51單片機的多路溫度檢測報警系統。該設計采用數字溫度傳感器DS18B20,此傳感器讀取被測量溫度值并進行轉換。將轉換后的多路數據送到單片機處理,再通過LCD1602顯示出來。同時,可手動設置溫度的上下限值,當實時溫度超出時,對應的工作指示燈亮,蜂鳴器報警。
2.? 主要功能
a.通過LCD1602顯示當前溫度值,溫度測量范圍:0-99攝氏度。
b.通過獨立按鍵設置多路溫度上下限值,第一次按下設置鍵設置溫度下限值,第二次按下設置鍵設置溫度上限值,再按加減鍵就可以修改溫度值。
c.當溫度低于下限或高于上限溫度時,蜂鳴器和LED燈同時報警。
d.可通過報警開關按鍵關閉蜂鳴器報警。
3.? 源程序(Keil5)
本設計采用keil5 C51軟件(內附安裝包)實現程序設計。如需用keil4打開程序,可自行通過.c和.h文件新建工程即可。
#include"stc89c51.h"
#include"ds18b20.h"
sbit SetKey = P3^0;
sbit UpKey = P3^1;
sbit DnKey = P3^2;
sbit AlarmK = P3^3;
sbit BEEP = P2^4;
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
sbit LED4 = P1^3;
sbit LED5 = P1^4;
sbit LED6 = P1^5;
sbit LED7 = P1^6;
sbit LED8 = P1^7;
extern void StartDs18b20(uchar * ROMCODE);
extern void ReadDs18b20(uchar * ROMCODE);
extern uchar TZ; //轉換后的溫度值整數部分
extern uchar TD; //轉換后的溫度值整數部分
//extern void init_lcd (void);
//extern void LcdWrData(uchar content);
//extern void LcdWrCommand(uchar content) ;
extern uchar FindDevices(uchar CodeROM[][8]);
data uchar Ds18b20Rom[4][8];
//************************************************************************************************************************
extern uchar LastDiscrap ;
extern unsigned char tflag;
unsigned char AlarmTempLow=20,AlarmTempTop=30,Set=0;
unsigned char fAlarm=0xff;
unsigned char TP1=0xff,TP2=0xff,TP3=0xff,TP4=0xff;
unsigned char Alarm1=0,Alarm2=0,Alarm3=0,Alarm4=0;
unsigned char tf1=0,tf2=0,tf3=0,tf4=0;
void delayms(uint ms) //延時xx毫秒
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
sbit RS=P2^5;
sbit RW=P2^6;
sbit EN=P2^7;
#define LCD_BUS P0
void command(unsigned int com) //LCD寫指令
{
RS=0; //RS為0
LCD_BUS=com; //裝載指令
delayms(5); //延時5ms
EN=1; //LCD使能
delayms(5); //延時5ms
EN=0; //LCD不使能
}
void write_dat(unsigned char dat) //LCD寫數據
{
RS=1; //RS為1
LCD_BUS=dat; //裝載數據
delayms(5); //延時5ms
EN=1; //LCD使能
delayms(5); //延時5ms
EN=0; //LCD不使能
}
void writestring(unsigned char x,unsigned char y,unsigned char *s) //LCD 寫字符串
{
if (y == 0) command(0x80 + x); //表示第一行
else command(0xC0 + x); //表示第二行
while (*s) //判斷是否字符串的結尾
{
write_dat( *s); //顯示當前字符
s ++; //字符串地址加1
}
}
void writeChar(unsigned char x,unsigned char y,unsigned char s) //LCD 寫字符串
{
if (y == 0) command(0x80 + x); //表示第一行
else command(0xC0 + x); //表示第二行
{
write_dat( s); //顯示當前字符
}
}
void LCD_Initial(void) //LCD初始化
{
EN=0; //LCD不使能
RW=0; //RW為0
command(0x38); //發(fā)送初始化指令
command(0x0c); //發(fā)送初始化指令
command(0x06); //發(fā)送初始化指令
command(0x01); //發(fā)送初始化指令
command(0x80+0x02); //發(fā)送LCD初始位置
}
4.? 仿真proteus8.6
本設計采用proteus8.6軟件(內附安裝包)實現仿真設計,如下圖所示。proteus軟件一般存在高低版本兼容問題,該仿真是通過proteus8.6導出的,所以請盡量使用proteus8.6打開文件,低于proteus8.6的版本不能夠正常使用,高于proteus8.6的版本除了proteus8.8/8.9理論上可以正常使用。
當前溫度:
設置溫度下限:
設置溫度上限:
當溫度高于上限時,蜂鳴器和LED燈報警:
當溫度低于下限時,蜂鳴器和LED燈報警:
5.? 設計報告
設計報告主要包括硬件電路、軟件設計、仿真調試等等,僅供參考。
6.? 資料清單
設計資料主要包括C程序+仿真+設計報告+使用說明+元件清單+操作視頻等。
7.? 資料獲取鏈接
百度網盤下載鏈接:【E04】百度網盤下載鏈接
更多單片機仿真設計合集:單片機仿真設計合集