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

下載本文檔

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

文檔簡介

1、DS18B20測溫顯示,Proteus 仿真。Written by jinsongliang具體程序如下#include#include #include #include void main (void)unsigned char disP5=10,0,0,14,2;signed char temP=0;while(1)/*1 、讀取溫度值 */ temp=Get_Temputer();/2 、顯示前處理 */if(temp0;n-);/*時序很重要,移植時注意延時函數(shù)*/ 此處可以設置 I/O 口#define B20_PORT#define B20_CHANNEL#define R_B2

2、0_CHANNEL()#define W_B20_CHANNEL_1()#define W_B20_CHANNEL_0()#define SKIP_ROM#define TEMPUTER_CONVERT#define READ_ROMP10B20_PORT&(1B20_CHANNEL)B20_PORT|=(1B20_CHANNEL)B20_PORT&=(1B20_CHANNEL)0xCC0x440xBE/one/*初始化函數(shù),失敗會返回 1,初始化過程見注釋 若單片機讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時,480 微秒。1”后結(jié)束。static unsigned char Init_18b

3、20 (void) unsigned char x=0;W_B20_CHANNEL_1();Delay_Nus(8);W_B20_CHANNEL_0(); Delay_Nus(81);W_B20_CHANNEL_1();Delay_Nus(14); x=R_B20_CHANNEL();/4/1/2、從單片機拉高數(shù)據(jù)線開始/6*n useconds、單片機拉低數(shù)據(jù)線 480us 以上,拉高數(shù)據(jù)線,釋放 、之后 ds18b20 ,1560us 以后反應,拉高數(shù)據(jù)線/3、單片機讀取數(shù)據(jù)線其延時的時間從單片機發(fā)出的高電平算起最少要 之后單片機將數(shù)據(jù)線再次拉高到高電平 */if(x)return x;/

4、x=0 代表復位成功Delay_Nus(20); return x;/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(); / 單片機從高到低,拉低 1us 以上,并在 15us 內(nèi)產(chǎn)生寫間隙B20_PORT=temp=1;B20_CHANNEL_1();Delay_Nus(4);/three static unsigned char Read

5、_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();Delay_Nus(1);W_B20_CHANNEL_1(); temp=B20_PORT(7-B20_CHANNEL); temp&=(17);r_data+=temp;Delay_Nus(8);/ 從高到低 15us 內(nèi),再到高,產(chǎn)生讀間隙/ 讀數(shù)據(jù) , 從低位開始/ 整個讀一位過程在 60120usB20_CHANNEL_1();return r_

6、data; /four/* 若要讀出當前的溫度數(shù)據(jù)我們需要執(zhí)行兩次工作周期,第一個周期為復位、跳過ROM旨令、執(zhí)行溫度轉(zhuǎn)換存儲器操作指令、等待500US溫度轉(zhuǎn)換時間。緊接著執(zhí)行第二個周期為復位、跳過ROM旨令、執(zhí)行讀 RAM的存儲器操作指令、讀數(shù)據(jù)(最多為 9個字節(jié),中途可停止,只讀簡單溫度值則讀前 2 個字節(jié)即可)*/ signed char Get_Temputer (void) / 讀取溫度值,返回的帶符號字符型 unsigned char tem_h,tem_l; signed char temp;-55 到+127;128 無法顯示,初始化失敗會顯示if(Init_18b20()=0

7、)/復位 18b20 elseWrite_18b20(SKIP_ROM);Write_18b20(TEMPUTER_CONVERT);/ 跳過 ROM 溫度變換return temp=0;/Delay_Nus(100);if(Init_18b20()=0)Write_18b20(SKIP_ROM);Write_18b20(READ_ROM);else/ 復位 18b20/ 跳過 ROM/ 讀暫存存儲器return temp=0;tem_l=Read_18b20(); tem_h=Read_18b20();/ 讀數(shù)據(jù)/* 只要高字符的低四位和低字符的高四位, char 內(nèi)容不變,代表的值改變*/

