色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用8051微控制器構建一個簡單的數字溫度計

科技觀察員 ? 來源:circuitdigest ? 作者:沙希·庫馬爾 ? 2022-11-21 16:38 ? 次閱讀

有時,由于波動,人們發現很難從模擬溫度計讀取溫度。因此,在這里我們將使用8051微控制器構建一個簡單的數字溫度計,其中LM35傳感器用于測量溫度。我們還使用LM35構建使用Arduino,NodeMCUPIC,Raspberry Pi和其他微控制器的數字溫度計。

該項目還將作為ADC0804與8051和16*2 LCD與8051微控制器的適當接口

所需組件:

8051開發板

ADC0804 板

16*2液晶顯示屏

LM35 傳感器

電位計

跳線

電路圖:

使用LM35的數字溫度計電路的電路圖如下:

poYBAGN7OHWAVteMAAFite3HjAI857.png

使用 35 使用 8051 測量溫度:

8051微控制器是一個8位微控制器,具有128字節的片上RAM,4K字節的片上ROM,兩個定時器,一個串行端口和四個8位端口。8052微控制器是微控制器的擴展。下表顯示了8051名家庭成員的比較。

特征 8051 8052
只讀存儲器(以字節為單位) 4K 8K
內存(字節) 128 256
定時器 2 3
I/O 引腳 32 32
串行端口 1 1
中斷源 6 8

pYYBAGN7OROAHBBRAAAb9Nl1T9c320.png

16x2 液晶顯示器:

16 * 2 LCD是嵌入式應用中廣泛使用的顯示器。以下是有關16 * 2液晶顯示器的引腳和工作的簡要說明。LCD內部有兩個非常重要的寄存器。它們是數據寄存器和命令寄存器。命令寄存器用于發送清晰顯示、光標在家鄉等命令,數據寄存器用于發送要在16*2 LCD上顯示的數據。下表顯示了16 * 2 LCD的引腳說明。

象征 I/O 描述
1 VSS -
2 Vdd - +5V電源
3 V形 - 用于控制對比度的電源
4 RS RS=0 為命令寄存器 ,
RS=1 用于數據寄存器
5 烏爾曼 R/W=0 表示寫入,R/W=1 表示讀取
6 E I/O 使
7 D0 I/O 8位數據總線
8 D1 I/O 8位數據總線
9 D2 I/O 8位數據總線
10 D3 I/O 8位數據總線
11 D4 I/O 8位數據總線
12 D5 I/O 8位數據總線
13 D6 I/O 8位數據總線
14 D7 I/O 8位數據總線
15 一個 - +5V背光
16 K -

下表顯示了常用的液晶屏命令代碼。

代碼(十六進制) 描述
01 清晰的顯示屏
06 遞增光標(右移)
0安 顯示關閉,光標打開
0C 顯示打開,光標關閉
0F 顯示于 ,光標閃爍
80 強制光標從 1 開始圣線
C0 強制光標以 2 開頭德·線
38 2行和5 * 7矩陣

ADC0804 集成電路

ADC0804 IC是美國國家半導體公司ADC0800系列中的8位并行ADC。它的工作電壓為+5伏,分辨率為8位。步長和 VIN 范圍因 Vref/2 的不同值而異。下表顯示了 Vref/2 和 VIN 范圍之間的關系。

Vref/2 (V) 葡萄酒 (V) 步長(mV)
打開 0 到 5 19.53
2.0 0 到 4 15.62
1.5 0 到 3 11.71
1.28 0 到 2.56 10

在我們的例子中,Vref/2連接到1.28伏,因此步長為10mV。對于ADC0804,步長計算為(2 * Vref / 2)/256。

以下公式用于計算輸出電壓:

Dout = Vin / step size

其中Dout是以十進制輸出的數字數據,Vin =模擬輸入電壓和步長(分辨率)是最小的變化。在此處了解有關ADC0804的更多信息,還可以檢查ADC0808與8051的接口。

LM35 溫度傳感器

LM35 是一款溫度傳感器,其輸出電壓與攝氏溫度成線性比例。LM35 已經校準,因此不需要外部校準。它每攝氏度溫度輸出 10mV。

