當前位置:首頁 » 課程大全 » 溫度顯示課程設計

溫度顯示課程設計

發布時間: 2021-02-02 03:20:03

課程設計溫度測控儀multsim模擬

用18b20做很簡單啊。
溫度的子程序給你,,你重定義一下介面,主程序已經調用出溫度了,你送到顯示就行了。。

/* 延時t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 對於11.0592M時鍾,約延時1ms */
for (i=0;i<125;i++)
{}
}
}

/* 產生復位脈沖初始化DS18B20 */
void TxReset(void)
{
uint i;
DQ = 0;

/* 拉低約900us */
i = 100;
while (i>0) i--;

DQ = 1; // 產生上升沿
i = 4;
while (i>0) i--;
}

/* 等待應答脈沖 */
void RxWait(void)
{
uint i;
while(DQ);
while(~DQ); // 檢測到應答脈沖
i = 4;
while (i>0) i--;
}

/* 讀取數據的一位,滿足讀時隙要求 */
bit RdBit(void)
{
uint i;
bit b;
DQ = 0;
i++;
DQ = 1;
i++;i++; // 延時15us以上,讀時隙下降沿後15us,DS18B20輸出數據才有效
b = DQ;
i = 8;
while(i>0) i--;
return (b);
}

/* 讀取數據的一個位元組 */
uchar RdByte(void)
{
uchar i,j,b;
b = 0;
for (i=1;i<=8;i++)
{
j = RdBit();
b = (j<<7)|(b>>1);
}
return(b);
}

/* 寫數據的一個位元組,滿足寫1和寫0的時隙要求 */
void WrByte(uchar b)
{
uint i;
uchar j;
bit btmp;
for(j=1;j<=8;j++)
{
btmp = b0x01;
b = b>>1; // 取下一位(由低位向高位)
if (btmp)
{
/* 寫1 */
DQ = 0;
i++;i++; // 延時,使得15us以內拉高
DQ = 1;
i = 8;
while(i>0) i--; // 整個寫1時隙不低於60us
}
else
{
/* 寫0 */
DQ = 0;
i = 8;
while(i>0) i--; // 保持低在60us到120us之間
DQ = 1;
i++;
i++;
}
}
}

/* 啟動溫度轉換 */
void convert(void)
{
TxReset(); // 產生復位脈沖,初始化DS18B20
RxWait(); // 等待DS18B20給出應答脈沖
delay(1); // 延時
WrByte(0xcc); // skip rom 命令
WrByte(0x44); // convert T 命令
}

/* 讀取溫度值 */
void RdTemp(void)
{
TxReset(); // 產生復位脈沖,初始化DS18B20
RxWait(); // 等待DS18B20給出應答脈沖
delay(1); // 延時
WrByte(0xcc); // skip rom 命令
WrByte(0xbe); // read scratchpad 命令
tplsb = RdByte(); // 溫度值低位位元組(其中低4位為二進制的「小數」部分)
tpmsb = RdByte(); // 高位值高位位元組(其中高5位為符號位)
}

void main(void)
{
do
{
delay(1); // 延時1ms
convert(); // 啟動溫度轉換,需要750ms
delay(1000); // 延時1s
RdTemp(); // 讀取溫度
}
while(1);
}

❷ 智能溫度採集和顯示系統課程設計

溫度測量經過二次儀表 現在一般的二次儀表都帶有通訊介面(而且是485介面,比你要的還好些哦)。電纜用帶屏蔽線的就差不多了

❸ 求計算機介面技術課程設計:溫度採集及顯示控制

那要看你所要求的溫度范圍了,如果是-20-100度就沒必要使用AD轉換器了。直接使內用數字溫度探頭如:DS1621,DS1620,DS18B20等。如容果需要溫度范圍比較寬就要用到模擬探頭如PT100。用數字溫度探頭簡單思路:AT89C2051+MC14499+DS18B20即可構成溫度採集及4位數碼管顯示。如果需要模擬探頭比較麻煩,要做信號調理電路使PT100隨溫度的變化輸出連續變化的限定電壓。AT89C2051+TLC1549+MC14499+TLC5615+信號調理構成。帶10位DA輸出,但中間細節部分要你自己做了。

