久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3248|回復: 3
打印 上一主題 下一主題
收起左側

求做一份帶串口通信的單片機溫度監測儀器設計,帶注釋的!

[復制鏈接]
跳轉到指定樓層
樓主
ID:335604 發表于 2018-5-26 20:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
設計說明和要求:
①使用51單片機為核心設計一帶串口通信的溫度監測儀器;溫度傳感器要求使用DS18B20,每隔2s左右采集一次環境溫度,精度精確到小數點后1位;溫度上限值默認設置為32度;使用液晶器件LM016L顯示采集的溫度和溫度上限值,第1行顯示溫度,第2行顯示溫度上限值;當采集的溫度超過溫度上限值時,當進行聲光報警,點亮紅色LED燈,并控制蜂鳴器發出蜂鳴聲;當儀器通過串口接收到字符“A”時,儀器通過串口發送內容格式為“DD.DTDDU”的字符串,其中第1-4位“DD.D”為采集的溫度,第5位為字符“T”,為溫度標識,第6-7位“DD”為溫度上限值,第8位為字符“U”,為溫度上限值標識,比如“28.2T32U”,表示采集的溫度為28.2度,當前設置的溫度上限值為32度。
③使用Proteus(建議版本:Proteus-7.8sp2,提供,使用方法參考文檔:Proteus 7 Professional 51單片機入門教程.pdf,提供)搭建儀器的硬件框架;使用C語言。使用虛擬串口軟件(建議軟件:vspdxp虛擬串口破解版,提供)虛擬串口線;使用串口調試助手(建議軟件:串口調試助手V2.2.exe,提供)與儀器進行仿真調試。

最佳答案

查看完整內容

#include #include #define uchar unsigned char #define uint unsigned int #define LCDIO P0 //1602數據口 sbit DQ=P3^7;//ds18b20與單片機連接口 sbitrs=P2^0; //1602數據命令選擇引腳 sbitrd=P2^1; //讀寫選擇 sbitlcden=P2^2; //1602選通引腳 floatf_temp; //浮點型溫度值 uinttvalue;//溫度值 uchartflag; uchar code table[]= {"The temperature "}; //每行顯示16個字符 uchar co ...
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:336165 發表于 2018-5-26 20:38 | 只看該作者
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

#define     LCDIO      P0  //1602數據口
sbit DQ=P3^7;//ds18b20與單片機連接口

sbitrs=P2^0;  //1602數據命令選擇引腳
sbitrd=P2^1;   //讀寫選擇
sbitlcden=P2^2;   //1602選通引腳

floatf_temp; //浮點型溫度值
uinttvalue;//溫度值
uchartflag;

uchar code table[]=   {"The temperature "};    //每行顯示16個字符
uchar code table1[]=  {"is:  000.0C wfu"};

uchar data disdata[5];

