久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3330|回復: 4
收起左側

51單片機水溫控制系統不懂為什么數碼管總是不亮,跪求各位大佬解答

[復制鏈接]
ID:319651 發表于 2018-5-1 00:23 | 顯示全部樓層 |閱讀模式
被課程設計虐的死去活來,實在是沒有思路特此前來一問~
題目的要求如下:初始溫度50度,通過按鍵設定加熱溫度并顯示在數碼管上。環境溫度由Ds18b20進行檢測,傳到單片機進行處理。蜂鳴器用來報警,溫度超過70度發出警報。加熱電路我的想法是用繼電器和LED燈進行模擬,不知道可不可行。
現在栽到了數碼管顯示上面,仿真時會閃爍一下,然后熄滅不亮。我研究一天了,無奈實在看不懂,希望各位答疑解惑,先謝過了~程序和原理圖如下。
QQ截圖20180501001533.png
QQ截圖20180501001558.png
QQ截圖20180501001738.png

這個仿真結果看得我也是一臉懵逼啊,咋個電平都不變換的?本人是真的純單片機小白一枚了,請各位見諒!

這個程序是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)




回復

使用道具 舉報

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 | 顯示全部樓層
2.png
按照樓上大佬的解答修改的仿真程序圖,感謝大佬的回復,可惜我修改后數碼管依舊沒亮,搞不懂了……哎……
回復

使用道具 舉報

ID:319651 發表于 2018-5-2 18:32 | 顯示全部樓層
求幫忙啊各位大佬,再次感謝了QAQ!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频免费在线观看 | 日韩欧美在线视频一区 | 成人性视频免费网站 | 成年人在线观看视频 | 久久av一区二区三区 | 性色的免费视频 | 日韩成人在线播放 | 日韩国产中文字幕 | 亚洲一av| 一区二区三区国产 | 精品在线免费观看视频 | 中文字幕一级 | 日韩精品久久久久 | 中文字幕国产日韩 | 毛片韩国| 一区二区国产精品 | 亚洲黄色一区二区三区 | 精品一二区 | 天堂一区在线 | 一级视频在线免费观看 | www.国产日本 | 精品久久不卡 | 中文字幕一区二区三区日韩精品 | 日本小电影网站 | 中文字幕精品一区二区三区精品 | 青草青草久热精品视频在线观看 | av免费网站在线观看 | 国产一区二区精华 | 久久久久国产精品一区二区 | 日日摸夜夜添夜夜添特色大片 | 国产成人一区二区三区 | 日韩一区二区三区精品 | 一级大片免费 | 欧美久久一区二区三区 | 亚洲二区在线观看 | 亚洲精品亚洲人成人网 | 国产一区二区在线视频 | www国产成人免费观看视频,深夜成人网 | 性福视频在线观看 | 91久久久精品国产一区二区蜜臀 | 天天曰夜夜操 |