個人原創設計作品,內涵仿真,c與hex文件。c語言白癡,拒絕回答一切有關c的問題。本設計是一款基于DS18B20傳感器的實時體溫測量報警儀,可以貼身舒適得放置在病人身上用以實時檢測體溫,然后將檢測的數據傳到AT89C51單片機進行處理,再用LED屏幕以十進制的方式進行表出。同時還有個警報器模塊,當病人體溫不正常到達臨界值時觸發警報用以提醒。程序具體表現為小于37℃時,綠燈亮;大于37℃時,蜂鳴器工作,紅燈。(51黑電子為原創出處,轉載請注明網址。)得到幫助的小伙伴給個有效回復撒,感謝!!!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include "reg51.h"
- #include "intrins.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define out P0
- #define out1 P2
- #define out2 P3
- sbit DQ=P1^4;
- void delay5(uchar);
- void init_ds18b20(void);
- void writebyte(uchar);
- uchar retemp(void);
- void main (void)//主函數
- {
- uchar i,temp;
- delay5(1000);
- uchar[9]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- uchar xiaoshudian=0x80;
- while(1)
- {
- temp=retemp();
- for(i=0;i<10;i++)//連續掃描數碼管10次
- {
- out=(uchar[temp/10]);
- out1=(uchar[temp%10]||xiaoshudian);
- }
- }
- }
- void delay5(uchar n)//延時5微妙函數
- {
- do
- { _nop_() ;
- _nop_() ;
- _nop_();
- n--;
- }
- while(n);
- }
- void init_ds18b20(void)//對18b20初始化函數
- {
- uchar x=0;
- DQ=0;
- delay5(120);
- DQ =1;
- delay5(16);
- delay5(80);
- }
- uchar readbyte(void)//函數功能:讀取1字節數據
- {
- uchar i=0;
- uchar date=0;
- for(i=8;i>0;i--)
- {
- DQ=0;
- delay5(1) ;
- DQ=1;//15微妙內拉釋放總線
- date>>=1;
- if(DQ)
- date|=0x80;
- delay5(11);
- }
- return(date);}
- void writebyte (uchar dat)//寫1b數據
- {
- uchar i=0;
- for(i=8;i>0;i--)
- {
- DQ=0;
- DQ =dat&0x01;//寫"1"在15微妙內拉低
- delay5(12);//寫"0"拉低60微妙
- DQ=1;
- dat>>=1;
- delay5(5);
- }
- }
- uchar retemp(void)//讀取溫度函數
- {
- uchar a,b,tt;
- uint t;
- init_ds18b20();
- writebyte (0xCC);
- writebyte (0x44);
- init_ds18b20();
- writebyte(0xCC);
- writebyte(0xBE);
- a=readbyte();
- b=readbyte();
- t=b;
- t<<=8;
- t=t|a;
- tt=t*0.0625;
- return(tt);
- }
復制代碼
所有資料51hei提供下載 仿真,c及hex文件:
Desktop.rar
(35.64 KB, 下載次數: 80)
2020-5-16 14:10 上傳
點擊文件名下載附件
仿真,c及hex文件
|