void delay(uint z) //短延時
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(uchar com)   //1602寫命令子程序
{
rs=0;    //RS是數據命令選擇短,高電平寫數據,低電平寫命令
rd=0;    //RD是讀寫選擇短,高電平讀,低電平寫
lcden=0; //1602選通端,高電平選通,低電平禁止
    LCDIO=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchar date) //1602寫數據子程序
{
rs=1; //RS是數據命令選擇短,高電平寫數據,低電平寫命令
rd=0; //RD是讀寫選擇短,高電平讀,低電平寫
lcden=0; //1602選通端,高電平選通,低電平禁止
    LCDIO=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()           //1602初始化程序
{
ucharnum;
lcden=0;

write_com(0x38);  //0011 1000B,功能模式設置,設置為8為數據口,兩行顯示,5*7點陣
write_com(0x0c);  //0000 1011B,顯示開及光標設置,關顯示,顯示光標,光標閃爍
write_com(0x06);  //0000 0110B,顯示光標移動設置,讀或寫一個字符,地址指針減一且光標減一,寫一個字符屏幕顯示不移動
write_com(0x01);  //0000 0001B,顯示清屏,數據指針和所有顯示清屏
write_com(0x80);  //1000 000B,關閉顯示
delay(5);
write_com(0x80);  //1000 000B,設置為2行顯示,寫入第一行字符的地址,第一行地址是00-2F
for(num=0;num<16;num++)
       {
write_date(table[num]); //寫入第一行數據
delay(5);
       }
write_com(0x80+0x40);   //1100 0000B,設置為2行顯示,寫入第二行字符的地址,第而行地址是40-67
for(num=0;num<16;num++) //寫入第二行數據
       {
write_date(table1[num]);//寫入第二行數據
delay(5);
       }

}
void delay_18B20(unsignedinti)//延時1微秒
{
while(i--);
}

void ds1820rst()      /*ds1820復位*/
//DS18B20要求數據線拉低500US即可復位。
{  unsignedchar x=0;
     DQ = 1;          //DQ復位
     delay_18B20(4);  //延時
     DQ = 0;          //DQ拉低
     delay_18B20(100); //精確延時大于480us
     DQ = 1;          //拉高
     delay_18B20(40);  
   }

uchar ds1820rd()/*讀數據*/
{ unsignedchar i=0;
unsignedchardat = 0;
for (i=8;i>0;i--)
     {   DQ = 0; //給脈沖信號
dat>>=1;
         DQ = 1; //給脈沖信號
if(DQ)
dat|=0x80;
         delay_18B20(10);
     }
return(dat);
  }

void ds1820wr(ucharwdata)/*寫數據*/
  {unsignedchar i=0;
for (i=8; i>0; i--)
{ DQ = 0;
     DQ = wdata&0x01;
     delay_18B20(10);
     DQ = 1;
wdata>>=1;
   }
}
read_temp()/*讀取溫度值并轉換*/
{uchara,b;
ds1820rst();   

   ds1820wr(0xCC);//跳過ROM
   _nop_();
//ds1820wr(0x4E);//寫EEPROM,發出向內部RAM的3、4 字節寫上、下限溫度數據命令,緊跟該命令之后,是傳送兩字節的數據
// ds1820wr(0x00);//Th
//ds1820wr(0x00);//Tl


ds1820wr(0x7f);//12 bits溫度分辨率x1f, 0x3f, 0x5f ,0x7f溫度讀數分辨率分別對應0.5, 0.25, 0.125 ,0.0625

//ds1820wr(0xcc);    //跳過讀EPROM序列
//ds1820wr(0x48);   將RAM 中第3 、4 字節的內容復制到EEPROM中
ds1820rst();
   ds1820wr(0xcc);//*跳過讀序列號*/
  _nop_();
  ds1820wr(0x44);//*啟動溫度轉換*/

ds1820rst();  
  ds1820wr(0xcc);//*跳過讀序列號*/
  ds1820wr(0xbe);//*讀取溫度*/
  a=ds1820rd();
  b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
   {tvalue=~tvalue+1;
tflag=1;
   }
//tvalue=tvalue*(0.425);//溫度值擴大10倍,精確到1位小數
f_temp=tvalue*(0.0625);    // 溫度在寄存器中為12位,分辨率為0.0625
tvalue=f_temp*10+0.5;    //乘以10表示小數點后面只取1位,加0.5時四舍五入
//f_temp=f_temp+0.05;
//f_temp=tvalue*(0.0625);
//tvalue=f_temp*100+(tvalue>0?0.5:-0.5);


return(tvalue);
  }


void ds1820disp()//溫度值顯示
{ ucharflagdat;
disdata[0]=tvalue/1000+0x30;//百位數
disdata[1]=tvalue%1000/100+0x30;//十位數
disdata[2]=tvalue%100/10+0x30;//個位數
disdata[3]=tvalue%10+0x30;//小數位

if(tflag==0)
flagdat=0x20;//正溫度不顯示符號
else
flagdat=0x2d;//負溫度顯示負號:-

if(disdata[0]==0x30)
       {disdata[0]=0x20;//如果百位為0,不顯示
if(disdata[1]==0x30)
         {disdata[1]=0x20;//如果百位為0,十位為0也不顯示
         }
       }


write_com(0x80+0x44);      //1100 0000B,設置為2行顯示,寫入第二行字符的地址,第而行地址是40-67
write_date(flagdat);//顯示符號位
write_com(0x80+0x45);
write_date(disdata[0]);//顯示百位
write_com(0x80+0x46);
write_date(disdata[1]);//顯示十位
write_com(0x80+0x47);
write_date(disdata[2]);//顯示個位
write_com(0x80+0x48);
write_date(0x2e);//顯示小數點
write_com(0x80+0x49);
write_date(disdata[3]);//顯示小數位
write_com(0x80+0x4a);
write_date('C');
   }

void main()
{   
init();

read_temp();//讀取溫度
    ds1820disp();//顯示
while(1)
    {

read_temp();//讀取溫度
     ds1820disp();//顯示

    }
}
回復

使用道具 舉報

板凳
ID:335604 發表于 2018-5-27 11:54 | 只看該作者
優雅的刺猬 發表于 2018-5-26 23:01
#include
#include
#define uchar unsigned char

運行有錯誤呀,有些定義沒定義到,能順便把proteus圖也發一下嗎
回復

使用道具 舉報

地板
ID:308173 發表于 2018-5-28 15:23 來自觸屏版 | 只看該作者
郭天祥寫的那本51單片機C語言教程里面有這個里面有這個
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费av手机在线观看 | 国产精品3区 | 一区二区三区四区在线 | 久久综合久 | 曰韩三级| 婷婷久久一区 | 三级黄色片在线播放 | 色成人免费网站 | 国产成人精品午夜视频免费 | 亚洲一区二区三区在线 | 欧美激情国产日韩精品一区18 | 91av视频在线播放 | 伊人久久免费 | 日本天天操 | 中文字幕91 | jlzzjlzz国产精品久久 | 97久久精品 | h片免费看 | h片在线播放 | 国产成人在线看 | 久久久久久综合 | 老头搡老女人毛片视频在线看 | 国产精品久久久久久久久久久久 | aa级毛片毛片免费观看久 | 国产亚洲一区二区三区 | 亚洲aⅴ| 自拍偷拍中文字幕 | 亚洲天堂一区二区 | 97人人澡人人爽91综合色 | 欧美一级在线视频 | 成人1区| 午夜国产| 51ⅴ精品国产91久久久久久 | 久久精品视频网站 | 成人一区在线观看 | 99精品视频免费观看 | 久久久久国产一区二区三区四区 | 久久国产精品久久久久久久久久 | 在线中文视频 | 中文字幕 亚洲一区 | 亚洲成av人片在线观看无码 |