基于ds18b20的多点温度测量及报警课程设计报告(编辑修改稿)内容摘要:

t e m p 5 0H _ t e m p = 5 0 H _ t e m p = 5 0YYYYYYYYYY YNNNNN NNNNN 检测键盘扫描是否有返回值,判断是否有按键按下。 若无按键按下,则进行数码管显示数据处理;若有按键按下且为 K1 键, mode 自加 1 ,并判断 mode是否大于 2,若大于 2, mode 清零后输出,若不大于 2,直接输出 mode;若有按键按下且为 K2 键,判断 mode 是否为 1,若为 1,上限报警温度自加 1(不超过 125176。 ),若不为 1,进行下限报警温度自加 1(不超过 125176。 );若有按键按下且为 K3 键,判断 mode 是否为 1,若为 1,上限报警温度自减 1(不低于 50176。 ),若不为 1,进行下限报警温度自减 1(不超 过 50176。 )。 六. 设计总结及 参考资料 设计总结 本次课程设计我们将两个 DS18B20和 AT89C51单片机相结合实现了多点温度测量。 对单片机的独立控制外设而言难度不大,但由于不会用同一个 I/O 口控制多个 DS18B20,因此用两个独立的 I/O口分别对其控制,故编写的程序有些繁琐。 本次设计的不足是,第二个 DS18B20 测得温度的小数部分一直无法显示,经过多17 次调试仍然没有结果,但基本功能都已实现。 虽然课程设计结束了,但我们仍会努力将这一问题解决。 经过本次设计实验,充分认识到自己实际操作方面的不足以及程序编写不够熟练等问题,因此需要多加练习。 同时也更加明确了我们在接下来的学习中的侧重方向,作为工科专业应该更加注重理论与实际的结合,并且持之以恒地坚持,只有这样不断提高自己的专业素养。 参考文献 [1]李群芳 . 单片机微型计算机与接口技术第三版 .电子工业出版社, [2] 谢自美.电子线路设计.实验测试(第二版)[ M].武汉:华中科技大学出版社, 2020. [3] 丘玉娟. 用串行 ROM和 AT89C51实现电子密码锁[ J].电脑知识与技术 . 2020,11( 3): 34~ 36 [4]李金平 •电子系统设计 •电子工业出版社 •2020 18 七.附件 附件一:完整源程序 include include //定义使用的 IO// sbit LSA=P2^2。 sbit LSB=P2^3。 sbit LSC=P2^4。 //译码器 sbit DQ=P3^7。 //定义第一个 18B20 单总线端口 sbit DQ1=P3^6。 //定义第二个 18B20 单总线端口 sbit key1=P1^0。 //模式切换(上限,下限,当前) sbit key2=P1^1。 //温度上 /下限 ++ sbit key3=P1^2。 //温度上 /下限 sbit BEEP=P1^5。 //定义蜂鸣器接口 //定义全局变量 // unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x40,0x00}。 //数码管表,其中 display[10]. display[11] display[12]不显示 unsigned char mode=0,KEY。 //mode 是模式切换变量, KEY=key_back(按键返回值 ) unsigned char n=0。 //数码管位数 unsigned int temp_buff[9],temp1_buff[9],*p,*q,id_buff[8],id1_buff[8]。 //利用指针和数组进行数据传输 unsigned char symbol,symbol1。 //正负 标志位 unsigned char sflag,tltemp。 //负温度标志和临时暂存变量 unsigned char TL。 //存储暂存器的温度低位 unsigned char TH。 //存储暂存器的温度高位 unsigned char TN,TN1。 //TN:第一个 DS18B20 测得温度的整数部分, TN1:第二个DS18B20 测得温度的整数部分 unsigned char TD,TD1。 //TD:第一个 DS18B20 测得温度的小数部分, TD1:第二个DS18B20 测得温度的小数部分 char temp[8]。 //温度数据显示的缓存 char H_temp=30。 //上限报警温度 char L_temp=0。 //下限报警温度 bit flag。 //函数声明 // char cabs(char val)。 //取绝对值函数 void delay(unsigned char)。 //短延时函数 void delay1ms(unsigned int)。 //长延时函数 bit Init18B20(void)。 //第一个 DS18B20 初始化函数 19 bit Init118B20(void)。 //第二个 DS18B20 初始化函数 void Write0neChar(unsigned char)。 //向第一个 DS18B20 写一个字节 void Write0neChar1(unsigned char)。 //向第二个 DS18B20 写一个字节 unsigned char Read0neChar(void)。 //从第一个 DS18B20 读一个字节 unsigned char Read0neChar1(void)。 //从第二个 DS18B20 读一个字节 void Read_18B20(unsigned char)。 //读第一个 DS18B20 void Read1_18B20(unsigned char)。 //读第二个 DS18B20 ReadTemperature(void)。 //读第一个 DS18B20 的温度 ReadTemperature1(void)。 //读第二个 DS18B20 的温度 void beep(void)。 //蜂鸣器函数 void check_alarm(void)。 //检测第一个 DS18B20 是否超过限值并报警 void check1_alarm(void)。 //检测第二个 DS18B20 是否超过限值并报警 unsigned char key_scan()。 //按键扫描 void key_action(key)。 //按键处理 void display_transaction()。 //第一个 DS18B20 显示数据处理 void display_transaction1()。 //第二个 DS18B20 显示数据处理 //短延时 // void delay(unsigned char us) { while(us)。 } //长延时 // void delay1ms(unsigned int x) { unsigned char i,j。 for(i=0。 ix。 i++) for(j=1。 j120。 j++)。 } //蜂鸣器 // void beep(void) { BEEP=0。 delay1ms(1)。 BEEP=~BEEP。 delay1ms(1)。 } //按键扫描 // unsigned char key_scan(void) { unsigned char key_back。 key_back=0。 if(!key1|!key2|!key3) 20 { delay1ms(10)。 if(!key1|!key2|!key3)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。