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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6335|回復: 6
打印 上一主題 下一主題
收起左側

單片機匯編語言數字溫度計設計

[復制鏈接]
跳轉到指定樓層
樓主
設計要求:
數字溫度計
設計一個具有特定功能的數字溫度計。該數字溫度計上電或按鍵復位后能自動顯示系統提示符“P.”,進入準備工作狀態。測量溫度范圍0℃~99℃,測量精度小數點后兩位,可以通過開始和結束鍵控制數字溫度計的工作狀態。
下面是我的仿真圖和匯編程序,但是我的程序只能精確到小數點后一位(0.1),而且不能顯示系統提示符“P.”
程序如下:











  1. ;================================================================
  2. ;DS18B20溫度計
  3. ;采用4位LED共陽顯示器顯示測溫值,顯示精度0.1℃,測溫范圍-55~+125℃
  4. ;用AT89C51單片機,12MHz晶振
  5. ;============================常數定義=============================
  6. TIMEL EQU  0E0H         ;20ms,定時器0時間常數
  7. TIMEH EQU  0B1H
  8. TEMPHEAD   EQU  36H
  9. ;==========================工作內存定義============================
  10. BITST     DATA  20H
  11. TIME1SOK    BIT   BITST.1
  12. TEMPONEOK BIT   BITST.2
  13. TEMPL    DATA  26H
  14. TEMPH    DATA  27H
  15. TEMPHC    DATA  28H
  16. TEMPLC    DATA  29H
  17. ;============================= 引腳定義===========================
  18. TEMPDIN    BIT   P3.7
  19. ;============================= 中斷向量區=========================
  20. ORG     0000H
  21. LJMP    START
  22. ORG    00BH
  23. LJMP    T0IT
  24. ;=============================系統初始化==========================
  25. ORG 100H
  26. START:   MOV SP,#60H
  27. CLSMEM:  MOV  R0,#20H
  28. MOV  R1,#60H
  29. CLSMEM1: MOV  @R0,#00H
  30. INC  R0
  31. DJNZ  R1,CLSMEM1
  32. MOV  TMOD,#00100001B   ;定時器0工作方式1(16BIT)
  33. MOV TH0,#TIMEL
  34. MOV  TL0,#TIMEH        ;20ms
  35. SJMP INIT
  36. ERROR: NOP
  37. LJMP  START
  38. NOP
  39. INIT: NOP
  40. SETB  ET0
  41. SETB  TR0
  42. SETB EA
  43. MOV  PSW,#00H
  44. CLR  TEMPONEOK
  45. LJMP  MAIN
  46. ;====================== 定時器0中斷服務程序=======================
  47. T0IT: PUSH  PSW
  48. MOV  PSW,#10H
  49. MOV  TH0,#TIMEH
  50. MOV  TL0,#TIMEL
  51. INC  R7
  52. CJNE  R7,#32H,T0IT1
  53. MOV  R7,#00H
  54. SETB  TIME1SOK    ;1s定時到標志
  55. T0IT1: POP  PSW
  56. RETI
  57. ;============================= 主程序=============================
  58. MAIN: LCALL  DISP1   ;調用顯示子程序
  59. JNB  TIME1SOK,MAIN
  60. CLR  TIME1SOK  ;測溫每1s一次
  61. JNB  TEMPONEOK,MAIN2 ;上電時先溫度轉換一次
  62. LCALL  READTEMP1 ;讀出溫度值子程序
  63. LCALL  CONVTEMP  ;溫度BCD碼計算處理子程序
  64. LCALL  DISPBCD   ;顯示區BCD碼溫度值刷新子程序
  65. LCALL  DISP1      ;消閃爍,顯示一次
  66. MAIN2:  LCALL READTEMP   ;溫度轉換開始
  67. SETB  TEMPONEOK
  68. LJMP  MAIN
  69. ;============================= 子程序區===========================
  70. ;RESET DS18B20
  71. ;================================================================
  72. INITDS1820:SETB  TEMPDIN
  73. NOP
  74. NOP
  75. CLR  TEMPDIN
  76. MOV  R6,#0A0H   ;DELAY 480us
  77. DJNZ  R6,$
  78. MOV  R6,#0A0H
  79. DJNZ  R6,$
  80. SETB  TEMPDIN
  81. MOV  R6,#32H     ;DELAY 70us
  82. DJNZ  R6,$
  83. MOV R6,#3CH
  84. LOOP1820: MOV  C,TEMPDIN
  85. JC  INITDS1820OUT
  86. DJNZ  R6,LOOP1820
  87. MOV  R6,#064H
  88. DJNZ  R6,$
  89. SJMP  INITDS1820
  90. RET
  91. INITDS1820OUT: SETB  TEMPDIN
  92. RET
  93. ;====== 讀DS18B20的程序,從DS18B20中讀出一個字節的數據=============
  94. READDS1820: MOV  R7,#08H
  95. SETB  TEMPDIN
  96. NOP
  97. NOP
  98. READDS1820LOOP: CLR  TEMPDIN
  99. NOP
  100. NOP
  101. NOP
  102. SETB  TEMPDIN
  103. MOV  R6,#07H    ;DELAY 15us
  104. DJNZ  R6,$
  105. MOV  C,TEMPDIN
  106. MOV  R6,#3CH   ;DELAY 120us
  107. DJNZ  R6,$
  108. RRC  A
  109. SETB  TEMPDIN
  110. DJNZ  R7,READDS1820LOOP
  111. MOV  R6,#3CH   ;DELAY 120 us
  112. DJNZ  R6,$
  113. RET
  114. ;======== 寫DS18B20的程序,從DS18B20中寫一個字節的數據=============
  115. WRITEDS1820: MOV  R7,#08H
  116. SETB  TEMPDIN
  117. NOP
  118. NOP
  119. WRITEDS1820LOP: CLR  TEMPDIN
  120. MOV  R6,#07H    ;DELAY 15us
  121. DJNZ  R6,$
  122. RRC  A
  123. MOV  TEMPDIN,C
  124. MOV  R6,#34H    ;DELAY 104us
  125. DJNZ  R6,$
  126. SETB  TEMPDIN
  127. DJNZ  R7,WRITEDS1820LOP
  128. RET
  129. ;========================= READ TEMP ===========================
  130. READTEMP: LCALL  INITDS1820
  131. MOV  A,#0CCH
  132. LCALL  WRITEDS1820   ;SKIP ROM
  133. MOV  R6,#34H        ;DELAY 104us
  134. DJNZ  R6,$
  135. MOV  A,#44H
  136. LCALL  WRITEDS1820   ;START CONVERSION
  137. MOV  R6,#34H         ;DELAY 104
  138. DJNZ  R6,$
  139. RET
  140. READTEMP1: LCALL INITDS1820
  141. MOV  A,#0CCH
  142. LCALL  WRITEDS1820 ;SKIP ROM
  143. MOV  R6,#34H    ;DELAY 104us
  144. DJNZ  R6,$
  145. MOV  A,#0BEH
  146. LCALL  WRITEDS1820  ;SCRATCHPAD
  147. MOV  R6,#34H        ;DELAY 104us
  148. DJNZ  R6,$
  149. MOV  R5,#09H
  150. MOV  R0,#TEMPHEAD
  151. MOV  B,#00H
  152. READTEMP2: LCALL  READDS1820
  153. MOV  @R0,A
  154. INC  R0
  155. READTEMP21: LCALL  CRC8CAL
  156. DJNZ  R5,READTEMP2
  157. MOV  A,B
  158. JNZ  READTEMPOUT
  159. MOV  A,TEMPHEAD+0
  160. MOV  TEMPL,A
  161. MOV  A,TEMPHEAD+1
  162. MOV  TEMPH,A
  163. READTEMPOUT: RET
  164. ;================== 處理溫度BCD碼子程序==========================
  165. CONVTEMP: MOV  A,TEMPH
  166. ANL  A,#80H
  167. JZ   TEMPC1
  168. CLR  C
  169. MOV  A,TEMPL
  170. CPL  A
  171. ADD  A,#01H
  172. MOV  TEMPL,A
  173. MOV  A,TEMPH   ;-
  174. CPL  A
  175. ADDC  A,#00H
  176. MOV  TEMPH,A    ;TEMPHC HI=符號位
  177. MOV  TEMPHC,#0BH
  178. SJMP  TEMPC11
  179. TEMPC1: MOV  TEMPHC,#0AH  ;+
  180. TEMPC11: MOV  A,TEMPHC
  181. SWAP  A
  182. MOV  TEMPHC,A
  183. MOV  A,TEMPL
  184. ANL  A,#0FH     ;乘0.0625
  185. MOV  DPTR,#TEMPDOTTAB
  186. MOVC  A,@A+DPTR
  187. MOV  TEMPLC,A   ;TEMPLC LOW=小數部分BCD
  188. MOV  A,TEMPL     ;整數部分
  189. ANL  A,#0F0H
  190. SWAP  A
  191. MOV  TEMPL,A
  192. MOV  A,TEMPH
  193. ANL  A,#0FH
  194. SWAP  A
  195. ORL  A,TEMPL
  196. LCALL  HEX2BCD1
  197. MOV  TEMPL,A
  198. ANL  A,#0F0H
  199. SWAP  A
  200. ORL  A,TEMPHC    ;TEMPHC LOW=十位數BCD
  201. MOV  TEMPHC,A
  202. MOV  A,TEMPL
  203. ANL  A,#0FH
  204. SWAP  A          ;TEMPLC HI=個位數BCD
  205. ORL  A,TEMPLC
  206. MOV  TEMPLC,A
  207. MOV  A,R7
  208. JZ  TEMPC12
  209. ANL  A,#0FH
  210. SWAP  A
  211. MOV  R7,A
  212. MOV  A,TEMPHC    ;TEMPLC HI=百位數BCD
  213. ANL  A,#0FH
  214. ORL  A,R7
  215. MOV  TEMPHC,A
  216. TEMPC12: RET
  217. ;========================= 小數部分碼表===========================
  218. TEMPDOTTAB: DB  00H,01H,01H,02H,03H,03H,04H,04H,05H,06H
  219. DB  06H,07H,08H,08H,09H,09H
  220. ;====================== 顯示區BCD碼溫度值刷新子程序===============
  221. DISPBCD: MOV  A,TEMPLC
  222. ANL  A,#0FH
  223. MOV  70H,A
  224. MOV  A,TEMPLC
  225. SWAP  A
  226. ANL  A,#0FH
  227. MOV  71H,A
  228. MOV  A,TEMPHC
  229. ANL  A,#0FH
  230. MOV  72H,A
  231. MOV  A,TEMPHC
  232. SWAP A
  233. ANL  A,#0FH
  234. MOV  73H,A
  235. MOV  A,TEMPHC
  236. ANL  A,#0F0H
  237. CJNE  A,#010H,DISPBCD0
  238. SJMP  DISPBCD2
  239. DISPBCD0: MOV  A,TEMPHC
  240. ANL  A,#0FH
  241. JNZ  DISPBCD2 ;十位數是0
  242. MOV  A,TEMPHC
  243. SWAP  A
  244. ANL  A,#0FH
  245. MOV  73H,#0AH ;符號位不顯示
  246. MOV  72H,A ;十位數顯示符號
  247. DISPBCD2: RET
  248. ;======================= 顯示子程序===============================
  249. ;顯示數據在70H~73H單元內,用4位LED共陽數碼管顯示,P1口輸出段碼數據,
  250. ;P3口做掃描控制,每個LED數碼管亮1ms時間再逐位循環。
  251. DISP1: MOV  R1,#70H ;指向顯示數據首址
  252. MOV  R5,#0FEH ;掃描控制字初值
  253. PLAY: MOV  P0,#0FFH
  254. MOV  A,R5 ;掃描字放入A
  255. MOV  P3,A ;從P3口輸出
  256. MOV  A,@R1 ;取顯示數據到A
  257. MOV  DPTR,#TAB ;取段碼表地址
  258. MOVC  A,@A+DPTR ;查顯示數據對應段碼
  259. MOV  P0,A ;段碼放入P0口
  260. MOV  A,R5
  261. JB  ACC.1,LOOP5 ;小數點處理
  262. CLR  P0.7
  263. LOOP5: LCALL  DL1MS ;顯示1ms
  264. INC  R1 ;指向下一地址
  265. MOV  A,R5 ;掃描控制字放入A
  266. JNB  ACC.3,ENDOUT ;ACC.3=0時一次顯示結束
  267. RL  A ;A中數據循環左移
  268. MOV R5,A ;放回R5內
  269. AJMP  PLAY ;跳回PLAY循環
  270. ENDOUT: MOV  P0,#0FFH ;一次顯示結束,P0口復位
  271. MOV  P3,#0FFH ;P3口復位
  272. RET ;子程序返回
  273. TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
  274. ;共陽段碼表 “0”“1”“2”“3”“4”“5”“6”“7”“8”“9”“不亮”“-”
  275. DL1MS: MOV  R6,#14H ;1ms延時程序,LED顯示程序用
  276. DL1: MOV  R7,#19H
  277. DL2: DJNZ  R7,DL2
  278. DJNZ  R6,DL1
  279. RET
  280. ;===================== 單字節十六進制轉BCD =======================
  281. HEX2BCD1: MOV  B,#064H ;十六進制->BCD
  282. DIV  AB ;B=A%100
  283. MOV  R7,A ;R7=百位數
  284. MOV  A,#0AH
  285. XCH  A,B
  286. DIV  AB ;B=A%B
  287. SWAP  A
  288. ORL  A,B
  289. RET
  290. ;================================================================
  291. ;Calculate CRC-8Values.  Uses The CCITT-8Polynomial,Expressed As
  292. ;X^8+X^5+X^4+1
  293. ;================================================================
  294. CRC8CAL: PUSH  ACC
  295. MOV  R7,#08H ;Number Bits In Byte
  296. CRC8LOOP1: XRL  A,B ;Calculte CRC
  297. RRC  A ;Move To Carry
  298. MOV  A,B ;Get The Last CRC Value
  299. JNC  CRC8LOOP2 ;Skip If Data==0
  300. XRL  A,#18H ;Updata The New CRC
  301. CRC8LOOP2: RRC  A ;Position The New CRC
  302. MOV  B,A ;Store The New CRC
  303. POP  ACC ;Get The Remaining Bits
  304. RR  A ;Position The Next Bit
  305. PUSH  ACC ;Save The Remaining Bits
  306. DJNZ  R7,CRC8LOOP1 ;Repeat For 8 Bits
  307. POP  ACC
  308. RET
  309. END