❹ 單片機課程設計 單片機溫度的檢測與顯示的設計

用18b20做很簡單啊。
溫度的子程序給你,,你重定義一下介面,主程序已經調用出溫度了,你送到顯示就行了。。

/* 延時t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 對於11.0592M時鍾,約延時1ms */
for (i=0;i<125;i++)
{}
}
}

/* 產生復位脈沖初始化DS18B20 */
void TxReset(void)
{
uint i;
DQ = 0;

/* 拉低約900us */
i = 100;
while (i>0) i--;

DQ = 1; // 產生上升沿
i = 4;
while (i>0) i--;
}

/* 等待應答脈沖 */
void RxWait(void)
{
uint i;
while(DQ);
while(~DQ); // 檢測到應答脈沖
i = 4;
while (i>0) i--;
}

/* 讀取數據的一位,滿足讀時隙要求 */
bit RdBit(void)
{
uint i;
bit b;
DQ = 0;
i++;
DQ = 1;
i++;i++; // 延時15us以上,讀時隙下降沿後15us,DS18B20輸出數據才有效
b = DQ;
i = 8;
while(i>0) i--;
return (b);
}

/* 讀取數據的一個位元組 */
uchar RdByte(void)
{
uchar i,j,b;
b = 0;
for (i=1;i<=8;i++)
{
j = RdBit();
b = (j<<7)|(b>>1);
}
return(b);
}

/* 寫數據的一個位元組,滿足寫1和寫0的時隙要求 */
void WrByte(uchar b)
{
uint i;
uchar j;
bit btmp;
for(j=1;j<=8;j++)
{
btmp = b&0x01;
b = b>>1; // 取下一位(由低位向高位)
if (btmp)
{
/* 寫1 */
DQ = 0;
i++;i++; // 延時,使得15us以內拉高
DQ = 1;
i = 8;
while(i>0) i--; // 整個寫1時隙不低於60us
}
else
{
/* 寫0 */
DQ = 0;
i = 8;
while(i>0) i--; // 保持低在60us到120us之間
DQ = 1;
i++;
i++;
}
}
}

/* 啟動溫度轉換 */
void convert(void)
{
TxReset(); // 產生復位脈沖,初始化DS18B20
RxWait(); // 等待DS18B20給出應答脈沖
delay(1); // 延時
WrByte(0xcc); // skip rom 命令
WrByte(0x44); // convert T 命令
}

/* 讀取溫度值 */
void RdTemp(void)
{
TxReset(); // 產生復位脈沖,初始化DS18B20
RxWait(); // 等待DS18B20給出應答脈沖
delay(1); // 延時
WrByte(0xcc); // skip rom 命令
WrByte(0xbe); // read scratchpad 命令
tplsb = RdByte(); // 溫度值低位位元組(其中低4位為二進制的「小數」部分)
tpmsb = RdByte(); // 高位值高位位元組(其中高5位為符號位)
}

void main(void)
{
do
{
delay(1); // 延時1ms
convert(); // 啟動溫度轉換,需要750ms
delay(1000); // 延時1s
RdTemp(); // 讀取溫度
}
while(1);
}

❺ 高分跪求溫度測量數控顯示電路課程設計

有老式的東西跟本不用單片機
成品數字溫度計 把探頭和精密可調電內阻分別置於一切換開容關兩端 可調電阻有上拉電源
把開關打到電阻這邊看著溫度顯示調節所選溫度

打到探頭這邊測量實際溫度 使用集成運算放大器判別探頭與可調電阻間電位
當然為了防止頻繁啟動還要做些處理比如延時繼電器

❻ 急求!!!!數字溫度計課程設計

說實話,要完全一樣的現成答案在這里很難的,除非運氣好碰到一個做過類似實例的人就給你了。
這個問題用單片機可以做,用可編程器件和VHDL編程也可以做。這我都會,但是要我花那多時間做好瞭然後用protel99se畫好電路圖給你,這根本不可能,誰搞那麼累啊。

