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

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

QQ登錄

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

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

新手求助單片機(jī)ds18b20仿真問(wèn)題,仿真顯示亂碼

[復(fù)制鏈接]
ID:207108 發(fā)表于 2017-6-3 14:51 | 顯示全部樓層 |閱讀模式
仿真圖.png

  1. #include<reg52.h> // 晶振為 11.0592MHz
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit DQ=P2^5;// 接溫度傳感器
  5. sbit duan=P2^6;// 數(shù)碼管段選
  6. sbit wei=P2^7; // 數(shù)碼管位選
  7. uchar code numw[]={0x01,0x02,0x04,0x08,0x10,// 數(shù)碼管位選
  8. 0x20,0x40,0x80,0x00};
  9. uchar code numd[]={0x3f,0x06,0x5b,0x4f,0x66,// 數(shù)碼管段選顯示( 0—9)
  10. 0x6d,0x7d,0x07,0x7f,0x6f};
  11. uchar code numdg[]={0xbf,0x86,0xdb,0xcf,0xe6,// 數(shù)碼管“個(gè)”位段選顯示因?yàn)楸A粢晃恍?shù),
  12. 0xed,0xfd,0x87,0xff,0xef};// 所以各位后要顯示小數(shù)點(diǎn),所以需要重新編碼( 0— 9)
  13. uchar code numfh[]={0x40,0x00}; // 溫度 + — 符號(hào)位
  14. /******************1ms 延時(shí)函數(shù) ****************/
  15. void delay0(uint z)
  16. {
  17. uchar x,y;
  18. for(x=z;x>0;x--)
  19. for(y=110;y>0;y--);
  20. }
  21. /******************15us 延時(shí)函數(shù) ****************/
  22. void delay(uint z)
  23. {
  24. while(z--);
  25. }
  26. /****************** 初始化 DS18B20函數(shù) ****************/
  27. void reset_ds18b20()
  28. {
  29. uchar stat=0;
  30. DQ=1;
  31. delay(8);
  32. DQ=0;
  33. delay(80); //600us/12mhz
  34. DQ=1;
  35. delay(8);
  36. stat=DQ; // 高電平為存在,低電平為不存在( stat 應(yīng)該為 0)
  37. delay(4);
  38. // while(!DQ);/* 等待 DQ 變?yōu)楦唠娖?br />
  39. // 因?yàn)榇嬖诿}沖檢測(cè)結(jié)束后自動(dòng)拉高 */
  40. //return stat;
  41. }
  42. /****************** 寫(xiě)一個(gè)字節(jié)函數(shù) ****************/
  43. void write_byte(uchar dat)
  44. {
  45. uchar i;
  46. DQ=1; // 先拉高電平,為寫(xiě)作準(zhǔn)備
  47. for(i=0;i<8;i++)
  48. {DQ=0;
  49. DQ=dat&0x01;
  50. delay(4);//DS18B20 采樣單片機(jī)寫(xiě)給 DQ 線上的數(shù)據(jù)( 45us) ***************
  51. DQ=1;
  52. dat>>=1;
  53. }
  54. delay(4);
  55. }
  56. /****************** 讀一個(gè)字節(jié)函數(shù) ****************/
  57. uchar read_byte()
  58. {
  59. uchar vaul,i;
  60. DQ=1; // 先拉高電平,為讀作準(zhǔn)備
  61. for(i=0;i<8;i++)
  62. {
  63. DQ=0;
  64. vaul>>=1;
  65. DQ=1;
  66. if(DQ)
  67. vaul|=0x80;
  68. delay(4);
  69. }
  70. return vaul;
  71. }
  72. /****************** 讀取溫度值函數(shù) ****************/
  73. int read_temper()
  74. {
  75. uchar templ,temph, flag;
  76. int temp;
  77. reset_ds18b20();// 復(fù)位操作
  78. write_byte(0xcc);// 跳過(guò) ROM
  79. write_byte(0x44);// 溫度轉(zhuǎn)換
  80. delay(300);//***************************
  81. reset_ds18b20();// 復(fù)位操作
  82. write_byte(0xcc);// 跳過(guò) ROM
  83. write_byte(0xbe);// 讀內(nèi)部 RAM 內(nèi)容
  84. templ=read_byte();
  85. temph=read_byte();
  86. flag=(temph&0x80)>>7;// 判斷高字節(jié)符號(hào)位是 1 還是 0(1 為負(fù)溫度, 0 為正溫度)
  87. if(flag==0)
  88. //temp=(temph<<=4)+((templ&=0xf0)>>4);
  89. temp=(templ+temph*256)*0.625;// 將精度 0.0625 擴(kuò)大 10 倍,因?yàn)?temp 為整形,小數(shù)部分讀不到
  90. // 此項(xiàng)目需要保留一位小數(shù),所以 x10,小數(shù)點(diǎn)后移一位
  91. // 所以可得要保留幾位小數(shù)點(diǎn)就擴(kuò)大 10 的幾次方
  92. else
  93. temp=(~((templ+temph*256)-1))*(-0.625);
  94. return temp;}
  95. /****************** 顯示函數(shù) ****************/
  96. void display(int num)
  97. {
  98. uchar i,zf,bai,shi,ge,fen;
  99. if(num<0)
  100. {
  101. zf=0;// 溫度 — 符號(hào)位
  102. num=num*(-1);
  103. }
  104. else
  105. zf=1;// 溫度 + 符號(hào)位
  106. bai=num/1000;
  107. shi=num%1000/100;
  108. ge=num%100/10;
  109. fen=num%10;
  110. for(i=0;i<6;i++)
  111. {

  112. duan=1;
  113. switch(i)
  114. {
  115. case 0: if(zf==0)
  116. P0=numfh[zf];
  117. else
  118. if(bai!=0)
  119. P0=numd[bai];
  120. else
  121. if(shi!=0)
  122. P0=numd[shi];
  123. else
  124. P0=numdg[ge];
  125. break;
  126. case 1: if(zf==0&&shi!=0)
  127. P0=numd[shi];
  128. else
  129. if(zf==0&&shi==0)
  130. P0=numdg[ge];
  131. else
  132. if(zf!=0&&bai!=0)
  133. P0=numd[shi];
  134. else
  135. if(zf!=0&&bai==0&&shi!=0)
  136. P0=numdg[ge];
  137. else
  138. if(zf!=0&&bai==0&&shi==0)
  139. P0=numd[fen];
  140. break;
  141. case 2: if(zf==0&&shi!=0)
  142. P0=numdg[ge];
  143. else
  144. if(zf==0&&shi==0)
  145. P0=numd[fen];
  146. else
  147. if(zf!=0&&bai!=0)
  148. P0=numdg[ge];
  149. else
  150. if(zf!=0&&bai==0&&shi!=0)
  151. P0=numd[fen];
  152. else
  153. if(zf!=0&&bai==0&&shi==0)
  154. P0=0x63;
  155. break;
  156. case 3: if(zf==0&&shi!=0)
  157. P0=numd[fen];
  158. else
  159. if(zf==0&&shi==0)
  160. P0=0x63;
  161. else
  162. if(zf!=0&&bai!=0)
  163. P0=numd[fen];
  164. else
  165. if(zf!=0&&bai==0&&shi!=0)
  166. P0=0x63;
  167. else
  168. if(zf!=0&&bai==0&&shi==0)
  169. P0=0x39;
  170. break;
  171. case 4: if(zf==0&&shi!=0)
  172. P0=0x63;
  173. else
  174. if(zf==0&&shi==0)
  175. P0=0x39;
  176. else
  177. if(zf!=0&&bai!=0)
  178. P0=0x63;
  179. else
  180. if(zf!=0&&bai==0&&shi!=0)
  181. P0=0x39;
  182. else
  183. P0=0x00;
  184. break;
  185. case 5: if(zf==0&&shi!=0)
  186. P0=0x39;else
  187. if(zf!=0&&bai!=0)
  188. P0=0x39;
  189. else
  190. P0=0x00;
  191. break;
  192. }
  193. duan=0;
  194. P0=0x00;// 消影
  195. wei=1;
  196. P0=numw[i];
  197. wei=0;
  198. P1=0x00;// 消影
  199. delay0(10);
  200. }
  201. }
  202. /****************** 主函數(shù) ****************/
  203. void main()
  204. {
  205. while(1)
  206. {
  207. display(read_temper());
  208. }
  209. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2017-6-3 19:25 | 顯示全部樓層
弄清段碼組字符的原理就一定能解決問(wèn)題。
回復(fù)

使用道具 舉報(bào)

ID:207108 發(fā)表于 2017-6-3 20:58 | 顯示全部樓層
yzwzfyz 發(fā)表于 2017-6-3 19:25
弄清段碼組字符的原理就一定能解決問(wèn)題。

我是初學(xué),不是太懂,能幫忙找一下具體問(wèn)題嗎
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-6-3 23:23 | 顯示全部樓層
本帖最后由 zl2168 于 2017-6-4 08:23 編輯

顯示函數(shù)太復(fù)雜,沒(méi)必要。介紹你一個(gè)案例,供參考!
Proteus仿真一下,確認(rèn)有效。
實(shí)例97 DS18B20測(cè)溫.rar (51.78 KB, 下載次數(shù): 30)
DS18B20 測(cè)溫.jpg
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書(shū)上看了。到圖書(shū)館借,或到新華書(shū)店翻閱,或到網(wǎng)上書(shū)店打折購(gòu)買(mǎi)。

回復(fù)

使用道具 舉報(bào)

ID:207108 發(fā)表于 2017-6-4 15:05 | 顯示全部樓層
zl2168 發(fā)表于 2017-6-3 23:23
顯示函數(shù)太復(fù)雜,沒(méi)必要。介紹你一個(gè)案例,供參考!
先Proteus仿真一下,確認(rèn)有效。

先說(shuō)聲謝謝!書(shū)我會(huì)去看的,但還是想知道我這個(gè)為什么有問(wèn)題,顯示程序不知道哪里有問(wèn)題了
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-6-4 22:15 | 顯示全部樓層
wdg 發(fā)表于 2017-6-4 15:05
先說(shuō)聲謝謝!書(shū)我會(huì)去看的,但還是想知道我這個(gè)為什么有問(wèn)題,顯示程序不知道哪里有問(wèn)題了

那么多if-else,太復(fù)雜,程序不是這樣編的。至于哪里錯(cuò)了,你的程序太冗長(zhǎng),一般人沒(méi)耐心沒(méi)時(shí)間看的,只有自己對(duì)照正確的程序,耐心細(xì)致的查找。
回復(fù)

使用道具 舉報(bào)

ID:207882 發(fā)表于 2017-6-5 08:32 | 顯示全部樓層
先單獨(dú)調(diào)試數(shù)碼管看顯示正不正常,再看DS18b20程序部分,,時(shí)序很重要
回復(fù)

使用道具 舉報(bào)

ID:207882 發(fā)表于 2017-6-5 08:33 | 顯示全部樓層
先調(diào)試數(shù)碼管,看能不能正常顯示,再看18B20程序,主要時(shí)序不用弄錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:201102 發(fā)表于 2017-6-5 18:59 | 顯示全部樓層
數(shù)碼管顯示程序太長(zhǎng)了,就算實(shí)現(xiàn)了基本功能速度也會(huì)很慢
回復(fù)

使用道具 舉報(bào)

ID:207108 發(fā)表于 2017-6-6 13:31 | 顯示全部樓層
改了一下顯示程序,還是亂碼,各位大佬幫忙看一下啊,到底哪里有問(wèn)題
void display(int num)
{
uchar i,zf,bai,shi,ge,fen;
if(num<0)
{
zf=0;// 溫度 — 符號(hào)位

}
else
zf=1;// 溫度 + 符號(hào)位
bai=num/1000;
shi=num%1000/100;
ge=num%100/10;
fen=num%10;
for(i=0;i<7;i++)
{
wei=1;
P0=numw[i];
wei=0;
P1=0x00;// 消影
duan=1;
switch(i)
{
case 0: if(zf==0)
P0=numfh[zf];
else
P0=0x00;
delay0(5);
case 1: if(bai!=0)
P0=numd[bai];
else
P0=0x00;
delay0(5);
case 2: if(shi!=0)
P0=numd[shi];
else
if(bai==0)
P0=0x00;
else
P0=0x3f;
delay0(5);
case 3: if(ge!=0)
P0=numdg[ge];
delay0(5);
case 4:
P0=numd[fen];
delay0(5);
case 5:
P0=0x63;
delay0(5);
case 6:
P0=0x39;
delay0(5);       
}
duan=0;
P0=0x00;// 消影
delay0(5);
}
}
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2017-6-7 10:15 | 顯示全部樓層
給了你正確的東西,你不去看,那么你就等吧!網(wǎng)上有多少忽悠人的東西,給你實(shí)實(shí)在在的,你不看不學(xué),唉!
回復(fù)

使用道具 舉報(bào)

ID:208743 發(fā)表于 2017-6-7 11:30 | 顯示全部樓層
不要總用百度的東西,要自己寫(xiě)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 色站综合| 成人高潮片免费视频 | 日韩国产一区 | 在线视频福利 | 久草福利视频 | 欧美在线免费观看视频 | 天天操女人 | 国产黄a三级三级三级看三级男男 | av网址在线播放 | 一区在线观看 | 国产传媒在线观看 | 亚洲图片一区二区 | 精品在线观看视频 | 日韩av不卡在线 | 99热最新网址 | www国产亚洲精品久久网站 | 日本熟妇毛耸耸xxxxxx | 三上悠亚久久 | 天天操夜夜操狠狠操 | 成人在线视频观看 | 成人精品一区二区三区 | 日本精品中文字幕 | 成人三级在线观看 | 亚洲视频一区二区三区 | 精品一区二区三区视频 | 男女裸体无遮挡做爰 | 日韩视频第一页 | 免费看黄色aaaaaa 片 | 黄色一级片黄色一级片 | 国产高潮在线观看 | 超碰国产在线 | 日韩免费一区二区 | 久久久97 | 黄色片免费在线观看 | 一区视频在线 | 亚洲天堂一区二区三区 | aaa黄色 | 看黄色大片 | 国产高潮在线 | a级片在线观看 | 青娱乐99 |