找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3361|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)水溫控制系統(tǒng)不懂為什么數(shù)碼管總是不亮,跪求各位大佬解答

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
被課程設(shè)計(jì)虐的死去活來(lái),實(shí)在是沒(méi)有思路特此前來(lái)一問(wèn)~
題目的要求如下:初始溫度50度,通過(guò)按鍵設(shè)定加熱溫度并顯示在數(shù)碼管上。環(huán)境溫度由Ds18b20進(jìn)行檢測(cè),傳到單片機(jī)進(jìn)行處理。蜂鳴器用來(lái)報(bào)警,溫度超過(guò)70度發(fā)出警報(bào)。加熱電路我的想法是用繼電器和LED燈進(jìn)行模擬,不知道可不可行。
現(xiàn)在栽到了數(shù)碼管顯示上面,仿真時(shí)會(huì)閃爍一下,然后熄滅不亮。我研究一天了,無(wú)奈實(shí)在看不懂,希望各位答疑解惑,先謝過(guò)了~程序和原理圖如下。




這個(gè)仿真結(jié)果看得我也是一臉懵逼啊,咋個(gè)電平都不變換的?本人是真的純單片機(jī)小白一枚了,請(qǐng)各位見(jiàn)諒!

這個(gè)程序是c和匯編的綜合,我在編譯的時(shí)候設(shè)置過(guò)了,編譯是沒(méi)有問(wèn)題的,0error。就是顯示不出來(lái),急的我嘴上冒了三個(gè)大泡了!
數(shù)碼管選用的是共陽(yáng),也試了把數(shù)碼管的參數(shù)改成了0.1us,都沒(méi)有用,不知道是程序出了問(wèn)題還是電路都畫錯(cuò)了,希望各位指點(diǎn)一二,跪謝!!
如果看不清我上傳了一份附件,歡迎各位下載指正!在此跪謝!!

程序如下:
  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;                    //報(bào)警器
  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. //數(shù)碼管顯示列表      "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延時(shí)函數(shù)
  18. void delay(uint t)
  19. {
  20. for(;t>0;t--);
  21. }
  22. //顯示掃描函數(shù)
  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寫命令函數(shù)
  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個(gè)字節(jié)函數(shù)
  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復(fù)位函數(shù)
  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繼續(xù)下一步
  108. }
  109. delay(45);                                                    //延時(shí)500us
  110. presence = ~DQ;
  111. }
  112. DQ=1;
  113. }
  114. void read_temp()
  115. {
  116. write_byte(0xCC);                                        // 發(fā)Skip ROM命令
  117. write_byte(0xBE);                                        // 發(fā)讀命令
  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);                                        // 發(fā)轉(zhuǎn)換命令
  123. }
  124. //溫度數(shù)據(jù)處理函數(shù)
  125. //越線報(bào)警
  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;}                                              //報(bào)警
  134. if(tt>key)
  135. Ha=1;                                                                  //關(guān)加熱器
  136. if(tt<key)
  137. Ha=0;                                                                 //開(kāi)加熱器
  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);                                        // 發(fā)Skip ROM命令
  151. write_byte(0xBE);
  152. while(1)
  153. {
  154. read_temp();                                        //讀出18B20溫度數(shù)據(jù)
  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. }
復(fù)制代碼



溫度3.rar (79.43 KB, 下載次數(shù): 19)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

5#
ID:319651 發(fā)表于 2018-5-2 18:32 | 只看該作者
求幫忙啊各位大佬,再次感謝了QAQ!
回復(fù)

使用道具 舉報(bào)

地板
ID:319651 發(fā)表于 2018-5-1 19:47 | 只看該作者

按照樓上大佬的解答修改的仿真程序圖,感謝大佬的回復(fù),可惜我修改后數(shù)碼管依舊沒(méi)亮,搞不懂了……哎……
回復(fù)

使用道具 舉報(bào)

板凳
ID:319651 發(fā)表于 2018-5-1 19:45 | 只看該作者
wc86110 發(fā)表于 2018-5-1 11:46
P0 口接上拉電阻,溫度探頭 VCC 接 5V,P1^5 重復(fù)了

先感謝您的幫助!大佬,我按照你說(shuō)的,重新畫了一下DS18B20的接口,P0接了上拉電阻還把驅(qū)動(dòng)換成了74ls373,程序也把Ha改成了p1^7,即和電路圖相對(duì)應(yīng)加熱接口,可是數(shù)碼管還是沒(méi)亮,求解答啊QAQ程序仿真圖我放下面了。
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:96682 發(fā)表于 2018-5-1 11:46 | 只看該作者
P0 口接上拉電阻,溫度探頭 VCC 接 5V,P1^5 重復(fù)了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表