最好的辦法還是自己到網上去搜,下載來改改試試,這樣最快。 網上像數字溫度計,數字頻率計,數字秒錶,數字定時器都很多的。

❼ 關於LCD數字顯示溫度計的課程設計,急,重賞

/*電子時鍾源代碼*/
#include<graphics.h>
#include<stdio.h>
#include<math.h>
#include<dos.h>
#define PI 3.1415926 /*定義常量*/
#define UP 0x4800 /*上移↑鍵:修改時間*/
#define DOWN 0x5000 /*下移↓鍵:修改時間*/
#define ESC 0x11b /*ESC鍵 : 退出系統*/
#define TAB 0xf09 /*TAB鍵 : 移動游標*/
/*函數聲明*/
int keyhandle(int,int); /*鍵盤按鍵判斷,並調用相關函數處理*/
int timeupchange(int); /*處理上移按鍵*/
int timedownchange(int); /*處理下移按鍵*/
int digithour(double); /*將double型的小時數轉換成int型*/
int digitmin(double); /*將double型的分鍾數轉換成int型*/
int digitsec(double); /*將double型的秒鍾數轉換成int型*/
void digitclock(int,int,int ); /*在指定位置顯示時鍾或分鍾或秒鍾數*/
void drawcursor(int); /*繪制一個游標*/
void clearcursor(int);/*消除前一個游標*/
void clockhandle(); /*時鍾處理*/

double h,m,s; /*全局變數:小時,分,秒*/
double x,x1,x2,y,y1,y2; /*全局變數:坐標值*/
struct time t[1];/*定義一個time結構類型的數組*/
main()
{
int driver, mode=0,i,j;
driver=DETECT; /*自動檢測顯示設備*/
initgraph(&driver, &mode, "");/*初始化圖形系統*/
setlinestyle(0,0,3); /*設置當前畫線寬度和類型:設置三點寬實線*/
setbkcolor(0);/*用調色板設置當前背景顏色*/
setcolor(9); /*設置當前畫線顏色*/
line(82,430,558,430);
line(70,62,70,418);
line(82,50,558,50);
line(570,62,570,418);
line(70,62,570,62);
line(76,56,297,56);
line(340,56,564,56); /*畫主體框架的邊直線*/
/*arc(int x, int y, int stangle, int endangle, int radius)*/
arc(82,62,90,180,12);
arc(558,62,0,90,12);
setlinestyle(0,0,3);
arc(82,418,180,279,12);
setlinestyle(0,0,3);
arc(558,418,270,360,12); /*畫主體框架的邊角弧線*/
setcolor(15);
outtextxy(300,53,"CLOCK"); /*顯示標題*/
setcolor(7);
rectangle(342,72,560,360); /*畫一個矩形,作為時鍾的框架*/

setwritemode(0); /*規定畫線的方式。mode=0, 則表示畫線時將所畫位置的原來信息覆蓋*/
setcolor(15);
outtextxy(433,75,"CLOCK");/*時鍾的標題*/
setcolor(7);
line(392,310,510,310);
line(392,330,510,330);
arc(392,320,90,270,10);
arc(510,320,270,90,10); /*繪制電子動畫時鍾下的數字時鍾的邊框架*/
/*繪制數字時鍾的時分秒的分隔符*/
setcolor(5);
for(i=431;i<=470;i+=39)
for(j=317;j<=324;j+=7){
setlinestyle(0,0,3);
circle(i,j,1); /*以(i, y)為圓心,1為半徑畫圓*/
}
setcolor(15);
line(424,315,424,325); /*在運行電子時鍾前先畫一個游標*/
/*繪製表示小時的圓點*/
for(i=0,m=0,h=0;i<=11;i++,h++){
x=100*sin((h*60+m)/360*PI)+451;
y=200-100*cos((h*60+m)/360*PI);
setlinestyle(0,0,3);
circle(x,y,1);
}
/*繪製表示分鍾或秒鍾的圓點*/
for(i=0,m=0;i<=59;m++,i++){
x=100*sin(m/30*PI)+451;
y=200-100*cos(m/30*PI);
setlinestyle(0,0,1);
circle(x,y,1);
}
/*在電子表的左邊列印幫助提示信息*/
setcolor(4);
outtextxy(184,125,"HELP");
setcolor(15);
outtextxy(182,125,"HELP");
setcolor(5);
outtextxy(140,185,"TAB : Cursor move");
outtextxy(140,225,"UP : Time ++");
outtextxy(140,265,"DOWN: Time --");
outtextxy(140,305,"ESC : Quit system!");
outtextxy(140,345,"Version : 2.0");
setcolor(12);
outtextxy(150,400,"Nothing is more important than time!");
clockhandle();/*開始調用時鍾處理程序*/
closegraph(); /*關閉圖形系統*/
return 0; /*表示程序正常結束,向操作系統返回一個0值*/
}