LM35 傳感器產生與溫度相對應的電壓。該電壓由ADC0804轉換為數字(0至256),并饋送到8051微控制器。8051微控制器將此數字值轉換為以攝氏度為單位的溫度。然后將該溫度轉換為適合顯示的ascii形式。此 ascii 值被饋送到 16*2 LCD,該 LCD 在其屏幕上顯示溫度。此過程在指定的時間間隔后重復。

以下是使用 8051 的 LM35 數字溫度計的設置映像:

pYYBAGN7ORSAEwvQAADCTQkLT7M693.jpg

您可以在此處找到所有基于 LM35 的數字溫度計。

代碼說明:
使用LM35的數字溫度計的完整C程序在本項目結束時給出。代碼被分成有意義的小塊,并在下面解釋。

對于 16*2 LCD 與 8051 微控制器接口 ,我們必須定義 16*2 LCD 連接到 8051 微控制器的引腳。16*2 LCD 的 RS 引腳連接到 P2.7,16*2 LCD 的 RW 引腳連接到 P2.6,16*2 LCD 的 E 引腳連接到 P2.5。數據引腳連接到 8051 微控制器的端口 0。

sbit rs=P2^7; //Register Select(RS) pin of 16*2 lcd
sbit rw=P2^6; //Read/Write(RW) pin of 16*2 lcd
sbit en=P2^5; //Enable(E) pin of 16*2 lcd
同樣,對于ADC0804與8051微控制器的接口,我們必須定義ADC0804連接到8051微控制器的引腳。ADC0804的RD引腳連接到P3.0,ADC0804的WR引腳連接到P3.1,ADC0804的INTR引腳連接到P3.2。數據引腳連接到 8051 微控制器的端口 1。

sbit rd_adc=P3^0; //Read(RD) pin of ADC0804
sbit wr_adc=P3^1; //Write(WR) pin of ADC0804
sbit intr_adc=P3^2; //Interrupt(INTR) pin of ADC0804
接下來,我們必須定義一些在程序中使用的函數。延時功能用于創建指定的時間延遲,c mdwrt功能用于向16 * 2 LCD顯示器發送命令,datawrt功能用于將數據發送到16 * 2 LCD顯示器,convert_display功能用于將ADC數據轉換為溫度并將其顯示在16 * 2 LCD顯示器上。

void delay(unsigned int) ; //function for creating delay
void cmdwrt(unsigned char); //function for sending commands to 16*2 lcd display
void datawrt(unsigned char); //function for sending data to 16*2 lcd display
void convert_display(unsigned char); //function for converting ADC value to temperature and display it on 16*2 lcd display
在下面的代碼部分中,我們將命令發送到 16*2 lcd。清除顯示、遞增光標、強制光標以 1 開頭等命令圣在指定的時間延遲后,線被一一發送到16 * 2液晶顯示器。

for(i=0;i<5;i++) //send commands to 16*2 lcd display one command at a time
{
cmdwrt(cmd[i]); //function call to send commands to 16*2 lcd display
delay(1);
}
在代碼的這一部分中,我們將數據發送到 16*2 lcd。要在16 * 2 LCD顯示屏上顯示的數據在指定的時間延遲后被逐個發送以顯示。

for(i=0;i<12;i++) //send data to 16*2 lcd display one character at a time
{
datawrt(data1[i]); //function call to send data to 16*2 lcd display
delay(1);
}

在代碼的這一部分中,我們將LM35傳感器產生的模擬電壓轉換為數字數據,然后將其轉換為溫度并顯示在16 * 2 LCD顯示屏上。為了使ADC0804開始轉換,我們必須在ADC0804的WR引腳上發送低到高脈沖,然后我們必須等待轉換結束。INTR 在轉換結束時變低。一旦INTR變為低電平,RD就會變為低電平,以將數字數據復制到8051微控制器的端口0。在指定的時間延遲后,下一個周期開始。這個過程將永遠重復。

