找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3530|回复: 4
打印 上一主题 下一主题
收起左侧

51单片机水温控制系统不懂为什么数码管总是不亮,跪求各位大佬解答

[复制链接]
跳转到指定楼层
楼主
被课程设计虐的死去活来,实在是没有思路特此前来一问~
题目的要求如下:初始温度50度,通过按键设定加热温度并显示在数码管上。环境温度由Ds18b20进行检测,传到单片机进行处理。蜂鸣器用来报警,温度超过70度发出警报。加热电路我的想法是用继电器和LED灯进行模拟,不知道可不可行。
现在栽到了数码管显示上面,仿真时会闪烁一下,然后熄灭不亮。我研究一天了,无奈实在看不懂,希望各位答疑解惑,先谢过了~程序和原理图如下。




这个仿真结果看得我也是一脸懵逼啊,咋个电平都不变换的?本人是真的纯单片机小白一枚了,请各位见谅!

这个程序是c和汇编的综合,我在编译的时候设置过了,编译是没有问题的,0error。就是显示不出来,急的我嘴上冒了三个大泡了!
数码管选用的是共阳,也试了把数码管的参数改成了0.1us,都没有用,不知道是程序出了问题还是电路都画错了,希望各位指点一二,跪谢!!!
如果看不清我上传了一份附件,欢迎各位下载指正!在此跪谢!!!

