ds18b20C程序proteus仿真设计.docx

上传人:scccc 文档编号:14175026 上传时间:2022-02-03 格式:DOCX 页数:13 大小:296.06KB
返回 下载 相关 举报
ds18b20C程序proteus仿真设计.docx_第1页
第1页 / 共13页
ds18b20C程序proteus仿真设计.docx_第2页
第2页 / 共13页
ds18b20C程序proteus仿真设计.docx_第3页
第3页 / 共13页
ds18b20C程序proteus仿真设计.docx_第4页
第4页 / 共13页
ds18b20C程序proteus仿真设计.docx_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《ds18b20C程序proteus仿真设计.docx》由会员分享,可在线阅读,更多相关《ds18b20C程序proteus仿真设计.docx(13页珍藏版)》请在三一文库上搜索。

1、JiTBikTKTXL2R=TPDUWU P0I11AD1 PO.a.ATS P0 3AAD3: P0I4JAT4 PQ5JAE5 POifcJADB R.7依07P2.1l/A9 PZAID PZ郭闻1 IPZ4/A12 P2.5/A13 P2WA14 P27/A1Spa.RXD ?3.1HXD P3.2r|NT0 P3,到府TTPG .4/10K方中P三即也P3 7iT?D 1714 1JDS18B208愠显示,proteus 仿真.Written by jinsongliang具体程序如下Main.c :#include#includelib51V3.c#include18b20.c#i

2、ncludesegv3.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 :/*时序很重要,移植时注意延时函数*/#define B20_PORT#define B20_CHANNEL#define R_B20_CHANNEL()#define W_B20_CHANNEL_1()#define W_B20_CHANNEL_0()#define SKIP_ROM#defin

3、e TEMPUTER_CONVERT#define READROMP1 /此处可以设置I/O 口0B20_PORT&(1B20_CHANNEL)B20_PORT|=(1B20_CHANNEL)B20_PORT&=(1B20_CHANNEL)0xCC0x440xBE/one/*初始化函数,失败会返回1,初始化过程见注释假设单片机读到了数据线上的低电平“0后,还要做延时,其延时的时间从单片机发出的高电平算起最少要480微秒.之后单片机将数据线再次拉高到高电平*/static unsigned char Init_18b20 (void) unsigned char x=0;W_B20_CHANNE