while(1) //repeat forever
{
wr_adc=0; //send LOW to HIGH pulse on WR pin
delay(1);
wr_adc=1;
while(intr_adc==1); //wait for End of Conversion
rd_adc=0; //make RD = 0 to read the data from ADC0804
value=P1; //copy ADC data
convert_display(value); //function call to convert ADC data into temperature and display it on 16*2 lcd display
delay(1000); //interval between every cycles
rd_adc=1; //make RD = 1 for the next cycle
}
在下面的部分代碼中,我們將命令發送到 16*2 LCD 顯示器。該命令將復制到 8051 微控制器的端口 0。對于命令寫入,RS 設置為低電平。對于寫入操作,RW 設置為低電平。在使能(E)引腳上施加高到低脈沖以啟動命令寫入操作。

void cmdwrt (unsigned char x)
{
P0=x; //send the command to Port 0 on which 16*2 lcd is connected
rs=0; //make RS = 0 for command
rw=0; //make RW = 0 for write operation
en=1; //send a HIGH to LOW pulse on Enable(E) pin to start commandwrite operation
delay(1);
en=0;
}
在代碼的這一部分中,我們將數據發送到16 * 2 LCD顯示器。數據將復制到 8051 微控制器的端口 0。RS 設置為高,用于命令寫入。對于寫入操作,RW 設置為低電平。在使能(E)引腳上施加高到低脈沖以啟動數據寫入操作。

void datawrt (unsigned char y)
{
P0=y; //send the data to Port 0 on which 16*2 lcd is connected
rs=1; //make RS = 1 for command
rw=0; //make RW = 0 for write operation
en=1; //send a HIGH to LOW pulse on Enable(E) pin to start datawrite operation
delay(1);
en=0;
}
在代碼的這一部分中,我們將數字數據轉換為溫度并將其顯示在16 * 2 LCD顯示屏上。

void convert_display(unsigned char value)
{
unsigned char x1,x2,x3;
cmdwrt(0xc6); //command to set the cursor to 6th position of 2nd line on 16*2 lcd
x1=(value/10); //divide the value by 10 and store quotient in variable x1
x1=x1+(0x30); //convert variable x1 to ascii by adding 0x30
x2=value%10; //divide the value by 10 and store remainder in variable x2
x2=x2+(0x30); //convert variable x2 to ascii by adding 0x30
x3=0xDF; //ascii value of degree(°) symbol
datawrt(x1); //display temperature on 16*2 lcd display
datawrt(x2);
datawrt(x3);
datawrt('C');
}

完整代碼:

/*this program is for displaying the temperature on 16*2 lcd display using 8051 microcontroller , LM35 sensor and ADC0804*/



#include



sbit rs=P2^7; //Register Select(RS) pin of 16*2 lcd

sbit rw=P2^6; //Read/Write(RW) pin of 16*2 lcd

sbit en=P2^5; //Enable(E) pin of 16*2 lcd



sbit rd_adc=P3^0; //Read(RD) pin of ADC0804

sbit wr_adc=P3^1; //Write(WR) pin of ADC0804

sbit intr_adc=P3^2; //Interrupt(INTR) pin of ADC0804



void delay(unsigned int) ; //function for creating delay

void cmdwrt(unsigned char); //function for sending commands to 16*2 lcd display

void datawrt(unsigned char); //function for sending data to 16*2 lcd display

void convert_display(unsigned char); //function for converting ADC value to temperature and display it on 16*2 lcd display



void main(void) //main function

{

unsigned char i;

unsigned char cmd[]={0x38,0x01,0x06,0x0c,0x82};//16*2 lcd initialization commands

unsigned char data1[]="Temperature:";

unsigned char value;



P1=0xFF; //make Port 1 as input port

P0=0x00; //make Port 0 as output port



for(i=0;i<5;i++) //send commands to 16*2 lcd display one command at a time

{

cmdwrt(cmd[i]); //function call to send commands to 16*2 lcd display

delay(1);

}



for(i=0;i<12;i++) //send data to 16*2 lcd display one character at a time

{

datawrt(data1[i]); //function call to send data to 16*2 lcd display

delay(1);

}



intr_adc=1; //make INTR pin as input

rd_adc=1; //set RD pin HIGH

wr_adc=1; //set WR pin LOW



while(1) //repeat forever

{

wr_adc=0; //send LOW to HIGH pulse on WR pin

delay(1);

wr_adc=1;

while(intr_adc==1); //wait for End of Conversion

rd_adc=0; //make RD = 0 to read the data from ADC0804

value=P1; //copy ADC data

convert_display(value); //function call to convert ADC data into temperature and display it on 16*2 lcd display

delay(1000); //interval between every cycles

rd_adc=1; //make RD = 1 for the next cycle

}



}

