|
內(nèi)容請(qǐng)自己看
制作出來的實(shí)物圖如下:
溫度_LCD顯示IMG_4787.JPG (201.66 KB, 下載次數(shù): 57)
下載附件
2018-12-29 21:36 上傳
溫度_LCD顯示IMG_4788.JPG (199.92 KB, 下載次數(shù): 55)
下載附件
2018-12-29 21:36 上傳
溫度_LCD顯示IMG_4790.JPG (313.86 KB, 下載次數(shù): 60)
下載附件
2018-12-29 21:36 上傳
溫度_LCD顯示IMG_4791.JPG (342.69 KB, 下載次數(shù): 55)
下載附件
2018-12-29 21:36 上傳
溫度_LCD顯示IMG_4792.JPG (314.2 KB, 下載次數(shù): 51)
下載附件
2018-12-29 21:36 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (17.39 KB, 下載次數(shù): 58)
下載附件
2018-12-29 21:36 上傳
0.png (6.61 KB, 下載次數(shù): 56)
下載附件
2018-12-29 21:37 上傳
單片機(jī)源程序如下:
- /***********************************************
- 該程序?yàn)闇囟葴y(cè)量
- 用到DS18B20、LCD1602
-
- 備注:程序的許多地方也是理解了他人的程序才寫出來的如果有理解錯(cuò)誤、書寫錯(cuò)誤的地方望大家留言指導(dǎo)
- ***********************************************/
- #include <reg52.h>
- bit flag = 0;
- unsigned int Temp = 0;
- unsigned char str[6]; //用來存字符串
- unsigned char high; //定時(shí)器的高低8位
- unsigned char low;
- unsigned char L; //溫度的小數(shù)部分
- unsigned char H; //整數(shù)部分
- extern bit Get_temperature(unsigned int *temp);
- extern void TemptoNum();
- extern void LCD_Start();
- extern void LCD_Sta(unsigned char x, unsigned char y, unsigned char *p);
- unsigned char NumberToString(unsigned char *str, unsigned int dat);
- void configtime0(unsigned char ms);
- /****************************************
- 主函數(shù)
- ****************************************/
- void main()
- {
- unsigned char len;
- bit flag_ack = 0;
-
- EA = 1; //開啟總中斷
- LCD_Start(); //LCD初始化
- configtime0(1); //配置定時(shí)器
- LCD_Sta(0,0,"Temp:"); //顯示"Temp:"字符
- TemptoNum(); //溫度轉(zhuǎn)換
-
- while(1)
- {
- if(flag) //1秒到了 標(biāo)識(shí)位為1
- {
- flag = 0; //標(biāo)識(shí)位置0
- flag_ack = Get_temperature(&Temp); //獲取溫度值
- if(flag_ack)
- {
- flag_ack = 0;
- H = Temp >> 4; //分離出整數(shù)部分
- L = Temp & 0x0F; //分離出小數(shù)部分
- L = L * 10 / 16; //將小數(shù)部分轉(zhuǎn)換成10進(jìn)制數(shù)取出(這個(gè)地方我也想了好久才想明白,一開始自己寫是寫了%10,但是這樣就存在不準(zhǔn)確的問題,這么寫我也是書上看來,先放大10倍,然后最大就是150,/16剛好為9,140/16為8,以此類推)
- len = NumberToString(str, L); //將小數(shù)部分轉(zhuǎn)換成字符
- LCD_Sta(16-len,0,str); //顯示在LCD的第一行的最后一位
- LCD_Sta(14,0,"."); //倒數(shù)第二位是小數(shù)點(diǎn)
- len +=1; //長度加1,方便取整數(shù)的位置
- len += NumberToString(str, H); //將整數(shù)部分轉(zhuǎn)換成字符 返回的長度加上小數(shù)點(diǎn)和小數(shù)的長度
- LCD_Sta(16-len,0,str); //顯示在LCD上
- }
- TemptoNum(); //再一次溫度轉(zhuǎn)換
- }
- }
- }
- /*******************************************
- 數(shù)字轉(zhuǎn)字符串
- *******************************************/
- unsigned char NumberToString(unsigned char *str, unsigned int dat)
- {
- unsigned char buf[5];
- unsigned char i = 0;
- unsigned char len;
-
- do{ //將數(shù)字的每一位都取出來放入buf[]中
- buf[i++] = dat%10;
- dat = dat / 10;
- }while(dat>0);
- len = i; //算出長度
- while(i-->0) //將每一位都轉(zhuǎn)換成字符
- {
- *str++ = buf[i] + '0';
- }
-
- return len;
- }
- /***************************************
- 定時(shí)器配置
- ***************************************/
- void configtime0(unsigned char ms)
- {
- unsigned long tmp;
-
- tmp = 12000000/12;
- tmp = tmp*ms/1000;
- tmp = 65536 - tmp;
- high = (unsigned char)(tmp>>8);
- low = (unsigned char)tmp;
- TMOD = 0x01;
- TH0 = high;
- TL0 = low;
- TR0 = 1;
- ET0 = 1;
- }
- /*************************************
- 中斷函數(shù)
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
溫度_LCD顯示.7z
(623 KB, 下載次數(shù): 359)
2018-12-29 22:02 上傳
點(diǎn)擊文件名下載附件
代碼資料 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|