完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>
劳烦大神帮小弟看看问题出在那,下面时
DS18b20的读取程序;
目前初始化成功,但是读出来的数据时+000.0 程序跑到 u16 DS18b20_RTemp(void)的
else
{ Symbol =1; Rtemp = temp ; }里面去了。我是想的是+数就到这来。
我现在就想看看他读出来时什么数,所以还没计算。
/********************************************main.c********************************************/ #include "GPIO.h" #include "LCD1602.h" #include "DS18b20.h" void LCD1602_Dis(void); void ADC_Count(void); void Sys tick_ms(u16 nms); u8 dis1[] = {" Voltage: . V"}; u8 dis2[] = {" Temp: . ^C"}; u8 LCD1602_Number[] = {0x30 , 0x31 , 0x32 , 0x33 , 0x34 , 0x35 , 0x36 , 0x37 , 0x38 , 0x39 }; u8 LCD1602_fh[] ={ 0x2d , 0x2b }; u8 qian ,bai, shi ,ge; u8 DS18b20_bai,DS18b20_shi,DS18b20_ge,DS18b20_xiao; u8 flag ,Symbol ,Temp_js; int main() { GPIOB_RCC_Config(); GPIOB_Config(); LCD1602_init(); LCD1602_Dis(); while(1) { Systick_ms (1000); DS18b20_init(); DS18b20_RTemp(); DS18b20_Value(); if(flag ==1) { LCD1602_Pos(6); LCD1602_Wdata(LCD1602_fh[Symbol ]); LCD1602_Pos(7); LCD1602_Wdata(LCD1602_Number[DS18b20_bai ]); Systick_ms(50); LCD1602_Pos(8); LCD1602_Wdata(LCD1602_Number[DS18b20_shi ]); Systick_ms(50); LCD1602_Pos(9); LCD1602_Wdata(LCD1602_Number[DS18b20_ge ]); Systick_ms(50); LCD1602_Pos(11); LCD1602_Wdata(LCD1602_Number[DS18b20_xiao ]); Systick_ms(50); } else { LCD1602_Pos(6); LCD1602_Wdata(LCD1602_fh[0 ]); LCD1602_Pos(7); LCD1602_Wdata(LCD1602_fh[0 ]); Systick_ms(50); LCD1602_Pos(8); LCD1602_Wdata(LCD1602_fh[0 ]); Systick_ms(50); LCD1602_Pos(9); LCD1602_Wdata(LCD1602_fh[0 ]); Systick_ms(50); LCD1602_Pos(11); LCD1602_Wdata(LCD1602_fh[0 ]); Systick_ms(50); } } } void LCD1602_Dis(void) { u8 j = 0; LCD1602_Pos(0); while(dis2[ j ] != ' ') { LCD1602_Wdata(dis2[ j ]); j++; Systick_ms(1); } } /***********************************DS1802.c*****************************************************************/ #include "DS18b20.h" void DS1820_GPIO( void ) { RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA , ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits (GPIOA ,GPIO_Pin_All); } void DS18b20_Write (unsigned char wr) //????? { unsigned char i; for (i=0;i<8;i++) { GPIO_ResetBits(GPIOA , D18B20); //D18B20 = 0; Systick_us(2); //D18B20=wr&0x01; if(wr&0x01) GPIO_SetBits(GPIOA , D18B20); else GPIO_ResetBits(GPIOA , D18B20); Systick_us(45); //delay 45 uS //5 GPIO_SetBits(GPIOA , D18B20); //D18B20=1; wr >>= 1; } } unsigned char DS18b20_Read (void) //????? { unsigned char i,u=0; for(i=0;i<8;i++) { GPIO_ResetBits(GPIOA , D18B20); //D18B20 = 0; Systick_us (2); u >>= 1; GPIO_SetBits(GPIOA , D18B20); //D18B20 = 1; Systick_us (4); if(GPIO_ReadInputDataBit(GPIOA , D18B20) == 1) u |= 0x80; Systick_us (65); } return(u); } void DS18b20_init(void) { GPIO_SetBits(GPIOA , D18B20); Systick_us(2); GPIO_ResetBits(GPIOA , D18B20); Systick_us(490); GPIO_SetBits(GPIOA , D18B20); Systick_us(100); if(GPIO_ReadInputDataBit(GPIOA , D18B20)== 0) flag = 1; else flag = 0; Systick_us(480); GPIO_SetBits(GPIOA , D18B20); } u16 DS18b20_RTemp(void) { u8 TL; u16 TH,temp,Rtemp; DS18b20_init(); DS18b20_Write(0xcc); DS18b20_Write(0x44); Systick_us (200); DS18b20_init(); DS18b20_Write(0xcc); DS18b20_Write(0xbe); // Systick_us (680); TL = DS18b20_Read(); TH = DS18b20_Read(); TH = TH << 8; temp = TH | TL; if(temp == 0) { Symbol =1; Rtemp = temp *10 /16; } if((temp&0xf800)==0xf800) { Symbol = 0; // temp = (~temp)+1; Rtemp = temp ; } else { Symbol =1; Rtemp = temp ; } return Rtemp ; } void DS18b20_Value(void) { DS18b20_bai = DS18b20_RTemp() /1000; DS18b20_shi = DS18b20_RTemp() %1000/100; DS18b20_ge = DS18b20_RTemp() %100/10; DS18b20_xiao = DS18b20_RTemp() %10; } |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
使用stm32l451片子,对ad7606进行3通道100k采样值跳动问题?
995 浏览1 评论
STM32进行DMA数据转运,为什么只有A组最后一位数据被转运到B组去?
1483 浏览2 评论
1799 浏览3 评论
1396 浏览0 评论
嵌入式开发 Win11安装ST-Link 提示 设备描述符请求失败 怎么处理?
1534 浏览0 评论
小黑屋|手机版|Archiver|德赢Vwin官网(湘ICP备2023018690号)
GMT+8, 2024-8-24 04:44, Processed in 0.603650 second(s), Total 72, Slave 55 queries .
Powered by德赢Vwin官网 网
© 2015bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号