void cmdwrt (unsigned char x)

{

P0=x; //send the command to Port 0 on which 16*2 lcd is connected

rs=0; //make RS = 0 for command

rw=0; //make RW = 0 for write operation

en=1; //send a HIGH to LOW pulse on Enable(E) pin to start commandwrite operation

delay(1);

en=0;

}

void datawrt (unsigned char y)

{

P0=y; //send the data to Port 0 on which 16*2 lcd is connected

rs=1; //make RS = 1 for command

rw=0; //make RW = 0 for write operation

en=1; //send a HIGH to LOW pulse on Enable(E) pin to start datawrite operation

delay(1);

en=0;

}

void convert_display(unsigned char value)

{

unsigned char x1,x2,x3;



cmdwrt(0xc6); //command to set the cursor to 6th position of 2nd line on 16*2 lcd



x1=(value/10); //divide the value by 10 and store quotient in variable x1

x1=x1+(0x30); //convert variable x1 to ascii by adding 0x30

x2=value%10; //divide the value by 10 and store remainder in variable x2

x2=x2+(0x30); //convert variable x2 to ascii by adding 0x30

x3=0xDF; //ascii value of degree(°) symbol



datawrt(x1); //display temperature on 16*2 lcd display

datawrt(x2);

datawrt(x3);

datawrt('C');

}



void delay(unsigned int z)