復制代碼


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

使用道具 舉報

沙發
ID:89286 發表于 2017-10-1 01:19 | 只看該作者
thanks for sharing
回復

使用道具 舉報

板凳
ID:559709 發表于 2019-6-11 10:25 | 只看該作者
樓主,我想問下,我仿真數碼管一直閃爍,且跳不出正確的傳感器數據,是什么原因
回復

使用道具 舉報

地板
ID:652411 發表于 2020-6-5 15:10 來自手機 | 只看該作者
運行后一直這樣

IMG_20200605_150956.jpg (1.22 MB, 下載次數: 38)

IMG_20200605_150956.jpg
回復

使用道具 舉報

5#
ID:652411 發表于 2020-6-5 15:11 來自手機 | 只看該作者
gaogaoxingxing 發表于 2019-6-11 10:25
樓主,我想問下,我仿真數碼管一直閃爍,且跳不出正確的傳感器數據,是什么原因

你的問題解決了嗎
回復

使用道具 舉報

6#
ID:810487 發表于 2020-11-24 14:56 | 只看該作者

延時的時間太短了 可能是微秒的延時 可以改成毫秒的
回復

使用道具 舉報

7#
ID:848431 發表于 2020-11-24 15:29 | 只看該作者
新手路過。這個是用什么軟件的呢?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久草在线视频 | 色必久久 | 久久精品日产第一区二区三区 | 国产成人久久av免费高清密臂 | 麻豆久久 | 欧美 日韩 亚洲91麻豆精品 | 一级国产精品一级国产精品片 | 秋霞在线一区二区 | 中文字幕91av | 一级毛片免费看 | 四虎影音| 日本精品久久久久久久 | 亚洲男人的天堂网站 | 色综合一区二区三区 | 国产欧美精品一区二区色综合 | 日本成年免费网站 | 久久国内精品 | 国产精品久久久久久久久 | 91精品国产91久久综合桃花 | 欧美又大粗又爽又黄大片视频 | 黄色免费网站在线看 | 成人午夜激情 | 日韩成人在线观看 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 日韩精品 电影一区 亚洲 | 男女啪啪网址 | 日韩国产黄色片 | 草久网 | www免费视频 | 亚洲电影在线播放 | 狠狠躁夜夜躁人人爽天天高潮 | 欧产日产国产精品v | 视频一区在线观看 | 精品蜜桃一区二区三区 | 麻豆一区二区三区 | 中文字幕在线一 | 欧美成人激情视频 | 91精品国产综合久久婷婷香蕉 | 亚洲一区二区成人 | 日本黄色高清视频 | 欧美日韩高清在线一区 |