利用開發(fā)板上的ds18b20傳感器測量當前溫度,利用數(shù)碼管輸出當前溫度值。
實現(xiàn)結(jié)果:
測試結(jié)果顯示當前攝氏溫度25.3度。
實現(xiàn)原理:
(1)獨立數(shù)碼管
數(shù)碼管分為共陽極和共陰極數(shù)碼管,
通過控制數(shù)碼管中的8個二極管,來顯示數(shù)字。
(2)多位共陰數(shù)碼管和共陽數(shù)碼管
本項目使用的是6位共陰數(shù)碼管。
數(shù)碼管控制主要通過段鎖存和位鎖存控制顯示要顯示的數(shù)字如溫度。段鎖存是指6位共陰極數(shù)碼管段輸出端連接鎖存器74HC573的輸出端,鎖存器的輸入端連接單片機接口P0。位鎖存是指6位數(shù)碼管位置輸出端連接鎖存器74HC573的輸出端,鎖存器的輸入端連接單片機接口P0。段鎖存器片選端接單片機接口P2.6,位鎖存器片選端接單片機接口P2.7。
連接圖如下:
程序分析:溫度傳感器DS18B20接單片機P2.2,段鎖存接P2.6,位鎖存接P2.7,unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
顯示段碼值0~9,Unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
分別對應(yīng)相應(yīng)的數(shù)碼管點亮,即位碼。
溫度傳感器的程序有測溫的程序,測得的溫度通過數(shù)碼管顯示出來。其中使用了延時和中斷子程序。
用液晶屏1602實現(xiàn)溫度顯示。
利用按鍵實現(xiàn)攝氏溫度和華氏溫度的轉(zhuǎn)換,并顯示。
實現(xiàn)結(jié)果:
按下S2,顯示攝氏溫度如下
按下S2,顯示華氏溫度如下
實現(xiàn)原理:
在之前的溫度顯示模塊加入按鍵功能程序,利用兩種溫度轉(zhuǎn)換公式華氏溫度=(攝氏溫度*9/5)+32實現(xiàn)轉(zhuǎn)換。
相關(guān)程序如下:
void display(uint temp,uint hstemp) //顯示程序
{
if(s2==0)
{
ser=temp/10;
SBUF=ser;
A1=temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
dula=0;
P0=table[A1]; //顯示百位
dula=1;
dula=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
delay(1);
dula=0;
P0=table1[A2]; //顯示十位
dula=1;
dula=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
delay(1);
P0=table[A3]; //顯示個位
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
delay(1);
}
if(s3==0)
{
ser1=hstemp/10;
SBUF=ser1;
A11=hstemp/100;
A21t=hstemp%100;
A21=A21t/10;
A31=A21t%10;
dula=0;
P0=table[A11]; //顯示百位
dula=1;
dula=0;
wela=0;
P0=0x7e;
wela=1;
wela=0;
delay(1);
dula=0;
P0=table1[A21]; //顯示十位
dula=1;
dula=0;
wela=0;
P0=0x7d;
wela=1;
wela=0;
delay(1);
P0=table[A31]; //顯示個位
dula=1;
dula=0;
P0=0x7b;
wela=1;
wela=0;
delay(1);
}
}
程序分析:s2,s3代表按鍵分別接在單片機P3.4,p3.5上,當按鍵按下時單片機相應(yīng)接口顯示低電平,松開顯示高電平。當檢測到S2按下時,顯示攝氏溫度。當檢測到S3按下時,顯示華氏溫度。主程序如下:
if(s2==0)
{
SendByte(A1*10+A2);
SendStr(".");
SendByte(A3);
}
if(s3==0)
{
SendByte(A11*10+A21);
SendStr(".");
SendByte(A3);
}
利用串口將當前溫度值發(fā)送至電腦,電腦端利用串口助手進行接收和顯示。
實現(xiàn)原理:
連接好串口或者usb轉(zhuǎn)串口至電腦,下載該程序,打開電源, 打開串口調(diào)試程序,將波特率設(shè)置為9600,無奇偶校驗,晶振11.0592MHz,發(fā)送和接收使用的格式相同。
串口通訊程序包括串口初始化,輸出字節(jié)函數(shù),輸出字符串函數(shù),主函數(shù)。溫度傳感器測得的溫度數(shù)值通過串口通訊程序輸出顯示在電腦上。
實現(xiàn)結(jié)果:
當按下S2按鍵,電腦顯示如下:
發(fā)送和接收都是16進制,1B=1*16+11*1=27,2E代表小數(shù)點,01=1,所以顯示溫度27.2攝氏度。
當按下S3按鍵,電腦顯示如下:
發(fā)送和接收都是16進制,51=5*16+1*1=81,2E代表小數(shù)點,03=3,所以顯示溫度81.3華氏。
單片機源程序如下:
//安裝目錄下的EXE文件打開后可在電腦上顯示當前溫度值
#include #define uchar unsigned char #define uint unsigned int sbit DS=P2^2; //define interface uint temp; // variable of temperature uchar flag1; // sign of the result positive or negative sbit dula=P2^6; sbit wela=P2^7; sbit s2=P3^4; sbit s3=P3^5; uchar A1,A2,A2t,A3,ser,A11,A21,A21t,A31,ser1; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd, 0x87,0xff,0xef}; void SendStr(unsigned char *s); /*------------------------------------------------ 串口初始化 ------------------------------------------------*/ void InitUART (void) { SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收 TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重裝 TH1 = 0xFD; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz TR1 = 1; // TR1: timer 1 打開 EA = 1; //打開總中斷 //ES = 1; //打開串口中斷 } void delay(uint count) //delay { uint i; while(count) { i=200; while(i>0) i--; count--; } } void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值 unsigned char 是定義無符號字符變量,其值的范圍是 0~255 這里使用晶振12M,精確延時請使用匯編 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延時1mS DelayUs2x(245); DelayUs2x(245); } } ///////功能:串口初始化,波特率9600,方式1/////// void Init_Com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; } void dsreset(void) //send reset and initialization command { uint i; DS=0; i=103; while(i>0)i--; DS=1; i=4; while(i>0)i--; } bit tmpreadbit(void) //read a bit { uint i; bit dat; DS=0;i++; //i++ for delay DS=1;i++;i++; dat=DS; i=8;while(i>0)i--; return (dat); } uchar tmpread(void) //read a byte date { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); dat=(j<<7)|(dat>>1); //讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個字節(jié)在DAT里 } return(dat); } void tmpwritebyte(uchar dat) //write a byte to ds18b20 { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) //write 1 { DS=0; i++;i++; DS=1; i=8;while(i>0)i--; } else { DS=0; //write 0 i=8;while(i>0)i--; DS=1; i++;i++; } } } void tmpchange(void) //DS18B20 begin change { dsreset(); delay(1); tmpwritebyte(0xcc); // address all drivers on bus tmpwritebyte(0x44); // initiates a single temperature conversion } uint tmp() //get the temperature { float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); 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 readrom() //read the serial { uchar sn1,sn2; dsreset(); delay(1); tmpwritebyte(0x33); sn1=tmpread(); sn2=tmpread(); } void delay10ms() //delay { uchar a,b; for(a=10;a>0;a--) for(b=60;b>0;b--); } void display(uint temp,uint hstemp) //顯示程序 { if(s2==0) { ser=temp/10; SBUF=ser; A1=temp/100; A2t=temp%100; A2=A2t/10; A3=A2t%10; dula=0; P0=table[A1]; //顯示百位 dula=1; dula=0; wela=0; P0=0x7e; wela=1; wela=0;
上一篇:基于狀態(tài)機的51單片機獨立按鍵檢測與消抖思路
下一篇:16x16音樂頻譜(源代碼 原理圖)
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 電動車電池成本降一半,續(xù)航卻減一半?寧德時代新電池能突圍嗎?
- 從“不可修”到可拆可換:CTP電池的售后怎么辦?
- 區(qū)域控制器ZCU國產(chǎn)化:從物料齊全到系統(tǒng)話語權(quán)
- 總額超260億-盤點全球移動機器人領(lǐng)域融資TOP10企業(yè)
- 安森美CEO談?wù)撾妱悠嚺cAI服務(wù)器前景
- LILYGO T-LoRa Pager:復(fù)古造型與前沿技術(shù)結(jié)合的物聯(lián)網(wǎng)手持設(shè)備
- VS Code+PlatformIO搭建ESP32 Arduino開發(fā)環(huán)境
- Esp32環(huán)境離線搭建參考
- ESP32使用舵機庫時的錯誤
- ESP32 S3接ST7789屏幕線序
- 觀看福祿克計量校準視頻 參與調(diào)查問卷好禮送!
- EEWORLD下載中心熱力上線,豈能無禮!
- TI有獎直播:使用 MSPM0 AEC-Q100 MCU 設(shè)計更智能的汽車系統(tǒng)
- 【問題征集】大學(xué)生美國TI行,你問我送禮!
- 解鎖【W(wǎng)5500-EVB-Pico】,探秘以太網(wǎng)底層,得捷Follow me第4期來襲!
- 以舊換新!100套TI MSPM0整裝待發(fā),升級你的裝備!
- 幫忙他人,成就自我——EEWORLD問答榜(10期)
- Arrow&allegro有獎直播:下一代磁感應(yīng)解決方案:XtremeSense™ TMR 技術(shù)如何促進高效應(yīng)用
- #Micropython大作戰(zhàn)#第二彈:發(fā)表mciropython原創(chuàng)教程贏好禮!
- 兆易GD32450I-EVAL免費測評試用
- 深鑒科技姚頌:做芯片若只看到“芯片” 公司一定死掉
- 比特幣大跌 “錢”途不明 礦機巨頭加緊上市忙變現(xiàn)
- 我國正在用“機器人”取代農(nóng)民,實現(xiàn)現(xiàn)代化生產(chǎn)
- 軍品企業(yè)轉(zhuǎn)民品市場,AGV機器人市場,走領(lǐng)先技術(shù)道路是關(guān)鍵
- 3C行業(yè)機器人換人,將迎來一輪新的爆發(fā)
- 米粉等了N年,紅米新筆記本電腦是否真能帶來奇跡?
- 恩智浦新雷達傳感器解決方案,可對汽車進行360度探測
- 聯(lián)想真要進軍汽車領(lǐng)域?
- 2020年出行之變(一):自動駕駛的“躍淵”時刻
- 智慧停車產(chǎn)業(yè)發(fā)展的三個必要階段