ds18b20-C程序proteus仿真_第1頁
ds18b20-C程序proteus仿真_第2頁
ds18b20-C程序proteus仿真_第3頁
ds18b20-C程序proteus仿真_第4頁
ds18b20-C程序proteus仿真_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、推薦精選DS18B20測溫顯示,proteus仿真。Written by jinsongliang推薦精選具體程序如下Main.c:#include#includelib51v3.c#include18b20.c#includesegv3.cvoid main (void)unsigned char disp5=10,0,0,14,2;signed char temp=0;while(1)/*1、讀取溫度值*/temp=Get_Temputer();/2、顯示前處理*/if(temp0;n-);推薦精選18b20.c:/*時序很重要,移植時注意延時函數(shù)*/#define B20_PORTP1/

2、此處可以設(shè)置I/O口#define B20_CHANNEL0#define R_B20_CHANNEL()B20_PORT&(1B20_CHANNEL)#define W_B20_CHANNEL_1()B20_PORT|=(1B20_CHANNEL)#define W_B20_CHANNEL_0()B20_PORT&=(1B20_CHANNEL)#define SKIP_ROM0xCC#define TEMPUTER_CONVERT0x44#define READ_ROM0xBE/one/*初始化函數(shù),失敗會返回1,初始化過程見注釋若單片機(jī)讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,其延時的時

3、間從單片機(jī)發(fā)出的高電平算起最少要480微秒。之后單片機(jī)將數(shù)據(jù)線再次拉高到高電平“1”后結(jié)束。*/static unsigned char Init_18b20 (void) unsigned char x=0;W_B20_CHANNEL_1(); /1、從單片機(jī)拉高數(shù)據(jù)線開始 Delay_Nus(8);/6*n useconds lib51v3.cW_B20_CHANNEL_0(); Delay_Nus(81); W_B20_CHANNEL_1(); /2、單片機(jī)拉低數(shù)據(jù)線480us以上,拉高數(shù)據(jù)線,釋放 Delay_Nus(14);/3、之后ds18b20,1560us以后反應(yīng),拉高數(shù)據(jù)線

4、x=R_B20_CHANNEL();/4、單片機(jī)讀取數(shù)據(jù)線if(x)return x;Delay_Nus(20);return x;/x=0代表復(fù)位成功推薦精選/twostatic void Write_18b20(unsigned char w_data) unsigned char i; unsigned char temp; for(i=0;i8;i+) W_B20_CHANNEL_1();temp=w_data&(10);W_B20_CHANNEL_0();/單片機(jī)從高到低,拉低1us以上,并在15us內(nèi)產(chǎn)生寫間隙B20_PORT=temp=1; W_B20_CHANNEL_1();D

5、elay_Nus(4); /threestatic unsigned char Read_18b20(void) unsigned char i; unsigned char temp;unsigned char r_data=0x00;for(i=0;i=1;W_B20_CHANNEL_1();W_B20_CHANNEL_0();/從高到低15us內(nèi),再到高,產(chǎn)生讀間隙Delay_Nus(1);W_B20_CHANNEL_1();temp=B20_PORT(7-B20_CHANNEL);/讀數(shù)據(jù),從低位開始 temp&=(17);r_data+=temp;Delay_Nus(8); /整個讀

6、一位過程在60120us W_B20_CHANNEL_1();return r_data; 推薦精選/four/*若要讀出當(dāng)前的溫度數(shù)據(jù)我們需要執(zhí)行兩次工作周期,第一個周期為復(fù)位、跳過ROM指令、執(zhí)行溫度轉(zhuǎn)換存儲器操作指令、等待500uS溫度轉(zhuǎn)換時間。緊接著執(zhí)行第二個周期為復(fù)位、跳過ROM指令、執(zhí)行讀RAM的存儲器操作指令、讀數(shù)據(jù)(最多為9個字節(jié),中途可停止,只讀簡單溫度值則讀前2個字節(jié)即可)*/signed char Get_Temputer (void)/讀取溫度值,返回的帶符號字符型-55到+127;128無法顯示,初始化失敗會顯示00.C unsigned char tem_h,tem

7、_l;signed char temp;if(Init_18b20()=0)/復(fù)位18b20Write_18b20(SKIP_ROM);/跳過ROM Write_18b20(TEMPUTER_CONVERT);/溫度變換elsereturn temp=0;/Delay_Nus(100); if(Init_18b20()=0)/復(fù)位18b20Write_18b20(SKIP_ROM);/跳過ROMWrite_18b20(READ_ROM);/讀暫存存儲器elsereturn temp=0;tem_l=Read_18b20();/讀數(shù)據(jù) tem_h=Read_18b20(); /*只要高字符的低四

8、位和低字符的高四位,溫度范圍099,temp為補碼,直接由unsigned char 賦值給 signed char 內(nèi)容不變,代表的值改變*/temp=(tem_h4);return temp;推薦精選Segv3.c:#define COMMON_ANODIC0/共陽數(shù)碼管#define COMMON_CATHODAL 1/共陰數(shù)碼管#define SEG_CATEGORY0/選擇共陽數(shù)碼管#define SEG8_A(10)/段A亮?xí)r為0,屬共陽數(shù)碼管#define SEG8_B(11)#define SEG8_C(12)#define SEG8_D(13)#define SEG8_E(1

9、4)#define SEG8_F(15)#define SEG8_G(16)#define SEG8_DP(17)#defineSEG8_CHAR_0(SEG8_G&SEG8_DP)#defineSEG8_CHAR_1 (SEG8_A&SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)#defineSEG8_CHAR_2(SEG8_C&SEG8_F&SEG8_DP)#defineSEG8_CHAR_3(SEG8_E&SEG8_F&SEG8_DP)#defineSEG8_CHAR_4(SEG8_A&SEG8_D&SEG8_E&SEG8_DP)#defineSEG8_CHAR

