历史上的今天
今天是:2024年11月20日(星期三)
2019年11月20日 | AVR单片机测温基于DS18B20
2019-11-20 来源:51hei
#include #include #include #define uint unsigned int #define uchar unsigned char #define dula_set PORTA |=BIT(3) //数码管段选 #define dula_clr PORTA &=~BIT(3) #define wale_set PORTA |=BIT(4)//数码管位选 #define wale_clr PORTA &=~BIT(4) #define DQ_IN DDRA&=~BIT(5) #define DQ_OUT DDRA|=BIT(5) #define DQ_SET PORTA|=BIT(5) #define DQ_CLR PORTA&=~BIT(5) #define DQ_R PINA&BIT(5)//读第2位 uchar smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//数码管段码 uchar smg_wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};// 数码管位码 uchar table[8]={0,0,0,0,0,0,0,0};//存放转换后的数 void delay() { uint a; for(a=0;a<300;a++); } ///////// void display(uchar *p)//显示函数 { uchar i; for( i=0; i<8; i++) //实现8位动态扫描循环 { dula_set; PORTB=smg_du[*p]; //将字模送到P0口显示 p++; if(i==1)//为1是在第2个数码管显示小数点 { PORTB|=BIT(7); } else { PORTB&=~BIT(7); } dula_clr; wale_set; PORTB=smg_wei[i]; wale_clr; delay(); } } ////// uchar ds18b20_reset(void)//复位 { uchar i; DQ_OUT; DQ_CLR; delay_n100us(5); DQ_SET; delay_100us(); DQ_IN; i=DQ_R; delay_n100us(5); return i; } ////// void ds18b20_write_byte(uchar value)//写一个字节 { uchar i; for(i=0;i<8;i++) { DQ_OUT; DQ_CLR; delay_10us(); if(value&0x01)//判断最低位是否为1 { DQ_SET; } delay_n100us(1); DQ_SET; value=value>>1; } } /////// uchar ds18b20_read_byte(void)//读一个字节 { uchar i; uchar value; for(i=0;i<8;i++) { value=value>>1; DQ_OUT; DQ_CLR; delay_10us(); DQ_SET; DQ_IN; if(DQ_R) { value|=0x80; } delay_50us(); } return value; } ////// void data_pro(uint temp)//数据处理 { table[0]=temp/1000; table[1]=(temp%1000)/100; table[2]=(temp%100)/10; table[3]=temp%10; } ////// void main(void) { uchar i,j,k; uint temp; DDRB=0xff; PORTB=0xff; DDRA|=BIT(3); PORTA|=BIT(3); DDRA|=BIT(4); PORTA|=BIT(4); while(1) { ds18b20_reset(); ds18b20_write_byte(0xcc);//跳过ROM ds18b20_write_byte(0x44);//启动转换 delay_n100us(20); ds18b20_reset(); ds18b20_write_byte(0xcc); ds18b20_write_byte(0xbe);//读取温度 i=ds18b20_read_byte();//lsb j=ds18b20_read_byte();//msb temp=j*256+i; temp=temp*6.25; data_pro(temp); for(k=0;k<20;k++) { display(table); } } }
上一篇:UART接口控制LED灯
史海拾趣
|
电子产品在发展的过程中,大多数都是跟人类活动相关的,为人类服务,或者代替人类从事某些活动,医疗电子因为与人的健康甚至生命息息相关,所以获得众多技术人员浸淫其中,乐此不疲。 混在医疗电子的工程师很不好过,因为这是一个可以救人也可以杀 ...… 查看全部问答> |
|
大家好:我的protel 99se中画pcb走线时可以走15度,30度等等好像是任意角度,我不想这样改怎么设置? 正常的是可以走45度,90度,135度 谢谢大家哦!… 查看全部问答> |
|
第一代LED恒流芯片:此类芯片主要的技术特点是基于固定频率的PWM芯片(如UC384X等),通过降低电感纹波电流,固定电感峰值电流来实现恒流。但由于开关频率固定,为避免次谐振荡,它的最大占空比只能用到50%,其应用范围就很受限了;再者由于电感纹 ...… 查看全部问答> |




