日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 18B20溫度LCD顯示程序#include//器件配置文件#includesbitLCM_RS=P3^3;//引腳定義sbitLCM_RW=P3^4;//引腳定義sbitLCM_EN=P3^5;//引腳定義sbitOUT=P3^6;//控制繼電器sbitTSOR=P3^7;//溫度測試端#defineB

18B20溫度LCD顯示程序

#include//器件配置文件
#include
sbitLCM_RS=P3^3;//引腳定義
sbitLCM_RW=P3^4;//引腳定義

sbitLCM_EN=P3^5;//引腳定義
sbitOUT=P3^6;//控制繼電器
sbitTSOR=P3^7;//溫度測試端
#defineBusy0x80//常量定義
#defineucharunsignedchar
#defineuintunsignedint
#defineDATAPORTP1
#definereset(){WDT=0x1e;WDT=0xe1;}//看門狗啟動/復(fù)位宏定義
sfrWDT=0xa6;//看門狗寄存器定義
bitON_OFF;
bitoutflag;
//==============================================
uchartemp1,temp2;
ucharcnt;
uchardEDA,sec;//時間變量
charmin,hour;
charset,T;
ucharReadStatusLCM(void);//讀數(shù)據(jù)到MCU子函數(shù)聲明
ucharcodestr0[]={"---::---"};//待顯字符串
ucharcodestr1[]={"SET:CSA:.C"};
ucharcodestr2[]={""};//待顯空字符串
//====================函數(shù)聲明=======================
voidfun0(void);
voidfun1(void);
voidfun2(void);
voidfun3(void);
voidset_adj(void);
voidinc_key(void);
voiddec_key(void);
voidkey(void);
voidgettempTS(void);
voidinitTS(void);
ucharreadBTS(void);
voidwriteBTS(ucharbyte);
voidresetTS(void);
bitreaDTS(void);
voidwrite1TS(void);
voidwrite0TS(void);
voiddelay15us(void);
voiddelay60us(void);

