|
- /********************************************************************
- * 文件名 : 溫度采集DS18B20.c
- * 描述 : 該文件實(shí)現(xiàn)了用溫度傳感器件DS18B20對溫度的采集,并在數(shù)碼管上顯示出來。
- * 創(chuàng)建人 :
- * 版本號 : 2.0
- ***********************************************************************/
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define jump_ROM 0xCC
- #define start 0x44
- #define read_EEROM 0xBE
- sbit DQ = P2^3; //DS18B20數(shù)據(jù)口
- unsigned char TMPH,TMPL;
- uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- /********************************************************************
- * 名稱 : delay()
- * 功能 : 延時函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void delay(uint N)
- {
- int i;
- for(i=0; i<N; i++)
- ;
- }
- /********************************************************************
- * 名稱 : Delay_1ms()
- * 功能 : 延時子程序,延時時間為 1ms * x
- * 輸入 : x (延時一毫秒的個數(shù))
- * 輸出 : 無
- ***********************************************************************/
- void Delay_1ms(uint i)//1ms延時
- {
- uchar x,j;
- for(j=0;j<i;j++)
- for(x=0;x<=148;x++);
- }
- /********************************************************************
- * 名稱 : Reset()
- * 功能 : 復(fù)位DS18B20
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- uchar Reset(void)
- {
- uchar deceive_ready;
- DQ = 0;
- delay(29);
- DQ = 1;
- delay(3);
- deceive_ready = DQ;
- delay(25);
- return(deceive_ready);
- }
- /********************************************************************
- * 名稱 : read_bit()
- * 功能 : 從DS18B20讀一個位值
- * 輸入 : 無
- * 輸出 : 從DS18B20讀出的一個位值
- ***********************************************************************/
- uchar read_bit(void)
- {
- uchar i;
- DQ = 0;
- DQ = 1;
- for(i=0; i<3; i++);
- return(DQ);
- }
- /********************************************************************
- * 名稱 : write_bit()
- * 功能 : 向DS18B20寫一位
- * 輸入 : bitval(要對DS18B20寫入的位值)
- * 輸出 : 無
- ***********************************************************************/
- void write_bit(uchar bitval)
- {
- DQ=0;if(bitval==1)
- DQ=1;
- delay(5);
- DQ=1;
- }
- /********************************************************************
- * 名稱 : read_byte()
- * 功能 : 從DS18B20讀一個字節(jié)
- * 輸入 : 無
- * 輸出 : 從DS18B20讀到的值
- ***********************************************************************/
- uchar read_byte(void)
- {
- uchar i,m,receive_data;
- m = 1;
- receive_data = 0;
- for(i=0; i<8; i++)
- {
- if(read_bit())
- {
- receive_data = receive_data + (m << i);
- }
- delay(6);
- }
- return(receive_data);
- }
- /********************************************************************
- * 名稱 : write_byte()
- * 功能 : 向DS18B20寫一個字節(jié)
- * 輸入 : val(要對DS18B20寫入的命令值)
- * 輸出 : 無
- ***********************************************************************/
- void write_byte(uchar val)
- {
- uchar i,temp;
- for(i=0; i<8; i++)
- {
- temp = val >> i;
- temp = temp & 0x01;
- write_bit(temp);
- delay(5);
- }
- }
- /********************************************************************
- * 名稱 : Main()
- * 功能 : 主函數(shù)
- * 輸入 : 無
- * 輸出 : 無
- ***********************************************************************/
- void main()
- {
- uint temp;
- P2 = 0x00;
- while(1)
- {
- Reset();
- write_byte(jump_ROM);
- write_byte(start);
- Reset();
- write_byte(jump_ROM);
- write_byte(read_EEROM);
- TMPL = read_byte();
- TMPH = read_byte();
- temp = TMPL / 16 + TMPH * 16;
- P0 = table[temp/10%10];
- P2 = 6;
- Delay_1ms(5);
- P0 = table[temp%10];
- P2 = 7;
- Delay_1ms(5);
- }
- }
復(fù)制代碼
|
|