求簡易溫度控制器設(shè)計(jì)的單片機(jī)匯編語言程序
-
設(shè)計(jì)一個(gè)簡易溫度控制器,具體任務(wù)包括:①單片機(jī)控制,具有低溫、高溫聲光報(bào)警功能;②利用按鍵進(jìn)行溫度上限和溫度下限設(shè)置,并且實(shí)時(shí)顯示溫度到LED數(shù)碼管;溫度檢測采用熱敏電阻。熱... 設(shè)計(jì)一個(gè)簡易溫度控制器,具體任務(wù)包括: ① 單片機(jī)控制,具有低溫、高溫聲光報(bào)警功能; ② 利用按鍵進(jìn)行溫度上限和溫度下限設(shè)置,并且實(shí)時(shí)顯示溫度到LED數(shù)碼管; 溫度檢測采用熱敏電阻。熱敏電阻是利用半導(dǎo)體的電阻值隨溫度顯著變化設(shè)計(jì)而成的,它具有溫度系數(shù)大、靈敏度高、體積小、結(jié)構(gòu)簡單、響應(yīng)速度快、使用方便、壽命長等優(yōu)點(diǎn),應(yīng)用非常廣泛。采用普通的熱敏電阻,需要A/D轉(zhuǎn)換器。 ③ 上位機(jī)顯示。 展開
全部評論(1條)
-
- 475531072 2018-01-03 00:00:00
- 這個(gè)程序你可以用來試試。我以前做的。 //溫控系統(tǒng)控制程序 //溫度傳感器:DS18B20 //顯示方式:LED #include <reg51.h> #define uchar unsigned char sbit keyup=P1^0; sbit keydn=P1^1; sbit keymd=P1^2; sbit out=P3^7; //接控制繼電器 sbit DQ = P3^4; //接溫度傳感器18B20 uchar t[2],number=0,*pt; //溫度值 uchar TempBuffer1[4]={0,0,0,0}; uchar Tmax=18,Tmin=8; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7}; uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp; bit flag; void t0isr() interrupt 1 { TH0=(65536-5000)/256; TL0=(65536-5000)%256; switch(number) { case 0: P2=0x08; P0=distab[TempBuffer1[0]]; break; case 1: P2=0x04; P0=distab[TempBuffer1[1]]; break; case 2: P2=0x02; P0=distab[TempBuffer1[2]]&0x7f; break; case 3: P2=0x01; P0=distab[TempBuffer1[3]]; break; default: break; } number++; if(number>3)number=0; } void delay_18B20(unsigned int i) { while(i--); } /**********ds18b20初始化函數(shù)**********************/ void Init_DS18B20(void) { bit x=0; do{ DQ=1; delay_18B20(8); DQ = 0; //單片機(jī)將DQ拉低 delay_18B20(90); //精確延時(shí) 大于 480us DQ = 1; //拉高總線 delay_18B20(14); x=DQ; //稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗,繼續(xù)初始化 }while(x); delay_18B20(20); } /***********ds18b20讀一個(gè)字節(jié)**************/ unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 給脈沖信號 dat>>=1; DQ = 1; // 給脈沖信號 if(DQ) dat|=0x80; delay_18B20(4); } return(dat); } /*************ds18b20寫一個(gè)字節(jié)****************/ void WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=8; i>0; i--) { DQ = 0; DQ = dat&0x01; delay_18B20(5); DQ = 1; dat>>=1; } } /**************讀取ds18b20當(dāng)前溫度************/ unsigned char *ReadTemperature(unsigned char rs) { unsigned char tt[2]; delay_18B20(80); Init_DS18B20(); WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0x44); //啟動溫度轉(zhuǎn)換 delay_18B20(80); Init_DS18B20(); WriteOneChar(0xCC); //跳過讀序號列號的操作 WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是溫度 tt[0]=ReadOneChar(); //讀取溫度值低位 tt[1]=ReadOneChar(); //讀取溫度值高位 return(tt); } void covert1(void) //將溫度轉(zhuǎn)換為LED顯示的數(shù)據(jù) { uchar x=0x00,y=0x00; t[0]=*pt; pt++; t[1]=*pt; if(t[1]&0x080) //判斷正負(fù)溫度 { TempBuffer1[0]=0x0c; //c代表負(fù) t[1]=~t[1]; /*下面幾句把負(fù)數(shù)的補(bǔ)碼*/ t[0]=~t[0]; /*換算成值*********/ x=t[0]+1; t[0]=x; if(x==0x00)t[1]++; } else TempBuffer1[0]=0x0a; //A代表正 t[1]<<=4; //將高字節(jié)左移4位 t[1]=t[1]&0xf0; x=t[0]; //將t[0]暫存到X,因?yàn)槿⌒?shù)部分還要用到它 x>>=4; //右移4位 x=x&0x0f; //和前面兩句就是取出t[0]的高四位 y=t[1]|x; //將高低字節(jié)的有效值的整數(shù)部分拼成一個(gè)字節(jié) TempBuffer1[1]=(y%100)/10; TempBuffer1[2]=(y%100)%10; t[0]=t[0]&0x0f; //小數(shù)部分 TempBuffer1[3]=t[0]*10/16; //以下程序段消去隨機(jī)誤檢查造成的誤判,只有連續(xù)12次檢測到溫度超出限制才切換加熱裝置 if(currtemp>Tmin)xiaodou1=0; if(y<Tmin) { xiaodou1++; currtemp=y; xiaodou2=0; } if(xiaodou1>12) { out=0; flag=1; xiaodou1=0; } if(currtemp<Tmax)xiaodou2=0; if(y>Tmax) { xiaodou2++; currtemp=y; xiaodou1=0; } if(xiaodou2>12) { out=1; flag=0; xiaodou2=0; } out=flag; } void convert(char tmp) { uchar a; if(tmp<0) { TempBuffer1[0]=0x0c; a=~tmp+1; } else { TempBuffer1[0]=0x0a; a=tmp; } TempBuffer1[1]=(a%100)/10; TempBuffer1[2]=(a%100)%10; } void keyscan( ) { uchar keyin; keyin=P1&0x07; if(keyin==0x07)return; else if(keymd==0) { dismod++; dismod%=3; while(keymd==0); switch(dismod) { case 1: convert(Tmax); TempBuffer1[3]=0x11; break; case 2: convert(Tmin); TempBuffer1[3]=0x12; break; default: break; } } else if((keyup==0)&&(dismod==1)) { Tmax++; convert(Tmax); while(keyup==0); } else if((keydn==0)&&(dismod==1)) { Tmax--; convert(Tmax); while(keydn==0); } else if((keyup==0)&&(dismod==2)) { Tmin++; convert(Tmin); while(keyup==0); } else if((keydn==0)&&(dismod==2)) { Tmin--; convert(Tmin); while(keydn==0); } xiaodou1=0; xiaodou2=0; } main() { TMOD=0x01; TH0=(65536-5000)/256; TL0=(65536-5000)%256; TR0=1; ET0=1; EA=1; out=1; flag=0; ReadTemperature(0x3f); delay_18B20(50000); //延時(shí)等待18B20數(shù)據(jù)穩(wěn)定 while(1) { pt=ReadTemperature(0x7f); //讀取溫度,溫度值存放在一個(gè)兩個(gè)字節(jié)的數(shù)組中 if(dismod==0)covert1(); keyscan(); delay_18B20(30000); } }
-
贊(15)
回復(fù)(0)
熱門問答
- 求簡易溫度控制器設(shè)計(jì)的單片機(jī)匯編語言程序
- 設(shè)計(jì)一個(gè)簡易溫度控制器,具體任務(wù)包括:①單片機(jī)控制,具有低溫、高溫聲光報(bào)警功能;②利用按鍵進(jìn)行溫度上限和溫度下限設(shè)置,并且實(shí)時(shí)顯示溫度到LED數(shù)碼管;溫度檢測采用熱敏電阻。熱... 設(shè)計(jì)一個(gè)簡易溫度控制器,具體任務(wù)包括: ① 單片機(jī)控制,具有低溫、高溫聲光報(bào)警功能; ② 利用按鍵進(jìn)行溫度上限和溫度下限設(shè)置,并且實(shí)時(shí)顯示溫度到LED數(shù)碼管; 溫度檢測采用熱敏電阻。熱敏電阻是利用半導(dǎo)體的電阻值隨溫度顯著變化設(shè)計(jì)而成的,它具有溫度系數(shù)大、靈敏度高、體積小、結(jié)構(gòu)簡單、響應(yīng)速度快、使用方便、壽命長等優(yōu)點(diǎn),應(yīng)用非常廣泛。采用普通的熱敏電阻,需要A/D轉(zhuǎn)換器。 ③ 上位機(jī)顯示。 展開
2018-01-02 08:52:51
459
1
- 求一個(gè)簡易單片機(jī)頻率計(jì)設(shè)計(jì)程序
- 頻率測量精度為1HZ 誤差小于10HZ通過LCD1602顯示出來
2010-07-11 07:06:44
566
2
- 基于單片機(jī)數(shù)字頻率計(jì)設(shè)計(jì)匯編語言程序的設(shè)計(jì)思路
- 一、 設(shè)計(jì)目的 ——掌握數(shù)字量數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)方法。 二、技術(shù)指標(biāo) 1.測量范圍:0~200K 2.測量信號:方波 3.測量信號電壓:3~5V 4.閘門時(shí)間:10mS、0.1S、1S 5.顯示位數(shù):6位 三、設(shè)計(jì)方案 根據(jù)技術(shù)要求,可確定出該數(shù)字頻率計(jì)應(yīng)由測量電路... 一、 設(shè)計(jì)目的 ——掌握數(shù)字量數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)方法。 二、技術(shù)指標(biāo) 1.測量范圍:0~200K 2.測量信號:方波 3.測量信號電壓:3~5V 4.閘門時(shí)間:10mS、0.1S、1S 5.顯示位數(shù):6位 三、設(shè)計(jì)方案 根據(jù)技術(shù)要求,可確定出該數(shù)字頻率計(jì)應(yīng)由測量電路(包括量程標(biāo)定電路和ADC)、單片機(jī)、鍵盤及顯示電路幾個(gè)組成部分,各部分采用的電路形式及主要器件確定如下: (1)單片機(jī)部分 選用89C51單片機(jī)作為主機(jī),同時(shí)要設(shè)計(jì)89C51單片機(jī)的晶振電路和復(fù)位電路,具體電路略。 (2)測量電路部分 直接利用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器實(shí)現(xiàn)頻率的測量。 (3)鍵盤、顯示部分 本機(jī)需配置具有3個(gè)按鍵的鍵盤和6位數(shù)字LED的顯示器。具體電路參見實(shí)驗(yàn)箱電路圖4、5。 測量頻率范圍:1-1000HZ 閘門時(shí)間1S,單位(HZ) 1K-10K 閘門時(shí)間0.1S (計(jì)數(shù)值×10),單位(KHZ) 10k-200k 閘門時(shí)間10mS(計(jì)數(shù)值×100)單位(KHZ) 用按鍵選擇測量范圍。 圖4 顯示器電路連接圖 圖5 鍵盤電路連接圖 圖6 等精度測量數(shù)字頻率計(jì)電路圖 展開
2014-06-06 05:07:53
358
1
- 匯編語言 51單片機(jī) 器程序
2017-04-19 08:39:13
413
1
- 51單片機(jī)制作簡易數(shù)字頻率計(jì)程序
2010-12-09 18:27:45
285
1
- 簡易頻率計(jì)設(shè)計(jì)(單片機(jī)課設(shè))
- 可以測量正弦波和方波信號的頻率 框圖 輸入信號--》整形處理--》控制器--》顯示測量值 要求 1,能測量正弦波和方波10HZ-100KHZ 2,數(shù)碼顯示共三位,其中一位小數(shù),自動換擋(00-999HZ)有一個(gè)燈亮,表示單位是HZ,0.00-99.99KHZ,另一個(gè)燈亮,表示單位是... 可以測量正弦波和方波信號的頻率 框圖 輸入信號--》整形處理--》控制器--》顯示測量值 要求 1,能測量正弦波和方波10HZ-100KHZ 2,數(shù)碼顯示共三位,其中一位小數(shù),自動換擋(00-999HZ)有一個(gè)燈亮,表示單位是HZ,0.00-99.99KHZ,另一個(gè)燈亮,表示單位是KHZ 3,要有輸入信號超范圍的保護(hù)電路 發(fā)揮要求 1,能測量方波周期,并顯示 2,能測量100mV的正弦波 有沒有愛好者,救救急,對這破玩意一竅不通 有加分 展開
2012-05-31 06:48:10
354
2
- 基于AT89S52單片機(jī)的簡易頻率計(jì)的設(shè)計(jì)
- 要求: (1)測量范圍。幅度:0.5V~5V;頻率1HZ~1MHZ。 (2)測試誤差≤0.1%。 (3)用4位數(shù)碼管顯示,當(dāng)頻率變化時(shí),能通過數(shù)碼管及時(shí)的看到變化后的頻率
2015-01-14 10:41:12
491
2
- 高分求簡易數(shù)字頻率計(jì)設(shè)計(jì)
- 要求設(shè)計(jì)一個(gè)簡易的數(shù)字頻率計(jì),其信號是給定的比較穩(wěn)定的脈沖信號。 設(shè)計(jì)內(nèi)容: 1、測量信號:方波 、正弦波、三角波; 2、測量頻率范圍: 1Hz~9999Hz; 3、顯示方式:4位十進(jìn)制數(shù)顯示; 4、時(shí)基電路由 由555構(gòu)成的多諧振蕩器產(chǎn)生(當(dāng)標(biāo)準(zhǔn)時(shí)間... 要求設(shè)計(jì)一個(gè)簡易的數(shù)字頻率計(jì),其信號是給定的比較穩(wěn)定的脈沖信號。 設(shè)計(jì)內(nèi)容: 1、測量信號:方波 、正弦波、三角波; 2、測量頻率范圍: 1Hz~9999Hz; 3、顯示方式:4位十進(jìn)制數(shù)顯示; 4、時(shí)基電路由 由555構(gòu)成的多諧振蕩器產(chǎn)生(當(dāng)標(biāo)準(zhǔn)時(shí)間的精度要求較高時(shí),應(yīng)通過晶體振蕩器分頻獲得); 5、當(dāng)被測信號的頻率超出測量范圍時(shí),報(bào)警。 設(shè)計(jì)報(bào)告書寫格式: 1、選題介紹和設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)的功能; 2、系統(tǒng)設(shè)計(jì)結(jié)構(gòu)框圖及原理; 3、采用芯片簡介; 4、設(shè)計(jì)的完整電路以及仿真結(jié)果; 5、Protel繪制的電路原理圖; 6、制作的PCB; 7、課程設(shè)計(jì)過程心得體會(負(fù)責(zé)了哪些內(nèi)容、學(xué)到了什么、遇到的難題及解決方法等)。 電子課程設(shè)計(jì)過程: 系統(tǒng)設(shè)計(jì)→在Multisim2001下仿真→應(yīng)用Protel 99SE繪制電路原理圖→制作PCB→撰寫設(shè)計(jì)報(bào)告 仿真軟件: Multisim 2001,Protel 99SE。 展開
2009-01-03 06:22:59
436
3
- 求51單片機(jī)設(shè)計(jì)數(shù)字頻率計(jì),附帶Proteus仿真和程序
2014-05-13 23:13:37
405
1
- 單片機(jī)簡易頻率計(jì),怎么編程序測正弦信號的?
- 測方波信號的我知道,就是用計(jì)數(shù)器來計(jì)數(shù),但正弦信號不能這樣子的吧。
2011-06-18 10:21:18
488
3
- 求用單片機(jī)制作簡易信號發(fā)生器的電路圖
- 采用單片機(jī)AT89C51及D/A轉(zhuǎn)換器0832設(shè)計(jì)信號發(fā)生器... 采用單片機(jī)AT89C51及D/A轉(zhuǎn)換器0832設(shè)計(jì)信號發(fā)生器 展開
2009-06-10 17:48:33
450
3
- 51單片機(jī)頻率計(jì)的中斷程序怎么設(shè)計(jì)
- 有一個(gè)信號由200hz的NRZ碼控制輸出兩個(gè)頻率不同的方波(1600,800)?,F(xiàn)在要還原,如果檢測到1600則p3.5輸出高電平,800則輸出低電平。我的設(shè)想是定時(shí)一個(gè)5ms的中斷,對輸入的方波電平0→1進(jìn)行計(jì)數(shù)。計(jì)數(shù)值大于(8+4)/2=6的話輸出1,小于輸出0。請問這樣可以... 有一個(gè)信號由200hz的NRZ碼控制輸出兩個(gè)頻率不同的方波(1600,800)。現(xiàn)在要還原,如果檢測到1600則p3.5輸出高電平,800則輸出低電平。我的設(shè)想是定時(shí)一個(gè)5ms的中斷,對輸入的方波電平0→1進(jìn)行計(jì)數(shù)。計(jì)數(shù)值大于(8+4)/2=6的話輸出1,小于輸出0。請問這樣可以嗎?對于定時(shí)器計(jì)時(shí)器還有中斷的使用不大明白,可否簡略寫下程序。謝謝 展開
2015-05-26 01:56:14
539
1
- 求計(jì)時(shí)器控制4個(gè)LED燈滾動閃爍的匯編語言程序
2013-01-09 07:51:39
560
2
- 長春理工單片機(jī)課程設(shè)計(jì):簡易信號發(fā)生器設(shè)計(jì),急急急
- 長春理工單片機(jī)課程設(shè)計(jì):簡易信號發(fā)生器設(shè)計(jì),哪位學(xué)哥學(xué)姐知道就幫幫忙,謝謝學(xué)長,急急急要的主要是程序,謝謝... 長春理工單片機(jī)課程設(shè)計(jì):簡易信號發(fā)生器設(shè)計(jì),哪位學(xué)哥學(xué)姐知道就幫幫忙,謝謝學(xué)長,急急急 要的主要是程序,謝謝 展開
2010-07-11 09:22:44
461
1
- 低頻頻率計(jì)的原理圖和程序[匯編語言]
- 設(shè)計(jì)要求:1、 工作電壓:5V 2、 數(shù)字顯示位數(shù):5位數(shù)字顯示 3、 頻率范圍:1Hz~99999Hz 5、 分辨率:1Hz 6、 被測信號:周期性信號 Z好有原理圖和程序[匯編語言]的一起發(fā)來,畢業(yè)設(shè)計(jì)要用,很急?。?!QQ441769013 郵箱:wengkaiwc@163.com
2018-11-21 20:38:30
358
0
- 用單片機(jī)匯編語言編寫60秒計(jì)時(shí)器!
- 用單片機(jī)匯編語言編寫60秒計(jì)時(shí)器 ,
2017-11-28 01:26:56
399
1
- 求51單片機(jī)語言用動態(tài)顯示設(shè)計(jì)0-60秒的計(jì)時(shí)器程序,原理圖如圖。
- 求51單片機(jī)語言用動態(tài)顯示設(shè)計(jì)0-60秒的計(jì)時(shí)器程序,原理圖如圖。動態(tài)顯示管是陰極的,我編的程序是不是哪里進(jìn)入誤區(qū)了,能我?guī)椭赋鰜砘蛘咔蟠笊窬幒谜_的程序,誠信感謝,賞金不夠見諒。 。還有這種原理圖位選和段選如何選,好像不同于P2^6和P2^7的位選段... 求51單片機(jī)語言用動態(tài)顯示設(shè)計(jì)0-60秒的計(jì)時(shí)器程序,原理圖如圖。動態(tài)顯示管是陰極的,我編的程序是不是哪里進(jìn)入誤區(qū)了,能我?guī)椭赋鰜砘蛘咔蟠笊窬幒谜_的程序,誠信感謝,賞金不夠見諒。 。還有這種原理圖位選和段選如何選,好像不同于P2^6和P2^7的位選段選是嗎? 展開
2015-10-30 01:47:35
374
1
- 基于單片機(jī)AT89C52頻率計(jì),求程序,求助
2017-06-22 09:26:53
426
1
4月突出貢獻(xiàn)榜
推薦主頁
最新話題





參與評論
登錄后參與評論