藍橋杯CT107D之ds18b20

2021-10-06 00:23:54 字數 2542 閱讀 4254

單匯流排延時函式

//單匯流排延時函式,此處延時函式很重要,根據自己的時鐘頻率而定

void

delay_onewire

(unsigned

int t)

//y5指令集,fosc:11059200l,軟體延時15us(t=1)

}

單匯流排寫時序

//通過單匯流排向ds18b20寫乙個位元組

void

write_ds18b20

(unsigned

char dat)

delay_onewire(2);}

單匯流排讀時序

//從ds18b20讀取乙個位元組

unsigned

char

read_ds18b20

(void

)delay_onewire(2

);}return dat;

}

//ds18b20裝置初始化

bit init_ds18b20

(void

)

//讀取溫度

float

rd_temperature

(void

)

#include

"reg52.h"

#include

"ds18b20.h"

#define fosc 11059200l

#define t1ms (65536-fosc/1000)

//1t模式

#define n 10

sfr auxr =

0x8e

;sbit n_relay = p0^4;

sbit n_buzz = p0^6;

sbit led_1 = p0^0;

sbit led_2 = p0^1;

unsigned

char code duan=

;//共陰極段選0~9

unsigned

char code wei=

;//共陰極位選 1--8

unsigned

char c[n]

;unsigned

char

smg_chai

(unsigned

int t)

;float temperature =0;

unsigned

int t =58;

unsigned

char s=

0,i1=0;

void

t0init()

void

main()

else

i1 =

smg_chai

(temperature)

;//注釋:鎖存器真麻煩

// p0=0x00; p2 = 0xc0; p2 = 0x00; //關閉下位選,達到消隱的目的。

p0=0xff

;//關閉下段選,達到消隱的目的。

p2 =

0xe0

; p0=

~duan[c[s]

]; p2 =

0x00

; p0=

0x00

;//進入位選前先把p0清零,禁止選通數碼管。

p2 =

0xc0

; p0=

~wei[

7-s]

; p2 =

0x00

; p0=

0xff;}

}/* timer0 interrupt routine */

void

tm0_isr

() interrupt 1

else

s=0;if

(count--==0

)}unsigned

char

smg_chai

(unsigned

int t)

c[i]

=t;}

return i;

}

程式還有許多可改進之處,歡迎各路大神批評指正。

單匯流排協議對時序要求嚴格,一定按照datasheet給的時序一步一步寫;讀取到錯誤值4095或者沒有值,一定先檢查時序。

ct107d開發板的鎖存器可能有其獨到之處,首先節省了io口,其次作為驅動使用,但是在使用之時注意何時開何時關。

寫程式邏輯和時序很重要。

溜了溜了~~~

藍橋杯CT107D之PCF8591

include reg52.h include intrins.h include iic.h 匯流排引腳定義 sbit sda p2 1 資料線 sbit scl p2 0 時鐘線 void iic delay unsigned char i while i 匯流排啟動條件 void iic st...

CT107D微控制器DS18b20程式

1 初始化 2 rom指令 3 暫存器指令 注意 官方提供的初始化驅動應延時500微妙,讀寫驅動應延時80微妙 include include define uchar unsigned char define uint unsigned int sbit dq p1 4 uchar code ta...

CT107D藍橋杯EEPROM使用(8)

今天我給大家講一下eeprom的使用,該記憶體採用的是iic通訊,所有我們要有乙個iic驅動程式,或者自己寫乙個,我前面寫過乙個,我這裡就不寫了。那麼下面我寫乙個開機計數的程式吧,這裡需要顯示出來。這裡我選擇數碼管顯示,數碼管驅動前面也有,我就直接用了 unsigned char read eepr...