程序如下:
  1. #include         "reg52.h"
  2. #define          Disdata    P0                           //段码输出口
  3. #define          discan     P2                              //位选输出口
  4. #define         uchar unsigned char
  5. #define         uint unsigned int
  6. sbit                 DQ=P3^7;                                       //温度输入口
  7. sbit                  Ha=P1^5;                                       //加热器
  8. sbit                  Wa=P1^5;                    //报警器
  9. sbit                  Key_I=P3^2;
  10. sbit       Key_II=P3^3;
  11. uint                  h;
  12. uint                 key_[2]={5,0};                                //初始温度
  13. uchar                 dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  14. //数码管显示列表      "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"
  15. uchar code  scan_con[2]={0xfd,0xfe};   // 列扫描控制字 */
  16. uchar temp_data[2];
  17. //11US延时函数
  18. void delay(uint t)
  19. {
  20. for(;t>0;t--);
  21. }
  22. //显示扫描函数
  23. void scan()
  24. {
  25. uchar k;
  26. for(k=0;k<2;k++)                                         //2位LED扫描控制
  27. {Disdata=dis_7[key_[k]];
  28. discan=scan_con[k];}
  29. delay(20);
  30. discan=0xff;
  31. }
  32. //18B20写命令函数
  33. void write_byte(uchar val)
  34. {
  35. uchar i;
  36. for (i=8; i>0; i--) //
  37. {
  38. DQ=1;
  39. DQ = 0;
  40. DQ = 0;
  41. #pragma ASM
  42. NOP
  43. NOP
  44. NOP
  45. NOP
  46. NOP
  47. #pragma ENDASM                                  //5us
  48. DQ = val&0x01;                                      //最低位移出
  49. delay(6);                                             //66us
  50. val=val/2;                                            //右移一位
  51. }
  52. DQ = 1;
  53. delay(1);  
  54. }
  55. //18B20读1个字节函数
  56. uchar read_byte(void)
  57. {
  58. uchar i;
  59. uchar value = 0;
  60. for (i=8;i>0;i--)
  61. {
  62. DQ=1;
  63. #pragma ASM
  64. NOP
  65. NOP
  66. #pragma ENDASM
  67. value>>=1;
  68. DQ = 0;
  69. #pragma ASM
  70. NOP
  71. NOP
  72. NOP
  73. NOP
  74. #pragma ENDASM                                                                //4us
  75. DQ = 1;
  76. DQ = 0;
  77. #pragma ASM
  78. NOP
  79. NOP
  80. NOP
  81. NOP
  82. #pragma ENDASM                                                      
  83. if(DQ)value|=0x80;
  84. delay(6);                                                     //66us
  85. }
  86. DQ=1;
  87. return(value);
  88. }
  89. //18B20复位函数
  90. ow_reset(void)
  91. {
  92. char presence=1;
  93. while(presence)
  94. {
  95. while(presence)
  96. {
  97. DQ=1;
  98. DQ = 0;
  99. #pragma ASM
  100. NOP
  101. NOP
  102. #pragma ENDASM
  103. DQ=0;                                
  104. delay(50);                                                   
  105. DQ=1;                       
  106. delay(6);                 
  107. presence=DQ;                                                  // presence=0继续下一步
  108. }
  109. delay(45);                                                    //延时500us
  110. presence = ~DQ;
  111. }
  112. DQ=1;
  113. }
  114. void read_temp()
  115. {
  116. write_byte(0xCC);                                        // 发Skip ROM命令
  117. write_byte(0xBE);                                        // 发读命令
  118. temp_data[0]=read_byte();                                //温度低8位
  119. temp_data[1]=read_byte();                                //温度高8位
  120. ow_reset();
  121. write_byte(0xCC);                                        // Skip ROM
  122. write_byte(0x44);                                        // 发转换命令
  123. }
  124. //温度数据处理函数
  125. //越线报警
  126. //加热控制
  127. void work_temp()
  128. {uchar tt_[2],tt,key;
  129. key=key_[0]*10+key_[1];
  130. tt_[0]=temp_data[0]&0xf0;
  131. tt_[1]=temp_data[1]&0x0f;
  132. tt=tt_[1]+tt_[2];
  133. if(tt>0x70){Wa=0;}                                              //报警
  134. if(tt>key)
  135. Ha=1;                                                                  //关加热器
  136. if(tt<key)
  137. Ha=0;                                                                 //开加热器
  138. }
  139. main()
  140. {
  141. Wa=1;
  142. Ha=1;
  143. P3=0XFF;
  144. EX0=1;
  145. EX1=1;
  146. EA=1;
  147. Disdata=0xff;                                       //初始化端口
  148. discan=0X00;
  149. scan();
  150. write_byte(0xCC);                                        // 发Skip ROM命令
  151. write_byte(0xBE);
  152. while(1)
  153. {
  154. read_temp();                                        //读出18B20温度数据
  155. work_temp();                                        //加热控制
  156. }
  157. }                       
  158. //
  159. void intto(void) interrupt 0
  160. {delay(2);
  161. if(Key_I==1)
  162.   {
  163.   if(key_[0]==9)
  164.    key_[0]=0;
  165.   else
  166.   key_[0]++;
  167.   scan();
  168.   }
  169. Key_I=0;
  170. }
  171. void intt1(void) interrupt 1
  172. {delay(2);
  173. if(Key_II==1)
  174. {
  175.    if(key_[1]==9)
  176.      key_[1]=0;
  177.     else
  178.     key_[1]++;
  179.     scan();
  180.     }
  181. Key_II=0;
  182. }
复制代码



温度3.rar (79.43 KB, 下载次数: 19)




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:96682 发表于 2018-5-1 11:46 | 只看该作者
P0 口接上拉电阻,温度探头 VCC 接 5V,P1^5 重复了
回复

使用道具 举报

板凳
ID:319651 发表于 2018-5-1 19:45 | 只看该作者
wc86110 发表于 2018-5-1 11:46
P0 口接上拉电阻,温度探头 VCC 接 5V,P1^5 重复了

先感谢您的帮助!大佬,我按照你说的,重新画了一下DS18B20的接口,P0接了上拉电阻还把驱动换成了74ls373,程序也把Ha改成了p1^7,即和电路图相对应加热接口,可是数码管还是没亮,求解答啊QAQ程序仿真图我放下面了。
回复

使用道具 举报

地板
ID:319651 发表于 2018-5-1 19:47 | 只看该作者

按照楼上大佬的解答修改的仿真程序图,感谢大佬的回复,可惜我修改后数码管依旧没亮,搞不懂了……哎……
回复

使用道具 举报

5#
ID:319651 发表于 2018-5-2 18:32 | 只看该作者
求帮忙啊各位大佬,再次感谢了QAQ!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表