//********延時K*1mS,12.000MHz*********
voiddelay(uintk)//函數(shù)名為delay的延時子函數(shù)。定義k為無符號整型變量
{//delay函數(shù)開始
uinti,j;//定義i、j為無符號整型變量
for(i=0;i{//for循環(huán)語句開始
for(j=0;j<60;j++)//for循環(huán)語句開始
{;}
reset()}//兩個for循環(huán)體
}//delay函數(shù)結(jié)束
/*-----------------------------寫指令到LCM子函數(shù)-------------------------------*/
voidWriteCommandLCM(ucharWCLCM,ucharBusyC)/*函數(shù)名為WriteCommandLCM的寫指令到LCM子函數(shù)。定義WCLCM、BusyC為無符號字符型變量*/
{//WriteCommandLCM函數(shù)開始
if(BusyC)ReadStatusLCM();/*若BusyC為"1",則調(diào)用ReadStatusLCM子函數(shù)進(jìn)行忙檢測*/
DATAPORT=WCLCM;//將變量WCLCM中的指令傳送至P1口
LCM_RS=0;//選中指令寄存器
LCM_RW=0;//寫模式
LCM_EN=0;//置LCM_EN端為低電平
LCM_EN=0;//置LCM_EN端為低電平,延時一會兒
LCM_EN=1;//置LCM_EN端為高電平,寫入使能
}//WriteCommandLCM函數(shù)結(jié)束
/*----------------------------寫數(shù)據(jù)到LCM子函數(shù)-------------------------------*/
voidWriteDataLCM(ucharWDLCM)/*函數(shù)名為WriteDataLCM的寫數(shù)據(jù)到LCM子函數(shù)。定義WDLCM為無符號字符型變量*/
{//WriteDataLCM函數(shù)開始
ReadStatusLCM();//調(diào)用ReadStatusLCM子函數(shù)檢測忙信號
DATAPORT=WDLCM;//將變量WDLCM中數(shù)據(jù)傳送至P1口
LCM_RS=1;//選中數(shù)據(jù)寄存器
LCM_RW=0;//寫模式
LCM_EN=0;//置LCM_EN端為低電平
LCM_EN=0;//置LCM_EN端為低電平,延時一會兒
LCM_EN=1;//置LCM_EN端為高電平,寫入使能
}//WriteDataLCM函數(shù)結(jié)束
/*--------------------------------讀數(shù)據(jù)到MCU子函數(shù)---------------------------*/
/*ucharReadDataLCM(void)//函數(shù)名為ReadDataLCM的讀數(shù)據(jù)到MCU子函數(shù)
{//ReadDataLCM函數(shù)開始
LCM_RS=1;//選中數(shù)據(jù)寄存器
LCM_RW=1;//讀模式
LCM_EN=0;//置LCM_EN端為低電平
LCM_EN=0;//置LCM_EN端為低電平,延時一會兒
LCM_EN=1;//置LCM_EN端為高電平,讀使能
return(DATAPORT);//返回P1口的內(nèi)容
}*///ReadDataLCM函數(shù)結(jié)束

/*--------------------------------讀狀態(tài)到MCU子函數(shù)-----------------------------*/
ucharReadStatusLCM(void)//函數(shù)名為ReadStatusLCM的讀狀態(tài)到MCU子函數(shù)
{//ReadStatusLCM函數(shù)開始
DATAPORT=0xFF;//置P1口為全1
LCM_RS=0;//選中指令寄存器
LCM_RW=1;//讀模式
LCM_EN=0;//置LCM_EN端為低電平
LCM_EN=0;//置LCM_EN端為低電平,延時一會兒
LCM_EN=1;//置LCM_EN端為高電平,讀使能
while(P1&Busy);/*檢測忙信號。當(dāng)P1口內(nèi)容與Busy(80H)相與后不為零時,程序原地踏步*/
return(DATAPORT);//返回P1口的內(nèi)容
}//ReadStatusLCM函數(shù)結(jié)束

/*--------------------------LCM初始化子函數(shù)----------------------------*/
voidInitLcd()//函數(shù)名為InitLcd的LCM初始化子函數(shù)
{//InitLcd函數(shù)開始
WriteCommandLCM(0x38,1);//8位數(shù)據(jù)傳送,2行顯示,5*7字形,檢測忙信號
WriteCommandLCM(0x08,1);//關(guān)閉顯示,檢測忙信號
WriteCommandLCM(0x01,1);//清屏,檢測忙信號
WriteCommandLCM(0x06,1);//顯示光標(biāo)右移設(shè)置,檢測忙信號
WriteCommandLCM(0x0c,1);//顯示屏打開,光標(biāo)不顯示、不閃爍,檢測忙信號
}//InitLcd函數(shù)結(jié)束

/*-------------------顯示指定座標(biāo)的一個字符子函數(shù)---------------------------*/
voidDisplayOneChar(ucharX,ucharY,ucharDData)
{
Y&=1;
X&=15;
if(Y)X|=0x40;
X|=0x80;
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}

/*--------------------顯示指定座標(biāo)的一串字符子函數(shù)----------------------*/
voidDisplayListChar(ucharX,ucharY,ucharcode*DData)
{
ucharListLength=0;
Y&=0x1;
X&=0xF;
while(X<=15)
{
DisplayOneChar(X,Y,DData[ListLength]);
ListLength++;
X++;
}
}
//=================================================
voidinit_timer0(void)//定時器T0初始化
{
TMOD=0x01;
TH0=-(50235/256);
TL0=-(50235%256);
TR0=1;
ET0=1;EA=1;
}
//==================================================
voidtime_zd0(void)interrupt1using1//定時器T0中斷子函數(shù)
{
TH0=-(50235/256);
TL0=-(50235%256);
deda++;cnt++;
if(deda>=20){sec++;deda=0;}
if(sec>=60){min++;sec=0;}
if(min>=60){hour++;min=0;}
if(hour>=24){hour=0;}
if(cnt>=6)cnt=0;
key();//掃描鍵盤
}

//==================================
voidfun0(void)//液晶顯示子函數(shù)0
{
WriteCommandLCM(0x0c,1);//顯示屏打開,光標(biāo)不顯示、不閃爍,檢測忙信號
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
//===============================
DisplayOneChar(3,0,hour/10+0x30);//液晶上顯示小時
DisplayOneChar(4,0,hour%10+0x30);
//=========================
DisplayOneChar(6,0,min/10+0x30);//液晶上顯示分
DisplayOneChar(7,0,min%10+0x30);
//==============================
DisplayOneChar(9,0,sec/10+0x30);//液晶上顯示秒
DisplayOneChar(10,0,sec%10+0x30);
//=================================
DisplayOneChar(4,1,T/10+0x30);//液晶上顯示設(shè)定的溫度值
DisplayOneChar(5,1,T%10+0x30);
//=================================
DisplayOneChar(11,1,temp1/10+0x30);//液晶上顯示測得的溫度值
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2+0x30);
//================================
if(ON_OFF==0)//若控溫標(biāo)志為0
{
DisplayOneChar(14,0,0x4f);//液晶上顯示不控溫的圖標(biāo)
DisplayOneChar(15,0,0x46);
}
else
{
DisplayOneChar(14,0,0x4f);//否則液晶上顯示控溫的圖標(biāo)
DisplayOneChar(15,0,0x4e);
if(outflag==1)DisplayOneChar(0,0,0x7c);
elseDisplayOneChar(0,0,0xef);
}
//============================

}
/*******************************************/
voidfun1(void)//液晶顯示子函數(shù)1
{
WriteCommandLCM(0x0c,1);//顯示屏打開,光標(biāo)不顯示、不閃爍,檢測忙信號
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
//=========================
DisplayOneChar(6,0,min/10+0x30);
DisplayOneChar(7,0,min%10+0x30);
//==============================
DisplayOneChar(9,0,sec/10+0x30);
DisplayOneChar(10,0,sec%10+0x30);
//=================================
DisplayOneChar(4,1,T/10+0x30);
DisplayOneChar(5,1,T%10+0x30);
//=================================
DisplayOneChar(11,1,temp1/10+0x30);
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2+0x30);
//=================================
WriteCommandLCM(0x0f,1);//顯示屏打開,光標(biāo)顯示、閃爍,檢測忙信號
DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);
}
/********************************************/
voidfun2(void)//液晶顯示子函數(shù)2
{
WriteCommandLCM(0x0c,1);//顯示屏打開,光標(biāo)不顯示、不閃爍,檢測忙信號
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
//=========================
DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);
//=================================
DisplayOneChar(9,0,sec/10+0x30);
DisplayOneChar(10,0,sec%10+0x30);
//=================================
DisplayOneChar(4,1,T/10+0x30);
DisplayOneChar(5,1,T%10+0x30);
//=================================
DisplayOneChar(11,1,temp1/10+0x30);
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2+0x30);
//===================================
WriteCommandLCM(0x0f,1);//顯示屏打開,光標(biāo)顯示、閃爍,檢測忙信號
DisplayOneChar(6,0,min/10+0x30);
DisplayOneChar(7,0,min%10+0x30);
}
/***************************************/
voidfun3(void)//液晶顯示子函數(shù)3
{
WriteCommandLCM(0x0c,1);//顯示屏打開,光標(biāo)不顯示、不閃爍,檢測忙信號
DisplayListChar(0,0,str0);
DisplayListChar(0,1,str1);
//=========================
DisplayOneChar(3,0,hour/10+0x30);
DisplayOneChar(4,0,hour%10+0x30);
//===============================
DisplayOneChar(6,0,min/10+0x30);
DisplayOneChar(7,0,min%10+0x30);
//=================================
DisplayOneChar(9,0,sec/10+0x30);
DisplayOneChar(10,0,sec%10+0x30);
//=================================
DisplayOneChar(11,1,temp1/10+0x30);
DisplayOneChar(12,1,temp1%10+0x30);
DisplayOneChar(14,1,temp2+0x30);
//=================================
WriteCommandLCM(0x0f,1);//顯示屏打開,光標(biāo)顯示、閃爍,檢測忙信號
DisplayOneChar(4,1,T/10+0x30);
DisplayOneChar(5,1,T%10+0x30);
}
/************************************/
voidkey(void)//掃描鍵盤
{ucharxx;//局部變量
P2=0xff;
if(P2!=0xff)
{delay(10);
if(P2!=0xff)
{xx=P2;
switch(xx)//根據(jù)按鍵狀態(tài),調(diào)用不同的子函數(shù)
{
case0xfe:set_adj();break;//"MS"鍵按下,調(diào)用set_adj()子函數(shù)
case0xfd:inc_key();break;//"+"鍵按下,調(diào)用inc_key()子函數(shù)
case0xfb:dec_key();break;//"-"鍵按下,調(diào)用dec_key()子函數(shù)
case0xf7:ON_OFF=!ON_OFF;break;//"ON/OFF"鍵按下,ON_OFF標(biāo)志取反
default:break;
}
}
}
}
/************************************/
voidset_adj(void)//設(shè)定工作模式子函數(shù)
{
if(cnt==5)
{set++;
if(set>=4)set=0;
}
}
/***************************************/
voidinc_key(void)//按鍵加法子函數(shù)
{
if(cnt==5)
{
switch(set)
{
case0:if(P2==0xf7)ON_OFF=!ON_OFF;break;
case1:hour++;if(hour>=23)hour=23;break;
case2:min++;if(min>=59)min=59;break;
case3:T++;if(T>=99)T=99;break;
default:break;
}
}
}
/***************************************/
voiddec_key(void)//按鍵減法子函數(shù)
{
if(cnt==5)
{
switch(set)
{
case0:if(P2==0xf7)ON_OFF=!ON_OFF;break;
case1:hour--;if(hour<=0)hour=0;break;
case2:min--;if(min<=0)min=0;break;
case3:T--;if(T<=1)T=1;break;
default:break;
}
}
}
/***************************************/
/*****************************************/
voiddelay15us(void)//延時15微秒子函數(shù)
{
uchari;
for(i=0;i<4;i++);
}
//*************************************************
voiddelay60us(void)//延時60微秒子函數(shù)
{
uchari;
for(i=0;i<15;i++);
}
//***************************************************
voidwrite0TS(void)//寫DS18B20數(shù)據(jù)位0
{
TSOR=1;
TSOR=0;
delay15us();delay15us();delay15us();delay15us();
TSOR=1;
_nop_();
_nop_();
}
//********************************************************
voidwrite1TS(void)//寫DS18B20數(shù)據(jù)位1
{
TSOR=1;
TSOR=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
TSOR=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
delay15us();delay15us();delay15us();
}
//******************************
bitreadTS(void)//讀DS18B20數(shù)據(jù)位
{
bitb;
TSOR=1;
TSOR=0;
_nop_();_nop_();_nop_();_nop_();
TSOR=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
b=TSOR;
delay15us();delay15us();delay15us();
_nop_();_nop_();
returnb;
}
//*************************************
voidresetTS(void)//復(fù)位DS18B20
{uchari;
TSOR=1;
TSOR=0;
for(i=0;i<8;i++)delay60us();
TSOR=1;
while(TSOR);
for(i=0;i<8;i++)delay60us();
}
//***************************************
voidwriteBTS(ucharbyte)//寫1字節(jié)
{uchari;
for(i=0;i<8;i++)
{
if(byte&0x01)
write1TS();
else
write0TS();
byte=byte>>1;
}
}
//****************************************
ucharreadBTS(void)//讀1字節(jié)
{uchari,j;
bitb;
j=0;
for(i=0;i<8;i++)
{
b=readTS();
if(b)j+=1;
j=_cror_(j,1);
}
returnj;
}
//************************************************
voidinitTS(void)//初始化DS18B20
{
resetTS();
writeBTS(0xCC);
writeBTS(0x4e);
writeBTS(0x64);
writeBTS(0x8a);
writeBTS(0x1f);
}
//******************************************************
voidgettempTS(void)//讀取測得的環(huán)境溫度
{
resetTS();
writeBTS(0xcc);
writeBTS(0x44);
delay(200);
resetTS();
writeBTS(0xcc);
writeBTS(0xbe);
temp2=readBTS();
temp1=readBTS();
readBTS();readBTS();readBTS();readBTS();
readBTS();readBTS();readBTS();
temp1=temp1<<4;
temp1+=(temp2&0xf0)>>4;
temp2=(temp2&0x0f)?5:0;
}

