|
DS18B20讀取序列號(hào)+1602顯示,H我沒(méi)加進(jìn)去,序列號(hào)開(kāi)頭是28H,我只放進(jìn)去28.
單片機(jī)源程序如下:
- #include <intrins.h>
- #include <lcd.h>
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- #define uchar unsigned char
- #define uint unsigned int
-
- uint temp,flag1;
- int LedOut[4];
- int temper;
- sbit DQ=P3^7;
- uchar sn[8];//存序列號(hào)
- uchar code table[]={0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
-
- /*--------- DS18B20-----------*/
- void delay1(unsigned char i)
- {
- while(i--);
- }
- void initionds18b20()
- {
- DQ=0;
- delay1(128); //900us
- DQ=1;
- delay1(1);
- while(DQ); //檢測(cè)到應(yīng)答脈沖
- //i=103;while(i>0) i--;//等待870us
- delay1(100);
- }
- uchar readds18b20()
- { uchar i = 0;
- uchar dat = 0;
- for(i=8;i>0;i--)
- {
- DQ = 0; //將總線拉低,要在1us之后釋放總線
- //單片機(jī)要在此下降沿后的15us內(nèi)讀數(shù)據(jù)才會(huì)有效。
- _nop_(); //至少維持了1us,表示讀時(shí)序開(kāi)始
- dat >>= 1; //讓從總線上讀到的位數(shù)據(jù),依次從高位移動(dòng)到低位。
- DQ = 1; //釋放總線,此后DS18B20會(huì)控制總線,把數(shù)據(jù)傳輸?shù)娇偩上
- delay1(1); //延時(shí)7us,此處參照推薦的讀時(shí)序圖,盡量把控制器采樣時(shí)間放到讀時(shí)序后的15us內(nèi)的最后部分
- if(DQ) //控制器進(jìn)行采樣
- {
- dat |= 0x80; //若總線為1,即DQ為1,那就把dat的最高位置1;若為0,則不進(jìn)行處理,保持為0
- }
- delay1(10); //此延時(shí)不能少,確保讀時(shí)序的長(zhǎng)度60us。
- }
- return (dat);
- }
- void writeds18b20(uchar dat)
- {
- uchar i = 0;
- for(i=8;i>0;i--)
- {
- DQ = 0; //拉低總線
- _nop_(); //至少維持了1us,表示寫時(shí)序(包括寫0時(shí)序或?qū)?時(shí)序)開(kāi)始
- DQ = dat&0x01; //從字節(jié)的最低位開(kāi)始傳輸
- //指令dat的最低位賦予給總線,必須在拉低總線后的15us內(nèi),
- //因?yàn)?5us后DS18B20會(huì)對(duì)總線采樣。
- delay1(10); //必須讓寫時(shí)序持續(xù)至少60us
- DQ = 1; //寫完后,必須釋放總線,
- dat >>= 1;
- delay1(1);
- }
- }
- void rom() //讀取序列號(hào)
- {
- uchar i;
- int j;
- initionds18b20(); //復(fù)位
- delay1(1); //延時(shí)
- writeds18b20(0x33); //發(fā)送讀序列號(hào)子程序
- for (j=0;j<9;j++)
- {
- sn[j]=readds18b20(); //讀取序列號(hào)
- }
- }
- /*---------------lLCD----------------------*/
- delay(BYTE ms)
- { // 延時(shí)子程序
- BYTE i;
- while(ms--)
- {
- for(i = 0; i< 250; i++)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- BOOL lcd_bz()
- { // 測(cè)試LCD忙碌狀態(tài)
- BOOL result;
- rs = 0;
- rw = 1;
- ep = 1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- result = (BOOL)(P0 & 0x80);
- ep = 0;
- return result;
- }
- lcd_pos(BYTE pos)
- { //設(shè)定顯示位置
- LcdWriteCom(pos | 0x80);
- }
- void write_lcd_disp(char Rom)
- {
- uchar i,c,l,h;
-
- l = Rom & 0x0f; //取低4位
- h = Rom & 0xf0; //取高4位
- h >>= 4;
- if( ( h >= 0x00 )&&( h <= 0x09 ) )
- LcdWriteData(h+0x30); //取ASCII碼
- else
- LcdWriteData(h+0x37); //取ASCII碼
- if( ( l >= 0x00 )&&( l <= 0x09 ) )
- LcdWriteData(l+0x30); //取ASCII碼
- else
- LcdWriteData(l+0x37); //取ASCII碼
-
- delay(1);
- }
- void main()
- {
- int k;
- uchar a,b,c,d,e,f,g,h,j;
- LcdInit(); // 初始化LCD
-
- rom();
- a=sn[0]; //調(diào)用讀序列號(hào)子程序
- b=sn[1];
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
ds18b20讀取序列號(hào) 16022.rar
(40.62 KB, 下載次數(shù): 77)
2017-10-30 19:45 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|