void clockhandle()
{
int k=0,count;
setcolor(15);
gettime(t);/*取得系統時間,保存在time結構類型的數組變數中*/
h=t[0].ti_hour;
m=t[0].ti_min;
x=50*sin((h*60+m)/360*PI)+451; /*時針的x坐標值*/
y=200-50*cos((h*60+m)/360*PI); /*時針的y坐標值*/
line(451,200,x,y);/*在電子表中繪制時針*/

x1=80*sin(m/30*PI)+451; /*分針的x坐標值*/
y1=200-80*cos(m/30*PI); /*分針的y坐標值*/
line(451,200,x1,y1); /*在電子表中繪制分針*/

digitclock(408,318,digithour(h)); /*在數字時鍾中,顯示當前的小時值*/
digitclock(446,318,digitmin(m)); /*在數字時鍾中,顯示當前的分鍾值*/
setwritemode(1);
/*規定畫線的方式,如果mode=1,則表示畫線時用現在特性的線
與所畫之處原有的線進行異或(XOR)操作,實際上畫出的線是原有線與現在規定
的線進行異或後的結果。因此, 當線的特性不變, 進行兩次畫線操作相當於沒有
畫線,即在當前位置處清除了原來的畫線*/
for(count=2;k!=ESC;){ /*開始循環,直至用戶按下ESC鍵結束循環*/
setcolor(12);/*淡紅色*/
sound(500);/*以指定頻率打開PC揚聲器,這里頻率為500Hz*/
delay(700);/*發一個頻率為500Hz的音調,維持700毫秒*/
sound(200);/*以指定頻率打開PC揚聲器,這里頻率為200Hz*/
delay(300);
/*以上兩種不同頻率的音調,可模擬鍾表轉動時的嘀噠聲*/
nosound(); /*關閉PC揚聲器*/
s=t[0].ti_sec;
m=t[0].ti_min;
h=t[0].ti_hour;

x2=98*sin(s/30*PI)+451; /*秒針的x坐標值*/
y2=200-98*cos(s/30*PI); /*秒針的y坐標值*/
line(451,200,x2,y2);
/*繪制秒針*/

/*利用此循環,延時一秒*/
while(t[0].ti_sec==s&&t[0].ti_min==m&&t[0].ti_hour==h)
{ gettime(t);/*取得系統時間*/
if(bioskey(1)!=0){
k=bioskey(0);
count=keyhandle(k,count);
if(count==5) count=1;
}
}
setcolor(15);
digitclock(485,318,digitsec(s)+1);/*數字時鍾增加1秒*/

setcolor(12); /*淡紅色*/
x2=98*sin(s/30*PI)+451;
y2=200-98*cos(s/30*PI);
line(451,200,x2,y2);
/*用原來的顏色在原來位置處再繪制秒針,以達到清除當前秒針的目的*/

/*分鍾處理*/
if(t[0].ti_min!=m){ /*若分鍾有變化*/
/*消除當前分針*/
setcolor(15); /*白色*/
x1=80*sin(m/30*PI)+451;
y1=200-80*cos(m/30*PI);
line(451,200,x1,y1);
/*繪制新的分針*/
m=t[0].ti_min;
digitclock(446,318,digitmin(m)); /*在數字時鍾中顯示新的分鍾值*/
x1=80*sin(m/30*PI)+451;
y1=200-80*cos(m/30*PI);
line(451,200,x1,y1);
}

/*小時處理*/
if((t[0].ti_hour*60+t[0].ti_min)!=(h*60+m)){ /*若小時數有變化*/
/*消除當前時針*/
setcolor(15); /*白色*/
x=50*sin((h*60+m)/360*PI)+451;/*50:時鍾的長度(單位:像素),451:圓心的x坐標值*/
y=200-50*cos((h*60+m)/360*PI);
line(451,200,x,y);
/*繪制新的時針*/
h=t[0].ti_hour;
digitclock(408,318,digithour(h));
x=50*sin((h*60+m)/360*PI)+451;
y=200-50*cos((h*60+m)/360*PI);
line(451,200,x,y);
}
}
}