//********主函數(shù)*********
voidmain(void)
{
delay(500);//延時500ms,等電源穩(wěn)定
InitLcd();//LCM初始化
init_timer0();//初始化定時器T0
DisplayListChar(0,0,str0);//顯示預(yù)定行
DisplayListChar(0,1,str1);
initTS();//初始化DS18B20
reset()
for(;;)
{
//========================
switch(set)//LCD根據(jù)工作模式進(jìn)行顯示
{
case0:fun0();break;//正常工作顯示
case1:fun1();break;//調(diào)整時顯示
case2:fun2();break;//調(diào)整分顯示
case3:fun3();break;//設(shè)置控溫值顯示
default:break;
}
delay(300);
gettempTS();//讀取測得的環(huán)境溫度
if(ON_OFF==1)//若控溫標(biāo)志為1,控制壓縮機(jī)動作
{
if(temp1>=T+1){delay(1000);//
if(temp1>=T+1){outflag=1;OUT=0;}//測得的溫度大于等于控溫值+1度時,
//壓縮機(jī)啟動致冷
}
if(temp1if(temp1//壓縮機(jī)停止工作
}
}
else//否則控溫標(biāo)志為0,壓縮機(jī)停止工作
{outflag=0;OUT=1;}
}
}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

7月29日消息,LG Display已將其在美國的70項LCD液晶顯示器相關(guān)專利轉(zhuǎn)讓給三星顯示,值得注意的是,三星顯示已于三年前退出LCD業(yè)務(wù)。

關(guān)鍵字: LCD 三星

HT16K24操作電壓為2.4V~5.5V,內(nèi)建I2C通信接口,提供三種LCD顯示與按鍵模式:24SEG × 4COM + 24 KEY;22SEG × 6COM + 22 KEY;20SEG × 8COM + 20 K...

關(guān)鍵字: LCD MCU 蜂鳴器

離線GPS工具:跟蹤、保存和查找具有距離和方位的航路點——沒有網(wǎng)絡(luò),沒有云,您的數(shù)據(jù),您的規(guī)則。

關(guān)鍵字: GPS設(shè)備 LCD 微控制器 Arduino Uno

在技術(shù)上,LCD和OLED各有其獨特之處。液晶電視通過控制液態(tài)晶體實現(xiàn)圖像顯示,其原理是在兩片玻璃基板中夾入液態(tài)晶體,通過細(xì)小的電線控制水晶分子的方向。而OLED憑借自發(fā)光二極管帶來更優(yōu)的視角與色彩表現(xiàn),其RGB色彩信號...

關(guān)鍵字: OLED LCD

佛山 2025年5月28日 /美通社/ -- 5月27日,第29屆中國國際廚房、衛(wèi)浴設(shè)施展覽會(KBC)在上海新國際博覽中心開幕。恒潔作為衛(wèi)浴行業(yè)的領(lǐng)軍者與品質(zhì)生活方式品牌的代表,亮相W2館B03展館,以“總有美好在此...

關(guān)鍵字: 沉浸式體驗 溫度 MIDDOT LED

北京 2025年4月27日 /美通社/ -- 日前,元腦InManage數(shù)據(jù)中心智能管理平臺全面升級,打通IT基礎(chǔ)設(shè)施管理系統(tǒng)與動力環(huán)境監(jiān)控系統(tǒng),實現(xiàn)雙平臺統(tǒng)一納管,構(gòu)建覆蓋數(shù)據(jù)中心環(huán)境參數(shù)和服務(wù)器關(guān)鍵數(shù)據(jù)的全域數(shù)據(jù)池...

關(guān)鍵字: 溫度 智能管理 GE AN

雙鎖系統(tǒng),通過鍵盤輸入密碼開門,客人來了用短信開門

關(guān)鍵字: LCD 雙鎖系統(tǒng) L293D 變壓器

在汽車顯示系統(tǒng)領(lǐng)域,TFT LCD顯示屏目前是車載顯示面板的主流選擇。與此同時,OLED和micro-LED顯示屏也逐漸吸引了市場的廣泛關(guān)注。為了適應(yīng)不同的顯示技術(shù),我們需要開發(fā)相應(yīng)的電源技術(shù)。TFT LCD顯示屏通常使...

關(guān)鍵字: LCD OLED micro-LED

如今,汽車行業(yè)對先進(jìn)顯示屏的需求空前高漲,亟需能夠?qū)崿F(xiàn)更大尺寸、更高亮度、曲面設(shè)計、更高分辨率和更高對比度的解決方案。與此同時,各類新型車載顯示屏也日益受到青睞。目前,TFT LCD是汽車平板顯示技術(shù)的主流選擇。OLED...

關(guān)鍵字: LCD OLED micro-LED

大家好,歡迎回來。在這個項目中,我們將學(xué)習(xí)如何使用鍵盤和LCD顯示制作一個安全的基于Arduino的門鎖。你可以用它來保護(hù)你的辦公室、房間或家里的保險箱。要鎖門和開鎖,你需要在安全系統(tǒng)中輸入密碼。這確保了只有經(jīng)過授權(quán)的人...

關(guān)鍵字: 鍵盤 LCD Arduino 電子門鎖
關(guān)閉