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

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

QQ登錄

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

搜索
查看: 2088|回復(fù): 2
收起左側(cè)

基于單片機(jī)的溫度傳感器程序有問(wèn)題

[復(fù)制鏈接]
ID:645942 發(fā)表于 2019-11-20 18:04 | 顯示全部樓層 |閱讀模式
基于單片機(jī)的溫度傳感器怎么使蜂鳴器報(bào)警啊??在線等解釋。這是我在網(wǎng)上找的程序,可是單片機(jī)溫度顯示到了32度了也不報(bào)警。

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit ds=P2^2;//溫度傳感器信號(hào)線
  6. sbit dula=P2^6;//數(shù)碼管段選線
  7. sbit wela=P2^7;//數(shù)碼管位選線
  8. sbit beep=P2^3;//蜂鳴器
  9. uint temp;//定義整型的溫度數(shù)據(jù)
  10. float f_temp;//定義浮點(diǎn)型的溫度數(shù)據(jù)
  11. uint warn_11=270;//定義溫度下限值 是溫度值乘以10后的結(jié)果
  12. uint warn_12=250;//定義溫度下限值
  13. uint warn_h1=300;//定義溫度上線值
  14. uint warn_h2=320;//定義溫度上線值
  15. sbit led0=P1^0;//控制發(fā)光二極管
  16. sbit led1=P1^1;
  17. sbit led2=P1^2;
  18. sbit led3=P1^3;
  19. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
  20. 0x07,0x7f,0x6f,//帶小數(shù)點(diǎn)的0~9編碼
  21. 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
  22. 0x87,0xff,0xff,0xef};//不帶小數(shù)點(diǎn)的0~0編碼
  23. void delay(uint z)//延時(shí)函數(shù)
  24. {
  25. uint x,y;
  26. for(x=z;x>0;x--)
  27. for(y=110;y>0;y--);
  28. }
  29. void dsreset(void)//DS1820復(fù)位,初始化函數(shù)
  30. {
  31. uint i;
  32. ds=0;
  33. i=103;
  34. while(i>0)i--;
  35. ds=1;
  36. i=4;
  37. while(i>0)i--;
  38. }
  39. bit tempreadbit(void)//讀1位數(shù)據(jù)函數(shù)
  40. {
  41. uint i;
  42. bit dat;
  43. ds=0;i++;//i++起延時(shí)作用
  44. ds=1;i++;i++;
  45. dat=ds;
  46. i=8;while(i>0)i--;
  47. return(dat);
  48. }
  49. uchar tempread(void)//讀1個(gè)字節(jié)數(shù)據(jù)函數(shù)
  50. {
  51. uchar i,j,dat;
  52. dat=0;
  53. for(i=1;i<=8;i++)
  54. {
  55. j=tempreadbit();
  56. dat=(j<<7)|(dat>>1);//讀出的數(shù)據(jù)最低位在最前面,這樣剛好一個(gè)字節(jié)在dat里
  57. }
  58. return(dat);
  59. }
  60. void tempwritebyte(uchar dat)//想DS18B20寫(xiě)一個(gè)字節(jié)數(shù)據(jù)函數(shù)
  61. {
  62. uint i;
  63. uchar j;
  64. bit testb;
  65. for(j=1;j<=8;j++)
  66. {
  67. testb=dat&0x01;
  68. dat=dat>>1;
  69. if(testb)//寫(xiě)1
  70. {
  71. ds=0;
  72. i++;i++;
  73. ds=1;
  74. i=8;while(i>0)i--;
  75. }
  76. else
  77. {
  78. ds=0;
  79. i=8;while(i>0)i--;
  80. ds=1;
  81. i++;i++;
  82. }
  83. }
  84. }
  85. void tempchange(void)//DS18B20開(kāi)始獲取溫度并轉(zhuǎn)換
  86. {
  87. dsreset();
  88. delay(1);
  89. tempwritebyte(0xcc);//寫(xiě)跳過(guò)讀ROM指令
  90. tempwritebyte(0x44);//寫(xiě)溫度轉(zhuǎn)換指令
  91. }
  92. uint get_temp()//讀取寄存器中存儲(chǔ)的溫度數(shù)據(jù)
  93. {
  94. uchar a,b;
  95. dsreset();
  96. delay(1);
  97. tempwritebyte(0xcc);
  98. tempwritebyte(0xbe);
  99. a=tempread();//讀低8位
  100. b=tempread();//讀高8位?
  101. temp=b;
  102. temp<<=8;//兩個(gè)字節(jié)組合為1個(gè)字
  103. temp=temp|a;
  104. f_temp=temp*0.0625;//溫度在寄存器中為12位,分辨率為0.0625度
  105. temp=f_temp*10+0.5;//乘以10表示小數(shù)點(diǎn)后面只取1位,加0.5是四舍五入
  106. f_temp=f_temp+0.05;
  107. return temp;//temp是整型
  108. }
  109. void display(uchar num,uchar dat)//數(shù)據(jù)顯示程序
  110. { //num是第幾個(gè)數(shù)碼管,dat是要顯示的數(shù)字
  111. uchar i;
  112. dula=0;
  113. P0=table[dat];//編碼賦給P0口
  114. dula=1;
  115. dula=0;
  116. wela=0;
  117. i=0xff;
  118. i=i&(~((0x01)<<(num)));//用i來(lái)存儲(chǔ)位選數(shù)據(jù),只有一位為0
  119. P0=i;
  120. wela=1;
  121. wela=0;
  122. delay(1);
  123. }
  124. void dis_temp(uint t)//顯示溫度數(shù)值函數(shù)t傳遞的是整型的溫度值
  125. {
  126. uchar i;
  127. i=t/100;//除以100得到商,為溫度的十位
  128. display(0,i);//在第1個(gè)數(shù)碼管上顯示
  129. i=t%100/10;//100取余再除以10得到商,為溫度的個(gè)位
  130. display(1,i+10);//在第2個(gè)數(shù)碼管上顯示
  131. i=t%100%10;//100取余再用10取余,為溫度的小數(shù)位
  132. display(2,i);//在第3個(gè)數(shù)碼管上顯示
  133. }
  134. void warn(uint s,uchar led)//蜂鳴器報(bào)警,燈閃爍
  135. {//s控制音調(diào),led控制燈
  136. uchar i;i=s;
  137. beep=0;//蜂鳴器響
  138. P1=~(led);//控制相應(yīng)的燈亮
  139. while(i--)
  140. {
  141. dis_temp(get_temp());//用溫度顯示函數(shù)起到延時(shí)作用
  142. }
  143. beep=1;//蜂鳴器不響
  144. P1=0xff;//控制相應(yīng)的燈滅
  145. i=s;
  146. while(i--)
  147. {
  148. dis_temp(get_temp());//用溫度顯示函數(shù)起到延時(shí)作用
  149. }
  150. }
  151. void deal(uint t)//溫度處理函數(shù)
  152. {
  153. uchar i;
  154. if((t>warn_12)&&(t<=warn_11))//大于25度小于27度
  155. {
  156. warn(40,0x01);//第1個(gè)燈亮,蜂鳴器發(fā)出滴?
  157. }
  158. else if(t<=warn_12)//小于25度
  159. {
  160. warn(10,0x03);//第1個(gè)和第2個(gè)燈亮,蜂鳴器發(fā)出滴
  161. }
  162. else if((t<warn_h2)&&(t>=warn_h1))//小于32度大于30度
  163. {
  164. warn(40,0x04);//第3個(gè)燈亮,蜂鳴器發(fā)出滴
  165. }
  166. else if(t>warn_h2)//大于32度
  167. {
  168. warn(10,0x0c);//第3,4個(gè)燈亮,蜂鳴器發(fā)出滴
  169. }
  170. else //在27度和30度之間時(shí)只是調(diào)用顯示函數(shù)延時(shí)
  171. {
  172. i=40;
  173. while(i--)
  174. {
  175. dis_temp(get_temp());
  176. }
  177. }
  178. }
  179. void init_com(void)//串口初始化函數(shù)
  180. {
  181. TMOD=0X20;
  182. PCON=0X00;
  183. SCON=0X50;
  184. TH1=0XFD;//波特率9600
  185. TL1=0XFD;
  186. TR1=1;
  187. }
  188. void comm(char*parr)//串口數(shù)據(jù)發(fā)送函數(shù)
  189. {
  190. do
  191. {
  192. SBUF=*parr++;//發(fā)送數(shù)據(jù)
  193. while(!TI);//等待發(fā)送完成標(biāo)志為1
  194. TI=0;//標(biāo)志清零
  195. }while(*parr);//保持循環(huán)直到字符為'\0'
  196. }
  197. void main()
  198. {
  199. uchar buff[4],i;
  200. dula=0;
  201. wela=0;
  202. init_com();
  203. while(1)
  204. {
  205. tempchange();//溫度轉(zhuǎn)換函數(shù)
  206. for(i=10;i>0;i--)
  207. {
  208. dis_temp(get_temp());//獲取溫度并顯示
  209. }
  210. deal(temp);//進(jìn)行溫度處理
  211. sprintf(buff,"%f",f_temp);//將浮點(diǎn)型溫度格式轉(zhuǎn)化為字符型
  212. for(i=10;i>0;i--)
  213. {
  214. dis_temp(get_temp());//溫度顯示
  215. }
  216. comm(buff);//串口發(fā)送數(shù)據(jù)
  217. for(i=10;i>0;i--)
  218. {
  219. dis_temp(get_temp());//溫度顯示
  220. }
  221. }   
  222. }
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:395068 發(fā)表于 2019-11-21 09:43 | 顯示全部樓層
先檢查蜂鳴器部分電路是否有問(wèn)題,然后再檢查程序是否有錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2019-11-21 13:31 | 顯示全部樓層
程序沒(méi)有問(wèn)題,是你的硬件電路與程序不符導(dǎo)致異常。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人精品在线视频 | 午夜一级做a爰片久久毛片 精品综合 | 欧美激情在线精品一区二区三区 | 91av免费观看 | 亚洲电影专区 | 少妇一级淫片免费播放 | 欧美一区二区三区视频 | 日本久久网 | 欧美一级在线观看 | 亚洲精品播放 | 国产精品久久福利 | 午夜视频免费 | 超碰国产在线 | 日韩免费高清视频 | 国产精品区一区二区三 | 中文字幕 亚洲一区 | 6080yy精品一区二区三区 | 亚洲精品乱码久久久久久按摩观 | 国产激情视频在线免费观看 | 一区二区三区欧美在线 | 嫩草影院网址 | 国产一区二区三区 | 国产欧美精品一区 | jdav视频在线观看免费 | 毛片一区二区三区 | 欧美激情一区二区三区 | 久久久久久久一区 | 国产精品视频播放 | 亚洲传媒在线 | 午夜免费看 | 91精品国产99久久 | 国产精品日韩一区 | 精品视频999| 看片91| 欧美日韩黄色一级片 | 久久久久国产精品一区二区 | 久久久免费少妇高潮毛片 | 一区二区三区久久久 | 成人一区二区三区在线 | 免费国产视频 | 天天操网 |