10、_5(SEG8_B&SEG8_E&SEG8_DP)#defineSEG8_CHAR_6(SEG8_B&SEG8_DP)#defineSEG8_CHAR_7(SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)#defineSEG8_CHAR_8SEG8_DP#defineSEG8_CHAR_9(SEG8_E&SEG8_DP)#defineSEG8_CHAR_0#defineSEG8_CHAR_E(SEG8_B&SEG8_C&SEG8_DP)#defineSEG8_CHAR_R (SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_F&SEG8_DP)#defi

11、ne SEG8_CHAR_SUB (SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_E&SEG8_F&SEG8_DP)/#defineSEG8_CHAR_A/#defineSEG8_CHAR_B#defineSEG8_CHAR_C(SEG8_B&SEG8_C&SEG8_G&SEG8_DP)/#defineSEG8_CHAR_D/#defineSEG8_CHAR_F/#defineSEG8_CHAR_H#if SEG_CATEGORY=COMMON_ANODICstatic const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_

12、1,SEG8_CHAR_2,SEG8_CHAR_3,SEG8_CHAR_4,推薦精選SEG8_CHAR_5,SEG8_CHAR_6,SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,/SEG8_CODE10SEG8_CHAR_E,/SEG8_CODE11SEG8_CHAR_R,/SEG8_CODE12SEG8_CHAR_SUB,/SEG8_CODE13SEG8_CHAR_C/SEG8_CODE14;#elsestatic const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_CHAR_2

13、,SEG8_CHAR_3,SEG8_CHAR_4,SEG8_CHAR_5,SEG8_CHAR_6,SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,/SEG8_CODE10SEG8_CHAR_E,/SEG8_CODE11SEG8_CHAR_R,/SEG8_CODE12SEG8_CHAR_SUB,/SEG8_CODE13SEG8_CHAR_C/SEG8_CODE14 ;#endif#define SEG8_SLECT_PORTP3/此處可以設(shè)置I/O口#define BIT00#define BIT11#define BIT22#define BIT3

14、3#define SEG8_BIT0_ON()SEG8_SLECT_PORT|=(1BIT0)#define SEG8_BIT0_OFF()SEG8_SLECT_PORT&=(1BIT0)#define SEG8_BIT1_ON()SEG8_SLECT_PORT|=(1BIT1)#define SEG8_BIT1_OFF()SEG8_SLECT_PORT&=(1BIT1)#define SEG8_BIT2_ON()SEG8_SLECT_PORT|=(1BIT2)#define SEG8_BIT2_OFF()SEG8_SLECT_PORT&=(1BIT2)#define SEG8_BIT3_ON

15、()SEG8_SLECT_PORT|=(1BIT3)推薦精選#define SEG8_BIT3_OFF()SEG8_SLECT_PORT&=(1BIT3)#define SEG8_CODE_PORTP2/此處可以設(shè)置I/O口void Seg_Display (char *p)unsigned char temp4;temp0=SEG8_CODE*p+;temp1=SEG8_CODE*p+;temp2=SEG8_CODE*p+;temp3=SEG8_CODE*p+;if(*p4)#if SEG_CATEGORY=COMMON_ANODIC temp*p&=SEG8_DP;#elsetemp*p|=SEG8_DP;#endifunsigned char i;for(i=0;i150;i+)SEG8_CODE_PORT = temp0; SEG8_BIT0_ON(); Delay_Nus(6);/lib51v1.c SEG8_BIT0_OFF();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論