欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
ds18b20 lcd1602顯示單片機源代碼
[打印本頁]
作者:
LJT520
時間:
2017-3-22 19:42
標題:
ds18b20 lcd1602顯示單片機源代碼
ds18b20 lcd1602顯示
0.png
(49.16 KB, 下載次數: 28)
下載附件
2017-3-23 02:31 上傳
單片機源代碼:
# include <reg52.h>
# include <intrins.h>
# define uchar unsigned char
# define uint unsigned int //宏定義
void delay_50us(uint t); //延時函數
void write_com(uchar com); //LCD寫指令函數
void write_data(uchar dat); //LCD寫數據函數
void init(void); //LCD初始化函數
void write_one_byte(uchar dat); //向DS18B20寫入一個字節
uchar read_one_byte(); //從DS18B20讀出一字節
void init_ds18b20(); //DS18b20初始化
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
sbit DQ=P3^7; //定義按鍵
uchar temph,templ; //申明溫度變量
uchar array[4]; //申明數組變量
void delay_50us(uint t) //延時函數
{
uchar j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void write_com(uchar com) //LCD寫指令函數
{
e=0;
rs=0;
rw=0;
P0=com;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
void write_data(uchar dat) //LCD寫數據函數
{
e=0;
rs=1;
rw=0;
P0=dat;
delay_50us(10);
e=1;
delay_50us(20);
e=0;
}
void init(void) //LCD初始化函數
{
delay_50us(300);
write_com(0x38);
delay_50us(100);
write_com(0x38);
delay_50us(100);
write_com(0x38);
write_com(0x38);
write_com(0x08);
write_com(0x01);
write_com(0x06);
write_com(0x0c);
}
void init_ds18b20() //DS18b20初始化
{
uint i,q;
DQ=1;
_nop_();
DQ=0;
i=70;
while(i--);
DQ=1;
i=0;
q=DQ;
delay_50us(2);
}
void write_one_byte(uchar dat)//向DS18B20寫入一個字節
{
uint i, j;
for(j=0; j<8; j++)
{
DQ=0;
i++;
DQ=dat&0x01;
i=6;
while(i--);
DQ=1;
dat >>= 1;
}
}
uchar read_one_byte()//從DS18B20讀出一字節
{
uchar dat;
uint i, j;
for(j=8; j>0; j--)
{
DQ=0; //每寫入一位數據之前先把總線拉低1us
i++;
DQ=dat&0x01; //然后寫入一個數據,從最低位開始
i=6;
while(i--); //延時68us,持續時間最少60us
DQ=1; //然后釋放總線,至少1us給總線恢復時間才能接著寫入第二個數值
dat>>=1;
}
return dat;
}
void main() //主函數
{
int TEMP; //聲明溫度變量
init(); //液晶初始化
while(1)
{
init_ds18b20(); //ds18b20初始化
write_one_byte(0xcc); //跳過ROM操作命令
write_one_byte(0x44); //溫度轉換命令
init_ds18b20(); //ds18b20初始化
write_one_byte(0xcc); //跳過ROM操作命令
write_one_byte(0xbe); //發送讀取溫度命令
templ=read_one_byte(); //讀取溫度值共16位,先讀低字節
temph=read_one_byte(); //再讀高字節
TEMP=temph; //高8位賦予返回值
TEMP <<= 8; //左移8位
TEMP|=templ; //與低8位
if((temph&0xf8)==0xf8) //如果高8位為0
{
write_com(0x80+0x00); //寫地址 80表示初始地址
write_data('-'); //顯示負號
TEMP=TEMP-1;
TEMP=~TEMP; //負數的補碼是原碼取反,然后再加1。
}
else
{
write_com(0x80+0x00); //寫地址 80表示初始地址
write_data('+'); //顯示+
}
TEMP=TEMP*0.0625*10+0.5; //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
//后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
//算由?.5,還是在小數點后面。
array[0]=TEMP/1000; //百位
array[1]=(TEMP%1000)/100; //十位
array[2]=(TEMP%100)/10; //個位
array[3]=TEMP%10; //小數
…………余下代碼請下載附件…………
復制代碼
下載:
ds18b20顯示溫度.zip
(22.03 KB, 下載次數: 49)
2017-3-22 19:41 上傳
點擊文件名下載附件
ds18b20 lcd顯示
下載積分: 黑幣 -5
作者:
guo1373766226
時間:
2017-12-12 22:30
新人學習,下載看看。
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1