欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機ds18b20數字溫度計Proteus仿真代碼 可設上下限
[打印本頁]
作者:
joyv
時間:
2022-12-2 15:44
標題:
單片機ds18b20數字溫度計Proteus仿真代碼 可設上下限
仿真及程序在附件,僅供參考學習
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif
(150.58 KB, 下載次數: 50)
下載附件
2022-12-7 01:40 上傳
單片機源程序如下:
#include <reg52.h>
#include "ds18b20.h"
#include "ds1302.h"
#include "lcd1602.h"
//LED引腳定義
sbit LED_LOW=P1^4; //低溫度報警
sbit LED_NORMAL=P1^5; //正常溫度
sbit LED_HIGH=P1^6; //高溫報警
//按鍵引腳定義
sbit k1=P3^4; //模式切換(按鍵溫度上下限+或溫度上下限-)
sbit k2=P3^2; //設置溫度下限
sbit k3=P3^3; //設置溫度上限
//DS1302相關
uchar times[9];//保存時間
uchar date[11];//保存日期
//溫度數據
uchar HT=40; //溫度上限
uchar LT=15; //溫度下限
uchar WenduData[6]; //實時溫度
uchar HTem[3],LTem[3];//溫度上下限
//全局變量定義
bit flag=0;//模式切換標志位
//主函數
void main()
{
EA=1; //開總中斷
TCON=0x05; //外部中斷0,1設置為邊沿觸發
EX0=1; //開外部中斷0
EX1=1; //開外部中斷1
//init_1302(time_1302);
ReadTemperature();//預讀取溫度并延時跳過默認初始溫度顯示
Delay(50000);
Delay(50000);
LCD_init();//LCD初始化
while(1)
{
if(k1==0){ //按下KEY1時,切換溫度上下限設置方向
Delay(5);
while(k1==0);
flag=~flag;
}
Disp_Temperature();//顯示溫度
Delay(500);
get_1302(time_1302);//獲取時間
change(); //時間轉換
gotoxy(8,2);
LCD_display(times);//顯示時間
}
}
//溫度轉換顯示函數
void Disp_Temperature() //顯示溫度
{
uint a,b,c,d,e,m;
e=ReadTemperature(); //獲取溫度值
a=e/1000; //計算得到十位數
b=e/100-a*10; //計算得到個位數字
d=e%10; //計算得到小數點后兩位
c=(e%100)/10; //計算得到小數點后一位
m=e/100;
//溫度不在范圍內報警
if( m<LT){ //溫度超過溫度上限
LED_LOW=0;
LED_HIGH=1;//黃燈亮
LED_NORMAL=1;
}
else if(m>HT){ //溫度低于溫度下限
LED_LOW=1;
LED_HIGH=0;//紅燈亮
LED_NORMAL=1;
}
else{ //溫度處于正常范圍
LED_LOW=1;
LED_HIGH=1;
LED_NORMAL=0;//綠燈亮
}
//LCD顯示溫度數據
WenduData[0] = a+'0';
WenduData[1] = b+'0';
WenduData[2] = '.';
WenduData[3] = c+'0';
WenduData[4] = d+'0';
WenduData[5] = '\0';
LTem[0] = LT/10+'0';
LTem[1] = LT%10+'0';
LTem[2] = '\0';
HTem[0] = HT/10+'0';
HTem[1] = HT%10+'0';
HTem[2] = '\0';
gotoxy(1,1);
LCD_display("LT:");
gotoxy(4,1);
LCD_display(LTem);
gotoxy(1,2);
LCD_display("HT:");
gotoxy(4,2);
LCD_display(HTem);
gotoxy(8,1);
LCD_display("T:");
gotoxy(10,1);
LCD_display(WenduData);
}
//外部0中斷子函數
void int0() interrupt 0
{
if(k2==0) //按鍵KEY2按下
{
Delay(5);
while(k2==0);
if(flag==0)
LT++; //溫度下限+
else
LT--;//溫度下限-
}
}
//外部1中斷子函數
void int1() interrupt 2
{
if(k3==0)
{
Delay(5);
while(k3==0);
if(flag==0)
HT++;//溫度上限+
else
HT--;//溫度上限-
}
}
//DS1302數值轉換
void change()
{
// 時 間 的 轉 換
times[0]=time_1302[2]/10+'0';
times[1]=time_1302[2]%10+'0';
times[2]=':';
times[3]=time_1302[1]/10+'0';
times[4]=time_1302[1]%10+'0';
times[5]=':';
times[6]=time_1302[0]/10+'0';
times[7]=time_1302[0]%10+'0';
times[8]='\0';
// 日 期 的 轉 換
date[0]='2';
date[1]='0';
date[2]=time_1302[6]/10+'0';
date[3]=time_1302[6]%10+'0';
date[4]='/';
date[5]=time_1302[4]/10+'0';
date[6]=time_1302[4]%10+'0';
date[7]='/';
date[8]=time_1302[3]/10+'0';
date[9]=time_1302[3]%10+'0';
date[10]='\0';
}
復制代碼
Keil代碼與Proteus仿真下載:
ds18b20數字溫度計.rar
(148.36 KB, 下載次數: 72)
2022-12-2 15:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1