標題: 基于單片機的溫度計仿真程序設計 達到門限溫度亮燈 [打印本頁]
作者: 2020168020 時間: 2020-7-20 20:51
標題: 基于單片機的溫度計仿真程序設計 達到門限溫度亮燈
本帖是關于單片機的溫度計顯示
傳感器用的是ds18b20,
采用數碼管動態顯示,可顯示3位數的溫度,第二位帶小數點
本實驗還包括蜂鳴器報警,溫度高于某值,蜂鳴器報警
附件包括仿真原理圖,proteus工程文件夾,txt格式的代碼
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
熟練掌握C語言的設計和調試方法,了解與掌握數字溫度傳感器DS18B20的工作原理。
利用數字溫度傳感器DS18B20與單片機結合來測量溫度控制器使用單片機AT89C51,測溫傳感器使用DS18B20,用3位LED數碼管以串口傳送數據,實現溫度顯示。且設置一個門限溫度,當傳感器溫度達到門限溫度后,發出提醒。
要求完成實驗內容,LED數碼管成功顯示示數。設置報警門限,若溫度超限蜂鳴器報警。

圖1 硬件電路圖

圖 1未達門限溫度截過圖

圖 2達到門限溫度結果圖
實驗總結:通過這次實驗,我了解了DS13B20的基本原理和編程方法,更加熟悉了多位數碼管的動態顯示,自己的編寫代碼的能力也增強了許多。但這次實驗也反映了自己的一些問題,編寫基本的代碼還可以,稍微有些難度的代碼就編寫不出來了,以后會多加練習,克服這個問題。
單片機源程序如下:
- /* Main.c file generated by New Project wizard
- *
- * Created: 周一 7月 6 2020
- * Processor: AT89C52
- * Compiler: Keil for 8051
- */
- #include <reg51.h>
- #include <stdio.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit X=P2^6;
- sbit Y=P2^7;
- sbit Z=P2^3;
- sbit DQ=P2^2;
- uchar code Data[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void delay(uint count) //delay 延時
- {
- uint i;
- while(count)
- {
- i=200;
- while(i>0)
- i--;
- count--;
- }
- }
- void dsreset(void) //重置、初始化命令
- {
- uint i;
- DQ=0; //賦值
- i=103; //延時480us-960us
- while(i>0)i--;
- DQ=1; //賦值
- i=4;
- while(i>0)i--; //延時15-60us
- }
- bit tmpreadbit(void) //讀一位
- {
- uint i;
- bit dat;
- DQ=0;
- i++; //i++ for delay 延時1us-15us
- DQ=1;
- i++;i++; //釋放總線延時
- dat=DQ; //讀數賦值
- i=8;
- while(i>0)i--;
- return (dat);//返回所獲得讀數
- }
- uchar tmpread(void) //讀一個字節 8Bit
- {
- uchar i,j,dat;
- dat=0;
- for(i=1;i<=8;i++)//連續讀取8位,1字節
- {
- j=tmpreadbit(); //調用讀1位的函數
- dat=(j<<7|(dat>>1)); //讀出的數據最低位在最前面,動腦想如何設計
- }
- return(dat);//返回1字節的讀數
- }
- void tmpwritebyte(uchar dat) //寫一個字節
- {
- uint i;
- uchar j;
- bit testb;//寫入的數
- for(j=1;j<=8;j++)//連續寫8位
- {
- testb=dat&0x01;//思考如何設計每次讀到的1bit
- dat=dat>>1;
- if(testb) //write 1
- {
- DQ=0;//賦值
- i++;i++;
- DQ=1;//賦值
- i=8;while(i>0)i--;
- }
- else //write 0
- {
- DQ=0;//賦值
- i=8;while(i>0)i--;
- DQ=1;//賦值
- i++;i++;
- }
- }
- }
- void tmpchange(void) //DS18B20 轉換溫度
- {
- dsreset();//初始化
- delay(1);
- tmpwritebyte(0xcc);//跳過ROM
- tmpwritebyte(0x44);//轉換溫度
- }
- void tempread(void)
- {
- dsreset(); //寫入相關指令,思考要寫什么指令
- delay(1);
- tmpwritebyte(0xcc);//跳過RON
- tmpwritebyte(0xbe);//讀取暫存器
- }
- uint tmp() //獲得溫度
- {
- float tt;
- uchar a,b;
- uint temp;
- tmpchange();
- tempread();
- a=tmpread();
- b=tmpread();
- temp=b;
- temp<<=8; //two byte compose a int variable
- temp=temp|a;
- tt=temp*0.0625;
- temp=tt*10+0.5;
- return temp;
- }
- void display(uint temp) //顯示程序
- {
- Y=0;
- P0=0xfe;
- Y=1;
- Y=0;
- X=0;
- P0=Data[temp/100];
- X=1;
- X=0;
- delay(1);
- Y=0;
- P0=0xfd;
- Y=1;
- Y=0;
- X=0;
- P0=Data[(temp%100)/10]+0x80;
- X=1;
- X=0;
- delay(1);
-
- Y=0;
- P0=0xfb;
- Y=1;
- Y=0;
- X=0;
- P0=Data[(temp%100)%10];
- X=1;
- X=0;
- delay(1);
- if(temp>=400)
- {
- Z=0;
- }
- else Z=1;
- }
- void main()
- {
- uchar a,temp;
- do
- {
- tmpchange();//溫度轉換
- for(a=10;a>0;a--) //避免閃爍
- {
- display(tmp());//調用顯示函數
- }
- } while(1);
- }
復制代碼
所有資料51hei提供下載:
溫度計設計.zip
(247.08 KB, 下載次數: 36)
2020-7-20 20:50 上傳
點擊文件名下載附件
溫度計設計
下載積分: 黑幣 -5
作者: pan1234 時間: 2021-6-19 14:40
仿真工程是Proteus8.8版本的
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产小视频自拍
|
99亚洲精品|
麻豆av片|
国产一区二区免费在线
|
国产一区二区高清在线
|
午夜视频在线观看网站
|
91在线一区|
婷婷一级片
|
在线视频一区二区
|
成人国产精品免费观看
|
99re视频在线观看
|
久久99精品久久久久子伦
|
欧美另类视频
|
国产精品a久久久久
|
天堂综合|
日韩色综合|
国产女人精品视频
|
91精品欧美久久久久久久
|
国产成人精品久久二区二区
|
久久久无码精品亚洲日韩按摩
|
成人午夜免费视频
|
欧美一级黄色片免费观看
|
国产视频第一页
|
精品国产一区二区国模嫣然
|
激情a|
欧美久久不卡
|
99免费视频
|
国产精品mv在线观看
|
久久99久久98精品免观看软件
|
欧美人妇做爰xxxⅹ性高电影
|
久久久久网站
|
日日噜噜噜夜夜爽爽狠狠视频,
|
久久一区二区三区四区
|
欧美国产亚洲一区二区
|
日韩久久在线
|
中文成人在线
|
国产精品美女久久久久久免费
|
欧美激情欧美激情在线五月
|
九九久久精品
|
怡红院怡春院一级毛片
|
免费小视频在线观看
|