ds18b20C程序proteus仿真.docx

上传人:rrsccc 文档编号:11074819 上传时间:2021-06-26 格式:DOCX 页数:10 大小:199.72KB
返回 下载 相关 举报
ds18b20C程序proteus仿真.docx_第1页
第1页 / 共10页
ds18b20C程序proteus仿真.docx_第2页
第2页 / 共10页
ds18b20C程序proteus仿真.docx_第3页
第3页 / 共10页
ds18b20C程序proteus仿真.docx_第4页
第4页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

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:/*时序很重要,移植时注意延时函数*/#define B20_PORTP1/此处可

2、以设置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/*初始化函数,失败会返回1,初始化过程见注释若单片机读到了数据线上的低电平“0”后,还要做延时,其延时的时间从

3、单片机发出的高电平算起最少要480 微秒。之后单片机将数据线再次拉高到高电平“1”后结束。*/static unsigned char Init_18b20 (void)unsigned char x=0;W_B20_CHANNEL_1();/1、从单片机拉高数据线开始Delay_Nus(8);/6*n useconds lib51v3.cW_B20_CHANNEL_0();Delay_Nus(81);W_B20_CHANNEL_1();/2、单片机拉低数据线480us 以上,拉高数据线,释放Delay_Nus(14);/3、之后 ds18b20, 1560us 以后反应,拉高数据线x=R_B

4、20_CHANNEL();/4、单片机读取数据线if(x)return x;Delay_Nus(20);return x;/x=0 代表复位成功-/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 内产生写间隙B20_PORT=temp=1;W_B20_CHANNEL_1();Delay_Nus(4

5、);/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 内,再到高,产生读间隙Delay_Nus(1);W_B20_CHANNEL_1();temp=B20_PORT(7-B20_CHANNEL);/ 读数据 ,从低位开始temp&=(17);r_data+=temp;Delay_Nus(8);/整个读一位过程在60120us

6、W_B20_CHANNEL_1();return r_data;-/four/*若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM 指令、执行温度转换存储器操作指令、等待500uS 温度转换时间。紧接着执行第二个周期为复位、跳过ROM 指令、执行读RAM 的存储器操作指令、读数据(最多为 9 个字节,中途可停止,只读简单温度值则读前2 个字节即可)*/signed char Get_Temputer (void) /读取温度值,返回的带符号字符型-55 到+127;128 无法显示,初始化失败会显示 00.Cunsigned char tem_h,tem_l;sign

7、ed char temp;if(Init_18b20()=0)/复位 18b20Write_18b20(SKIP_ROM);/跳过 ROMWrite_18b20(TEMPUTER_CONVERT);/温度变换elsereturn temp=0;/Delay_Nus(100);if(Init_18b20()=0)/ 复位 18b20Write_18b20(SKIP_ROM);/跳过 ROMWrite_18b20(READ_ROM);/读暂存存储器elsereturn temp=0;tem_l=Read_18b20();/读数据tem_h=Read_18b20();/*只要高字符的低四位和低字符的

8、高四位,温度范围099,temp 为补码,直接由unsigned char 赋值给signedchar 内容不变,代表的值改变*/temp=(tem_h4);return temp;-Segv3.c:#define COMMON_ANODIC0/共阳数码管#define COMMON_CATHODAL1/共阴数码管#define SEG_CATEGORY0/选择共阳数码管#define SEG8_A(10)/段 A 亮时为0,属共阳数码管#define SEG8_B(11)#define SEG8_C(12)#define SEG8_D(13)#define SEG8_E(14)#define

9、 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_5(SEG8_B&

10、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)#defineSEG8_CHAR

11、_SUB(SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_E&SEG8_F&SEG8_DP)/#define SEG8_CHAR_A/#define SEG8_CHAR_B#defineSEG8_CHAR_C(SEG8_B&SEG8_C&SEG8_G&SEG8_DP)/#define SEG8_CHAR_D/#define SEG8_CHAR_F/#define SEG8_CHAR_H#if SEG_CATEGORY=COMMON_ANODICstatic const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_C

12、HAR_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_CHAR_E,SEG8_CHAR_R,SEG8_CHAR_SUB,SEG8_CHAR_C;#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_

13、8,SEG8_CHAR_9,SEG8_CHAR_,SEG8_CHAR_E,SEG8_CHAR_R,SEG8_CHAR_SUB,SEG8_CHAR_C;#endif/SEG8_CODE10/SEG8_CODE11/SEG8_CODE12/SEG8_CODE13/SEG8_CODE14/SEG8_CODE10/SEG8_CODE11/SEG8_CODE12/SEG8_CODE13/SEG8_CODE14#define SEG8_SLECT_PORTP3/此处可以设置I/O 口#define BIT00#define BIT11#define BIT22#define BIT33#define SE

14、G8_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()SEG8_SLEC

15、T_PORT|=(1BIT3)#define SEG8_BIT3_OFF()SEG8_SLECT_PORT&=(1BIT3)-#define SEG8_CODE_PORTP2/此处可以设置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_ANODICtemp*p&=SEG8_DP;#elsetemp*p|=SEG8_DP;#endi

16、funsigned 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