int keyhandle(int key,int count) /*鍵盤控制 */
{ switch(key)
{case UP: timeupchange(count-1); /*因為count的初始值為2,所以此處減1*/<br> break;<br> case DOWN:timedownchange(count-1); /*因為count的初始值為2,所以此處減1*/<br> break;<br> case TAB:setcolor(15);<br> clearcursor(count); /*清除原來的游標*/<br> drawcursor(count); /*顯示一個新的游標*/<br> count++;<br> break;<br> }
return count;
}

int timeupchange(int count) /*處理游標上移的按鍵*/
{
if(count==1){
t[0].ti_hour++;
if(t[0].ti_hour==24) t[0].ti_hour=0;
settime(t); /*設置新的系統時間*/
}

if(count==2){
t[0].ti_min++;
if(t[0].ti_min==60) t[0].ti_min=0;
settime(t); /*設置新的系統時間*/
}

if(count==3){
t[0].ti_sec++;
if(t[0].ti_sec==60) t[0].ti_sec=0;
settime(t); /*設置新的系統時間*/
}
}

int timedownchange(int count) /*處理游標下移的按鍵*/
{
if(count==1) {
t[0].ti_hour--;
if(t[0].ti_hour==0) t[0].ti_hour=23;
settime(t);/*設置新的系統時間*/
}
if(count==2) {
t[0].ti_min--;
if(t[0].ti_min==0) t[0].ti_min=59;
settime(t);/*設置新的系統時間*/
}

if(count==3) {
t[0].ti_sec--;
if(t[0].ti_sec==0) t[0].ti_sec=59;
settime(t);/*設置新的系統時間*/
}
}

int digithour(double h)/*將double型的小時數轉換成int型*/
{int i;<br>for(i=0;i<=23;i++)<br> {if(h==i) return i;}
}

int digitmin(double m)/*將double型的分鍾數轉換成int型*/
{int i;<br>for(i=0;i<=59;i++)<br> {if(m==i) return i;}
}

int digitsec(double s) /*將double型的秒鍾數轉換成int型*/
{int i;<br>for(i=0;i<=59;i++)<br> {if(s==i) return i;}
}

void digitclock(int x,int y,int clock)/*在指定位置顯示數字時鍾:時\分\秒*/
{char buffer1[10];<br>setfillstyle(0,2);<br>bar(x,y,x+15,328);<br>if(clock==60) clock=0;<br>sprintf(buffer1,"%d",clock);<br>outtextxy(x,y,buffer1);<br>}

void drawcursor(int count) /*根據count的值,畫一個游標*/
{switch(count)<br>{<br> case 1:line(424,315,424,325);break;<br> case 2:line(465,315,465,325);break;<br> case 3:line(505,315,505,325);break;<br> }
}

void clearcursor(int count) /*根據count的值,清除前一個游標*/
{switch(count)<br>{<br> case 2:line(424,315,424,325);break;<br> case 3:line(465,315,465,325);break;<br> case 1:line(505,315,505,325);break;<br> }
}

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919