8、溫度范圍 099,temp為補碼,直接由 unsigned char 賦值給 signedtemp=(tem_h4); return temp;#define COMMON_ANODIC#define COMMON_CATHODAL#define SEG_CATEGORY/ 共陽數(shù)碼管/ 共陰數(shù)碼管/ 選擇共陽數(shù)碼管#define SEG8_A#define SEG8_B #define SEG8_C #define SEG8_D #define SEG8_E #define SEG8_F#define SEG8_G#define SEG8_DP#define SEG8_CHAR#define

9、0SEG8_CHAR_1#define SEG8_CHAR_2#define SEG8_CHAR_3(10)(11)(12)(13)(14)(15)(16)(17)(SEG8_G&SEG8_DP) (SEG8_A&SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP) (SEG8_C&SEG8_F&SEG8_DP) (SEG8_E&SEG8_F&SEG8_DP)/段 A 亮時為 0,屬共陽數(shù)碼管#define SEG8_CHAR_4#define SEG8_CHAR_5#define SEG8_CHAR_6(SEG8_A&SEG8_D&SEG8_E&SEG8_DP)(SEG8

10、_B&SEG8_E&SEG8_DP)(SEG8_B&SEG8_DP)#define SEG8_CHAR_7#define SEG8_CHAR_8(SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP) SEG8_DP#define SEG8_CHAR_9(SEG8_E&SEG8_DP)#define SEG8_CHAR0#define SEG8_CHAR_E#defineSEG8_CHAR_R(SEG8_B&SEG8_C&SEG8_DP)(SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_F&SEG8_DP)#defineSEG8_CHAR_SUB(SEG8_

11、A&SEG8_B&SEG8_C&SEG8_D&SEG8_E&SEG8_F&SEG8_DP)/#define/#define#define SEG8_CHAR_CSEG8_CHAR_ASEG8_CHAR_B(SEG8_B&SEG8_C&SEG8_G&SEG8_DP)/#define/#define/#defineSEG8_CHAR_DSEG8_CHAR_FSEG8_CHAR_H#if SEG_CATEGORY=COMMON_ANODIC static const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_CHAR_2,SEG8_CH

12、AR_3,SEG8_CHAR_4,SEG8_CHAR_5,SEG8_CHAR_6,SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,/SEG8_CODE10/SEG8_CODE11/SEG8_CODE12SEG8_CHAR_SUB, /SEG8_CODE13SEG8_CHAR_C /SEG8_CODE14SEG8_CHAR_E,SEG8_CHAR_R,;#elsestatic const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_CHAR_2,SEG8_CHAR_3, SEG8_CHAR

13、_4,SEG8_CHAR_5,SEG8_CHAR_6, SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,SEG8_CHAR_E,SEG8_CHAR_R,/SEG8_CODE10/SEG8_CODE11/SEG8_CODE12SEG8_CHAR_SUB/,/SEG8_CODE13 SEG8_CHAR_C /SEG8_CODE14;#endifP30/ 此處可以設置 I/O 口#define SEG8_SLECT_PORT#define BIT0#define BIT1#define BIT2#define BIT3#define SEG8 #defi

14、ne SEG8 #define SEG8 #define SEG8 #define SEG8 #define SEG8 #define SEG8BIT0_ON()BIT0_OFF()BIT1_ON()BIT1_OFF()BIT2_ON()BIT2_OFF()BIT3_ON()SLECT_PORT|=(1BIT0)#define SEG8_BIT3_OFF() #define SEG8_CODE_PORTSEG8_SEG8_SLECT_PORT&=(1BIT0)SEG8_SLECT_PORT|=(1BIT1)SEG8_SLECT_PORT&=(1BIT1)SEG8_SLECT_PORT|=(1B

15、IT2)SEG8_SLECT_PORT&=(1BIT2)SEG8_SLECT_PORT|=(1BIT3)SEG8_SLECT_PORT&=(1BIT3)P2 / 此處可以設置 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;#endif unsigned char i; for(i=0;i150;i+) SEG8_CODE_PORT = temp0;/SEG8_

溫馨提示

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

最新文檔

評論

0/150

提交評論