4、L_1();Delay_Nus(8);1后结束./1、从单片机拉高数据线开始/6*n useconds lib51v3.cW_B20_CHANNEL_0();Delay_Nus(81);W_B20_CHANNEL_1();Delay_Nus(14);x=R_B20_CHANNEL();/2、单片机拉低数据线 480us以上,拉高数据线,释放/3、之后ds18b20, 1560us以后反响,拉高数据线/4、单片机读取数据线if(x)return x;Delay_Nus(20); return x;/x=0代表复位成功/two static void Write_18b20(unsigned ch

5、ar 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内产生写间隙 B20_PORT=temp=1; W_B20_CHANNEL_1(); Delay_Nus(4); /three static unsigned char Read_18b20(void) ( unsigned char i; unsigned char temp; unsigned char

6、 r_data=0x00; for(i=0;i=1; W_B20_CHANNEL_1(); W_B20_CHANNEL_0();/从高到低15us内,再到高,产生读间隙Delay_Nus(1); W_B20_CHANNEL_1(); temp=B20_PORT(7-B20_CHANNEL);/ 读数据,从彳氐位开始temp&=(17); r_data+=temp; Delay_Nus(8);/ 整个读一位过程在 60120us W_B20_CHANNEL_1(); return r_data;) /four/*假设要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM旨令、

7、执行温度转换存储器操作指令、等待500uS温度转换时间.紧接着执行第二个周期为复位、跳过ROM旨令、执行读RAM勺存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值那么读前2个字节即可)*/signed char Get_Temputer (void) /读取温度值,返回的带符号字符型-55到+127; 128无法显示,初始化失败会显示 00.C (unsigned char tem_h,tem_l;signed char temp;if(Init_18b20()=0) (Write_18b20(SKIP_ROM);Write_18b20(TEMPUTER_CONVERT);

8、) elsereturn temp=0;Delay_Nus(100);if(Init_18b20()=0) (Write_18b20(SKIP_ROM);Write_18b20(READ_ROM);) elsereturn temp=0;tem_l=Read_18b20();tem_h=Read_18b20();/ 复位 18b20/跳过ROM/温度变换/ 复位 18b20/跳过ROM读暂存存储器读数据/*只要高字符的低四位和低字符的高四位,温度范围099,temp为补码,直接由unsigned char赋值给signedchar内容不变,代表的值改变*/temp=(tem_h4);retur

9、n temp;)Segv3.c :#define COMMON_ANODIC#define COMMON_CATHODAL#define SEG_CATEGORY0/共阳数码管1/共阴数码管0/选择共阳数码管#define SEG8_A(10)#define SEG8_B(11)#define SEG8_C(12)#define SEG8_D(13)#define SEG8_E(14)#define SEG8_F(15)#define SEG8_G(16)#define SEG8_DP(17)/段A亮时为0,属共阳数码管#define SEG8_CHAR_0#define SEG8_CHAR_

10、1#define SEG8_CHAR_2#define SEG8_CHAR_3#define SEG8_CHAR_4#define SEG8_CHAR_5#define SEG8_CHAR_6#define SEG8_CHAR_7#define SEG8_CHAR_8#define SEG8_CHAR_9#define SEG8_CHAR_#define SEG8_CHAR_E#define SEG8_CHAR_R(SEG8_G&SEG8_DP)(SEG8_A&SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)(SEG8_C&SEG8_F&SEG8_DP)(SEG8_E&

11、SEG8_F&SEG8_DP)(SEG8_A&SEG8_D&SEG8_E&SEG8_DP)(SEG8_B&SEG8_E&SEG8_DP)(SEG8_B&SEG8_DP)(SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)SEG8_DP(SEG8_E&SEG8_DP)0(SEG8_B&SEG8_C&SEG8_DP)(SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_F&SEG8_DP)#defineSEG8_CHAR_SUB(SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_E&SEG8_F&SEG8_DP)#defineSEG8_CHAR_

12、A#defineSEG8_CHAR_B #define SEG8_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_1,SEG8_CHAR_2,SEG8_CHAR_3,SEG8_CHAR_4,SEG8_CHAR_5, SEG8_CHAR_6, SEG8_CHAR_7, SEG8_CHAR_

13、8, SEG8_CHAR_9, SEG8_CHAR_, /SEG8_CODE10 SEG8_CHAR_E,/SEG8_CODE11SEG8_CHAR_R,/SEG8_CODE12SEG8_CHAR_SUB,/SEG8_CODE13 SEG8_CHAR_C /SEG8_CODE14 ;#elsestatic const unsigned char SEG8_CODE口=SEG8_CHAR_0, SEG8_CHAR_1, SEG8_CHAR_2, SEG8_CHAR_3, SEG8_CHAR_4, SEG8_CHAR_5, SEG8_CHAR_6, SEG8_CHAR_7, SEG8_CHAR_8

14、, SEG8_CHAR_9, SEG8_CHAR_,/SEG8_CODE10SEG8_CHAR_E,/SEG8_CODE11SEG8_CHAR_R,/SEG8_CODE12SEG8_CHAR_SUB/SEG8_CODE13 SEG8_CHAR_C/SEG8_CODE14;#endif#define SEG8_SLECT_PORT#define BIT0#define BIT1#define BIT2#define BIT3#define SEG8_BIT0_ON()#define SEG8_BIT0_OFF()#define SEG8_BIT1_ON()#define SEG8_BIT1_OF

15、F()#define SEG8_BIT2_ON()#define SEG8_BIT2_OFF()#define SEG8_BIT3_ON()P3 /此处可以设置I/O 口0123SEG8_SLECT_PORT|=(1BIT0)SEG8_SLECT_PORT&=(1BIT0)SEG8_SLECT_PORT|=(1BIT1)SEG8_SLECT_PORT&=(1BIT1)SEG8_SLECT_PORT|=(1BIT2)SEG8_SLECT_PORT&=(1BIT2)SEG8_SLECT_PORT|=(1BIT3)#define SEG8_BIT3_OFF() SEG8_SLECT_PORT&=(1

16、BIT3)#define SEG8_CODE_PORT 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*pFSEG8_DP;#endifunsigned char i;for(i=0;i150;i+)SEG8_CODE_PORT = temp0;SEG8_BIT0_ON();Delay_Nus(6);/lib51v1.cSEG8_BIT0_OFF();SEG8_CODE_PORT = temp1;SEG8_BIT1_ON();Delay_Nus(6);SEG8_BIT1_OFF();SEG8_CODE_PORT = temp2;SEG8_BIT2_ON();Delay_Nus(6);SEG8_BIT2_OFF();SEG8_CODE_PORT = temp3;SEG8_BIT3_ON();Delay_Nus(6);SEG8_BIT3_OFF();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1