{

unsigned int p,q;

for(p=0;p
{

for(q=0;q<1375;q++); //repeat for 1375 times

}

}


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7646

    瀏覽量

    151869
  • 8051
    +關注

    關注

    3

    文章

    310

    瀏覽量

    51579
  • 數字溫度計
    +關注

    關注

    3

    文章

    109

    瀏覽量

    21780
收藏 人收藏

    評論

    相關推薦

    如何使用PIC微控制器和LM35溫度傳感制作數字溫度計

    在本教程中,我們將使用 PIC 微控制器和 LM35 溫度傳感制作數字溫度計。在本項目中,我們將使用 LM35 檢測
    的頭像 發表于 11-16 15:49 ?4125次閱讀
    如何使用PIC<b class='flag-5'>微控制器</b>和LM35<b class='flag-5'>溫度</b>傳感<b class='flag-5'>器</b>制作<b class='flag-5'>數字</b><b class='flag-5'>溫度計</b>

    如何使用8051微控制器和藍牙模塊構建Android手機控制的機器人

    在這個項目中,我們將使用8051微控制器和藍牙模塊構建Android手機控制的機器人。該機器
    發表于 11-18 16:37 ?1517次閱讀
    如何使用<b class='flag-5'>8051</b><b class='flag-5'>微控制器</b>和藍牙模塊<b class='flag-5'>構建</b><b class='flag-5'>一</b><b class='flag-5'>個</b>Android手機<b class='flag-5'>控制</b>的機器人

    數字溫度計的設計與實現

    數字溫度計的設計與實現、實驗目的1.了解DS18B20數字溫度傳感的工作原理。2.利用DS
    發表于 05-03 01:17 ?439次下載

    基于D的數字溫度計的設計

    基于D的數字溫度計的設計:介紹了高分辨率數字溫度訃/恒溫DSl626/DSl726的特點、功能和測溫原理,并以它為
    發表于 09-14 09:49 ?68次下載

    種基于SWC的數字溫度計的設計

    摘要:SWC是種將感溫元件與模數轉換(A/D)集成于體的新型數字溫度傳感。采用SWC設計了
    發表于 05-28 10:25 ?65次下載

    如何制作數字溫度計

    如何制作數字溫度計 現在您對Stamp和液晶顯示屏有了初步的了解,我們再加元件就可以制作一支數字
    發表于 08-21 16:10 ?7084次閱讀

    利用IC構建簡單溫度計式電壓指示

    利用IC構建簡單溫度計式電壓指示 本應用筆記介紹了產生溫度計式電壓指示的電路。該電路可以
    發表于 04-25 10:44 ?1019次閱讀
    利用IC<b class='flag-5'>構建</b><b class='flag-5'>簡單</b>的<b class='flag-5'>溫度計</b>式電壓指示

    元件制作的數顯溫度計電路

    這里介紹只用元件的(電源除外)的數顯溫度計的制作。它雖然非常簡單,但其性能與
    發表于 07-15 15:28 ?6942次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b>元件制作的數顯<b class='flag-5'>溫度計</b>電路

    數字溫度計準不準

    數字溫度計還算是比較準的,誤差≤0.5%,數字溫度計已經慢慢取代傳統的水銀溫度計,因為數字
    發表于 02-28 10:33 ?1.1w次閱讀

    基于微控制器數字溫度計

    電子發燒友網站提供《基于微控制器數字溫度計.zip》資料免費下載
    發表于 07-27 11:08 ?0次下載
    基于<b class='flag-5'>微控制器</b>的<b class='flag-5'>數字</b><b class='flag-5'>溫度計</b>

    使用ATTINY 85制作簡單溫度計

    電子發燒友網站提供《使用ATTINY 85制作簡單溫度計.zip》資料免費下載
    發表于 11-04 09:50 ?0次下載
    使用ATTINY 85制作<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的<b class='flag-5'>溫度計</b>

    如何創建簡單溫度計

    電子發燒友網站提供《如何創建簡單溫度計.zip》資料免費下載
    發表于 11-15 10:15 ?0次下載
    如何創建<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的<b class='flag-5'>溫度計</b>

    用硅二極管制作簡單溫度計

    教你如何用硅二極管制作簡單溫度計。 該項目是簡單
    發表于 12-06 11:54 ?1次下載

    基于STM8和DS18B20上的簡單數字溫度計

    方案介紹在 8 位微控制器 STM8S103F3P6 和 DS18B20 數字溫度傳感上制作的簡單數字
    發表于 12-27 15:49 ?3次下載

    如何用8051單片機做一個溫度計

    溫度傳感廣泛用于電子設備中,用來顯示實時溫度,比如我們經常看到數字時鐘便帶有溫度計,這是由
    的頭像 發表于 07-07 11:40 ?1098次閱讀
    主站蜘蛛池模板: 内射无码AV-区二区在线观看 | 国产亚洲一区二区三区啪 | 精品第一国产综合精品蜜芽 | 91精品视频网站 | 与邻居换娶妻子2在线观看 瑜伽牲交AV | 伊人色综合久久天天 | 日本国产精品无码一区免费看 | 果冻传媒在线观看资源七夕 | 春水福利app导航 | 久久精品热在线观看85 | 国产传媒在线播放 | 国产精品九九九久久九九 | 亚洲精品影院久久久久久 | 69日本xxⅹxxxxx18 | 成人动漫百度影音 | 男人吃奶摸下弄进去好爽 | 日本XXXXZZX片免费观看 | 国产婷婷色一区二区三区在线 | 9988电影网| 国产成人高清亚洲一区app | 亚洲国产成人久久一区www妖精 | 精品一品国产午夜福利视频 | 某上海少妇3P黑人完整版BD | 最近2018年手机中文字幕 | 无限资源日本2019版免费 | 91久久偷偷看嫩草影院无费 | www国产av偷拍在线播放 | av亚洲2017色天堂 | 中文字幕乱码一区久久麻豆樱花 | 国产高清美女一级毛片久久 | 高h超辣bl文 | 亚洲视频在线观看地址 | 国内精品蜜汁乔依琳视频 | 手机毛片在线观看 | 久久久久亚洲日日精品 | 久久久精品成人免费看 | www伊人网 | 美女的隐私蜜桃传媒免费看 | 无码专区无码专区视频网网址 | 内射少妇36P九色 | 小寡妇水真多好紧 |