完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
`运行实验例程数码管显示的是19,而我建完工程,把实验历程的源码全部复制进去,运行的结果是数码管上先显示一下19然后迅速变为5,这是为什么?求大神详解。 ` |
|
相关推荐
8个回答
|
|
本帖最后由 NUIST_XKFYT 于 2017-3-6 10:18 编辑
最近刚好在写这个开发板的固件库,我用的是IAP15F2K61S2,希望对你有帮助。 回帖长度似乎有限制就只贴上关键源文件的部分,程序中的delay函数可以自己用STC-ISP的自带延时函数生成模块实现并引入到头文件,在此其相关头文件和C文件就不贴出了。 首先是涉及相关宏定义的头文件:
接着是硬件部分的头文件:
最后是硬件部分的C文件:
这个库函数的用法很简单,只需要在你自己的代码中定义一个浮点型的变量,例如v。然后令v=DS18B20_handleTemperature(DS18B20_getTemperature());即可获取当前的小数形式的温度值。 补充内容 (2017-3-10 23:16): 回头看了下头文件贴错了。特此补充! /* * @Author:NUIST_XKFYT * @Board:CT107D * @Coding:UTF-8 * @E-mail:weilun_fong@nuist.edu.cn * @IDE:Keil v4 * @Note:for operations on-board DS18B20 * * @Log:(1)2017-02-19:creat */ #ifndef ___CT107D_DS18B20_H___ #define ___CT107D_DS18B20_H___ /* * @Something important: * (1)All communication with the DS18B20 begins with an initialization sequence that consists of a reset pulse from the master followed by a presence pulse from the DS18B20. */ #include #include "CT107D_delay.h" #define DS18B20_reset DS18B20_init /* redefine function */ typedef enum { DS18B20_CMD_CONVT = 0x44, /* convert temperature */ DS18B20_CMD_SKROM = 0xCC, /* skip ROM */ DS18B20_CMD_RSCRA = 0xBE } CMD_DS18B20; ***it DS18B20_DQ = P1^4; /* ----- function map ----- */ extern u16 DS18B20_getTemperature(void); extern float DS18B20_handleTemperature(u16 t); extern u1 DS18B20_init(void); extern u8 DS18B20_readByte(void); extern void DS18B20_writeByte(u8 dat); #endif /* -------------------- END OF FILE -------------------- */
最佳答案
|
|
|
|
51的芯片?先贴程序出来啊,不贴程序你光问有啥用??
|
|
|
|
#include "reg52.h"
***it DQ = P1^4; //单总线延时函数 #ifndef STC12 void Delay_OneWire(unsigned int t) //STC89C52RC { while(t--); } #else void Delay_OneWire(unsigned int t) //STC12C5260S2 { unsigned char i; while(t--){ for(i=0;i<12;i++); } } #endif //通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; DQ = dat&0x01; Delay_OneWire(5); DQ = 1; dat >>= 1; } Delay_OneWire(5); } //从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; if(DQ) { dat |= 0x80; } Delay_OneWire(5); } return dat; } //DS18B20初始化 bit init_ds18b20(void) { bit initflag = 0; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); // 延时大于480us DQ = 1; Delay_OneWire(10); // 14 initflag = DQ; // initflag等于1初始化失败 Delay_OneWire(5); return initflag; } //DS18B20温度采集程序:整数 unsigned char rd_temperature(void) { unsigned char low,high; unsigned char temp; init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); //启动温度转换 Delay_OneWire(200); init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0xBE); //读取寄存器 low = Read_DS18B20(); //低字节 high = Read_DS18B20(); //高字节 temp = high<<4; temp |= (low>>4); return temp; } |
|
|
|
#include "reg52.h"
***it DQ = P1^4; //单总线延时函数 #ifndef STC12 void Delay_OneWire(unsigned int t) //STC89C52RC { while(t--); } #else void Delay_OneWire(unsigned int t) //STC12C5260S2 { unsigned char i; while(t--){ for(i=0;i<12;i++); } } #endif //通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; DQ = dat&0x01; Delay_OneWire(5); DQ = 1; dat >>= 1; } Delay_OneWire(5); } //从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; if(DQ) { dat |= 0x80; } Delay_OneWire(5); } return dat; } //DS18B20初始化 bit init_ds18b20(void) { bit initflag = 0; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); // 延时大于480us DQ = 1; Delay_OneWire(10); // 14 initflag = DQ; // initflag等于1初始化失败 Delay_OneWire(5); return initflag; } //DS18B20温度采集程序:整数 unsigned char rd_temperature(void) { unsigned char low,high; unsigned char temp; init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); //启动温度转换 Delay_OneWire(200); init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0xBE); //读取寄存器 low = Read_DS18B20(); //低字节 high = Read_DS18B20(); //高字节 temp = high<<4; temp |= (low>>4); return temp; } |
|
|
|
#include "reg52.h" ***it DQ = P1^4; //单总线延时函数 #ifndef STC12 void Delay_OneWire(unsigned int t) //STC89C52RC { while(t--); } #else void Delay_OneWire(unsigned int t) //STC12C5260S2 { unsigned char i; while(t--){ for(i=0;i<12;i++); } } #endif //通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; DQ = dat&0x01; Delay_OneWire(5); DQ = 1; dat >>= 1; } Delay_OneWire(5); } //从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; if(DQ) { dat |= 0x80; } Delay_OneWire(5); } return dat; } //DS18B20初始化 bit init_ds18b20(void) { bit initflag = 0; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); // 延时大于480us DQ = 1; Delay_OneWire(10); // 14 initflag = DQ; // initflag等于1初始化失败 Delay_OneWire(5); return initflag; } //DS18B20温度采集程序:整数 unsigned char rd_temperature(void) { unsigned char low,high; unsigned char temp; init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); //启动温度转换 Delay_OneWire(200); init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0xBE); //读取寄存器 low = Read_DS18B20(); //低字节 high = Read_DS18B20(); //高字节 temp = high<<4; temp |= (low>>4); return temp; } |
|
|
|
#include "reg52.h"
***it DQ = P1^4; //单总线延时函数 #ifndef STC12 void Delay_OneWire(unsigned int t) //STC89C52RC { while(t--); } #else void Delay_OneWire(unsigned int t) //STC12C5260S2 { unsigned char i; while(t--){ for(i=0;i<12;i++); } } #endif //通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; DQ = dat&0x01; Delay_OneWire(5); DQ = 1; dat >>= 1; } Delay_OneWire(5); } //从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; if(DQ) { dat |= 0x80; } Delay_OneWire(5); } return dat; } //DS18B20初始化 bit init_ds18b20(void) { bit initflag = 0; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); // 延时大于480us DQ = 1; Delay_OneWire(10); // 14 initflag = DQ; // initflag等于1初始化失败 Delay_OneWire(5); return initflag; } //DS18B20温度采集程序:整数 unsigned char rd_temperature(void) { unsigned char low,high; unsigned char temp; init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); //启动温度转换 Delay_OneWire(200); init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0xBE); //读取寄存器 low = Read_DS18B20(); //低字节 high = Read_DS18B20(); //高字节 temp = high<<4; temp |= (low>>4); return temp; } |
|
|
|
#include "reg52.h" ***it DQ = P1^4; //单总线延时函数 #ifndef STC12 void Delay_OneWire(unsigned int t) //STC89C52RC { while(t--); } #else void Delay_OneWire(unsigned int t) //STC12C5260S2 { unsigned char i; while(t--){ for(i=0;i<12;i++); } } #endif //通过单总线向DS18B20写一个字节 void Write_DS18B20(unsigned char dat) { unsigned char i; for(i=0;i<8;i++) { DQ = 0; DQ = dat&0x01; Delay_OneWire(5); DQ = 1; dat >>= 1; } Delay_OneWire(5); } //从DS18B20读取一个字节 unsigned char Read_DS18B20(void) { unsigned char i; unsigned char dat; for(i=0;i<8;i++) { DQ = 0; dat >>= 1; DQ = 1; if(DQ) { dat |= 0x80; } Delay_OneWire(5); } return dat; } //DS18B20初始化 bit init_ds18b20(void) { bit initflag = 0; DQ = 1; Delay_OneWire(12); DQ = 0; Delay_OneWire(80); // 延时大于480us DQ = 1; Delay_OneWire(10); // 14 initflag = DQ; // initflag等于1初始化失败 Delay_OneWire(5); return initflag; } //DS18B20温度采集程序:整数 unsigned char rd_temperature(void) { unsigned char low,high; unsigned char temp; init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0x44); //启动温度转换 Delay_OneWire(200); init_ds18b20(); Write_DS18B20(0xCC); Write_DS18B20(0xBE); //读取寄存器 low = Read_DS18B20(); //低字节 high = Read_DS18B20(); //高字节 temp = high<<4; temp |= (low>>4); return temp; } 这个程序有问题吗 |
|
|
|
NUIST_XKFYT 发表于 2017-3-6 10:15 嗯嗯,已经解决,谢谢大神 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
686 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-通用文件I/O模型之close
745 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第十五章 按键中断实验
702 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第十一章 FPIOA管理器实验
949 浏览 0 评论
786 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11462 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-14 16:29 , Processed in 0.805539 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号