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

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

QQ登錄

只需一步,快速開始

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

匯編51單片機(jī)DS18B20數(shù)碼管顯示溫度時(shí)間

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本文為通過51單片機(jī)進(jìn)行DS18B20的溫度采集,在6位數(shù)碼管上顯示時(shí)間與溫度,并通過掃描方式輸入9位按鍵,已封裝好了各個(gè)按鍵的功能區(qū)。


右側(cè)為設(shè)定溫度,可通過按鍵進(jìn)行設(shè)置,左側(cè)27為檢測(cè)溫度,為DS18B20實(shí)測(cè)數(shù)據(jù)


時(shí)間顯示,為2時(shí)3分13秒,各個(gè)時(shí)間也可通過按鍵設(shè)置
程序內(nèi)有詳細(xì)注釋

單片機(jī)源程序如下:
  1. ;*************************************************
  2. ;***************溫度時(shí)間顯示模板.HUI**************
  3. ;*************************************************

  4.                         KEY                        EQU                40H                ;存放鍵值
  5.                         SECOND                EQU                37H
  6.                         MINUTE                EQU                38H
  7.                         HOUR                EQU                32H
  8.                         TCNT                EQU                34H                ;時(shí)間計(jì)數(shù)
  9.                         FLAG1                 BIT         00H     ; FLAG1:標(biāo)志位,為"1"時(shí)表示檢測(cè)到DS18B20
  10.                         TEMPER_NUM         EQU         50H         ; TEMPER_NUM:保存讀出的溫度數(shù)據(jù)
  11.                         TEMPER_L         EQU         36H           ;溫度的低位
  12.                         TEMPER_H         EQU         35H            ;溫度的高位
  13.                         TEMP                 EQU         34H     ;臨時(shí)存放溫度數(shù)據(jù)的單元
  14.                         SJGW                 EQU         30H     ;存放顯示溫度的個(gè)位數(shù)
  15.                         SJSW                 EQU         31H     ;存放顯示溫度的十位數(shù)
  16.                         DQ                         BIT         P1.3    ;DQ:DS18B20的數(shù)據(jù)總線接腳
  17.                         DIS_FLAG        BIT                01H                ;顯示標(biāo)志,為1時(shí)顯示溫度

  18.                         ORG                00H
  19.                         AJMP        MAIN
  20.                         ORG                0BH
  21.                         LJMP        INT_T0
  22.                        
  23.                        
  24. ;*********************子程序*********************

  25. ;**************中斷子程序************************
  26. INT_T0:                PUSH ACC
  27.                         PUSH PSW
  28.                         MOV        TH0,#(65536-50000)/256
  29.                         MOV        TL0,#(65536-50000);MOD 256
  30.                         INC        TCNT
  31.                         MOV        A,TCNT
  32.                         CJNE A,#20,RETUNE        ;計(jì)時(shí)1秒
  33.                         INC        SECOND
  34.                         MOV        TCNT,#0
  35.                         MOV        A,SECOND
  36.                         CJNE A,#60,RETUNE
  37.                         INC        MINUTE
  38.                         MOV        SECOND,#0
  39.                         MOV        A,MINUTE
  40.                         CJNE A,#60,RETUNE
  41.                         INC        HOUR
  42.                         MOV        MINUTE,#0
  43.                         MOV        A,HOUR
  44.                         CJNE A,#24,RETUNE
  45.                         MOV        HOUR,#0
  46. RETUNE:                POP PSW
  47.                         POP ACC
  48.                         RETI               


  49. ;*****************顯示子程序*********************
  50. DISPLAY1:        MOV        A,SECOND        ;顯示秒
  51.                         MOV        B,#10
  52.                         DIV        AB
  53.                         MOV DPTR,#TABLE
  54.                         MOVC A,@A+DPTR
  55.                         MOV P1,#00000100B
  56.                         MOV        P0,A
  57.                         LCALL        DELAY1
  58.                         MOV        A,B
  59.                         MOVC A,@A+DPTR
  60.                         MOV P1,#00000101B
  61.                         MOV        P0,A
  62.                         LCALL DELAY1
  63.                         MOV                A,MINUTE        ;顯示分鐘
  64.                         MOV                B,#10
  65.                         DIV                AB
  66.                         MOVC        A,@A+DPTR
  67.                         MOV P1,#00000010B
  68.                         MOV                P0,A
  69.                         LCALL        DELAY1
  70.                         MOV                A,B
  71.                         MOVC        A,@A+DPTR
  72.                         MOV P1,#00000011B
  73.                         MOV                P0,A
  74.                         LCALL        DELAY1
  75.                         MOV                A,HOUR                ;顯示小時(shí)
  76.                         MOV                B,#10
  77.                         DIV                AB
  78.                         MOVC        A,@A+DPTR
  79.                         MOV                P0,A
  80.                         MOV P1,#00000000B
  81.                         LCALL        DELAY1
  82.                         MOV                A,B
  83.                         MOVC        A,@A+DPTR
  84.                         MOV                P0,A
  85.                         MOV P1,#00000001B
  86.                         LCALL        DELAY1
  87.                         RET
  88. TABLE:                 DB 3FH,06H,5BH,4FH
  89.                         DB 66H,6DH,7DH,07H
  90.                         DB 7FH,6FH
  91. ;*****************DS18B20***********************
  92. ;*****************DS18B20***********************
  93. ;*****************DS18B20***********************
  94. DS18B20:        MOV TEMPER_NUM,A
  95.                         MOV TEMPER_L,#00
  96.                         MOV TEMPER_H,#00
  97.                         ACALL INIT_1820
  98.                         ACALL TEMPER
  99.                         RET

  100. TEMPER:         ACALL RE_CONFIG
  101.                         ACALL GET_TEMPER
  102.                         ACALL TEMPER_COV
  103.                         ACALL DISPLAY
  104.                         RET

  105. INIT_1820:         SETB DQ                        ;初始化程序
  106.                         NOP
  107.                         CLR DQ       ;主機(jī)發(fā)出延時(shí)540us的復(fù)位低脈沖
  108.                         MOV R0,#36
  109.                         LCALL DELAY
  110.                         SETB DQ      ;然后拉高數(shù)據(jù)線
  111.                         NOP
  112.                         NOP
  113.                         MOV R0,#36
  114. TSR2:                 JNB DQ,TSR3     ;等待DS18B20的回應(yīng)
  115.                         DJNZ R0,TSR2
  116.                         LJMP TSR4;     延時(shí)
  117. TSR3:                SETB FLAG1;     置標(biāo)志位,表示DS1820存在
  118.                         LJMP TSR5
  119. TSR4:                CLR FLAG1;      清標(biāo)志位,表示DS1820不存在
  120.                         LJMP TSR7
  121. TSR5:                MOV R0,#06BH;   200us
  122. TSR6:                DJNZ R0,TSR6;    復(fù)位成功!時(shí)序要求延時(shí)一段時(shí)間
  123. TSR7:                SETB DQ
  124.                         RET
  125.                        
  126. ; 重新寫DS18B20暫存存儲(chǔ)器設(shè)定值
  127. RE_CONFIG: JB FLAG1,RE_CONFIG1; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1
  128.            RET
  129. RE_CONFIG1:MOV A,#0CCH;  發(fā)SKIP ROM命令
  130.            LCALL WRITE_1820
  131.            MOV A,#4EH;  發(fā)寫暫存存儲(chǔ)器命令
  132.            LCALL WRITE_1820
  133.            MOV A,#00H;  不 TH(報(bào)警上限)中寫入00H
  134.            LCALL WRITE_1820
  135.            MOV A,#00H;   TL(報(bào)警下限)中寫入00H
  136.            LCALL WRITE_1820
  137.            MOV A,#1FH;   選擇9位溫度分辨率
  138.            LCALL WRITE_1820
  139.            RET

  140. ; 讀出轉(zhuǎn)換后的溫度值
  141. GET_TEMPER: SETB DQ; 定時(shí)入口
  142.             LCALL INIT_1820
  143.             JB FLAG1,TSS2
  144.             RET; 若DS18B20不存在則返回
  145. TSS2:       MOV A,#0CCH; 跳過ROM匹配
  146.             LCALL WRITE_1820
  147.             MOV A,#44H; 發(fā)出溫度轉(zhuǎn)換命令
  148.             LCALL WRITE_1820
  149.             MOV R0,#50;等待A/D轉(zhuǎn)換結(jié)束,12位的話750us
  150.             LCALL DELAY
  151.             LCALL INIT_1820
  152.             MOV A,#0CCH; 跳過ROM匹配
  153.             LCALL WRITE_1820
  154.             MOV A,#0BEH; 發(fā)出讀溫度命令
  155.             LCALL WRITE_1820
  156.             LCALL READ_18200
  157.             MOV TEMPER_NUM,A; 將讀出的溫度數(shù)據(jù)保存
  158.             RET
  159.                        
  160. ; 讀DS18B20的程序,從DS18B20中讀出一個(gè)字節(jié)的數(shù)據(jù)
  161. READ_1820:         MOV R2,#8
  162. RE1:                 CLR C
  163.             SETB  DQ
  164.             NOP
  165.             NOP
  166.             CLR DQ
  167.             NOP
  168.             NOP
  169.             NOP
  170.             SETB DQ
  171.             MOV R3,#7
  172.             DJNZ R3,$
  173.             MOV C,DQ
  174.             MOV R3,#23
  175.             DJNZ R3,$
  176.             RRC A
  177.             DJNZ R2,RE1
  178.             RET
  179.                        
  180. ; 寫DS18B20的程序                       
  181. WRITE_1820: MOV R2,#8
  182.             CLR C
  183. WR1:                 CLR DQ
  184.             MOV R3,#6
  185.             DJNZ R3,$
  186.             RRC A
  187.             MOV DQ,C
  188.             MOV R3,#23
  189.             DJNZ R3,$
  190.             SETB DQ
  191.             NOP
  192.             DJNZ R2,WR1
  193.             SETB DQ
  194.             RET
  195.                        
  196. ; 讀DS18B20的程序,從DS18B20中讀出兩個(gè)字節(jié)的溫度數(shù)據(jù)
  197. READ_18200:        MOV R4,#2; 將溫度高位和低位從DS18B20中讀出
  198.             MOV R1,#36H; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
  199. RE00:                MOV R2,#8
  200. RE01:                CLR C
  201.             SETB DQ
  202.             NOP
  203.             NOP
  204.             CLR DQ
  205.             NOP
  206.             NOP
  207.             NOP
  208.             SETB DQ
  209.             MOV R3,#7
  210.             DJNZ R3,$
  211.             MOV C,DQ
  212.             MOV R3,#23
  213.             DJNZ R3,$
  214.             RRC A
  215.             DJNZ R2,RE01
  216.             MOV @R1,A
  217.             DEC R1
  218.             DJNZ R4,RE00
  219.             RET
  220.                        
  221. ; 將從DS18B20中讀出的溫度數(shù)據(jù)進(jìn)行轉(zhuǎn)換
  222. TEMPER_COV: MOV A,#0F0H
  223.             ANL A,TEMPER_L; 舍去溫度低位中小數(shù)點(diǎn)后的四位溫度數(shù)值
  224.             SWAP A
  225.             MOV TEMPER_NUM,A
  226.             MOV A,TEMPER_L
  227.             JNB ACC.3,TEMPER_COV1; 四舍五入去溫度值
  228.             INC TEMPER_NUM
  229. TEMPER_COV1:MOV A,TEMPER_H
  230.             ANL A,#07H
  231.             SWAP A
  232.             ORL A,TEMPER_NUM
  233.             MOV TEMPER_NUM,A; 保存變換后的溫度數(shù)據(jù)
  234.             LCALL BIN_BCD
  235.             RET
  236. ; 將16進(jìn)制的溫度數(shù)據(jù)轉(zhuǎn)換成壓縮BCD碼
  237. BIN_BCD:         MOV DPTR,#TEMP_TAB
  238.             MOV A,TEMPER_NUM
  239.             MOVC A,@A+DPTR
  240.             MOV TEMPER_NUM,A
  241.                         RET
  242. TEMP_TAB:        DB 00H,01H,02H,03H,04H,05H,06H,07H
  243.             DB 08H,09H,10H,11H,12H,13H,14H,15H
  244.             DB 16H,17H,18H,19H,20H,21H,22H,23H
  245.             DB 24H,25H,26H,27H,28H,29H,30H,31H
  246.             DB 32H,33H,34H,35H,36H,37H,38H,39H
  247.             DB 40H,41H,42H,43H,44H,45H,46H,47H
  248.             DB 48H,49H,50H,51H,52H,53H,54H,55H
  249.             DB 56H,57H,58H,59H,60H,61H,62H,63H
  250.             DB 64H,65H,66H,67H,68H,69H,70H,71H
  251.                         DB 72H,73H,74H,75H,76H,77H,78H,79H
  252.             DB 80H,81H,82H,83H,84H,85H,86H,87H
  253.             DB 88H,89H,90H,91H,92H,93H,94H,95H
  254.             DB 96H,97H,98H,99H
  255.                                
  256. T2_10:      MOV B,#16
  257.             DIV AB
  258.             MOV SJSW,A;SJSW中存放溫度的十位數(shù)
  259.             MOV SJGW,B;SJGW中存放溫度的個(gè)位數(shù)
  260.             RET
  261.     DISPLAY:PUSH ACC              ;保存ACC
  262.             PUSH PSW
  263.             MOV A, TEMPER_NUM
  264.             LCALL T2_10
  265.                          
  266.             MOV A, SJGW
  267.             MOV DPTR,# XSTAB     ;取得數(shù)據(jù)
  268.             MOVC A, @A+DPTR     ;提取字模
  269.             MOV P0,A              ;顯示溫度的個(gè)位數(shù)
  270.                    SETB P1.0
  271.                         CLR P1.1
  272.                         CLR P1.2
  273.             ACALL DS1MS         ;調(diào)用顯示1ms延時(shí)程序
  274.             
  275.             MOV A,SJSW
  276.             MOVC A, @A+DPTR    ;提取字模
  277.             MOV P0,A             ;顯示溫度的十位數(shù)
  278.                    CLR P1.0
  279.                         CLR P1.1
  280.                         CLR P1.2
  281.             CALL DS1MS           ;顯示1ms
  282.             
  283.             POP PSW
  284.             POP ACC              ;出棧
  285.             RET                  ;返回調(diào)用
  286. XSTAB:                 DB 3FH,06H,5BH,4FH
  287.             DB 66H,6DH,7DH,07H
  288.             DB 7FH,6FH,77H,7CH
  289.                 DB 39H,5EH,79H,71H
  290. ;//*****************************************//
  291.                        
  292.                        
  293.                        


  294. SCAN_KEY:
  295.                         MOV P2,#0EH
  296.                         MOV A,P2
  297.                         ANL A,#0EH
  298.                         XRL A,#0EH
  299.                         JZ NO_KEY
  300.                         ACALL DELAY1
  301.                         MOV P2,#0EH
  302.                         MOV A,P2
  303.                         ANL A,#0EH
  304.                         XRL A,#0EH
  305.                         JZ NO_KEY
  306.                         MOV R2,#11011111B
  307. SCAN:                MOV A,R2
  308.                         MOV P2,A
  309.                         MOV A,P2
  310.                         ANL A,#00001110B
  311.                         MOV R3,A
  312.                         CJNE A,#0EH,KEY_PRSD
  313.                         MOV A,R2
  314.                         RL A
  315.                         MOV R2,A
  316.                         XRL A,#11111110B
  317.                         JNZ SCAN
  318. NO_KEY:                MOV KEY,#0FFH
  319.                         RET
  320. KEY_PRSD:        MOV A,R2
  321.                         ANL A,#11100000B
  322.                         ORL A,R3
  323.                         MOV R4,A
  324.                         MOV KEY,#00H
  325.                         MOV DPTR,#KEY_TAB
  326. CAL_VAL:        MOV A,KEY
  327.                         MOVC A,@A+DPTR
  328.                         XRL A,R4
  329.                         JZ FIXED
  330.                         INC KEY
  331.                         SJMP CAL_VAL
  332. FIXED:                MOV A,P2
  333.                         ANL A,#0EH
  334.                         XRL A,#0EH
  335.                         JNZ FIXED
  336.                         ACALL DELAY1
  337.                         MOV A,P2
  338.                         ANL A,#0EH
  339.                         XRL A,#0EH
  340.                         JNZ FIXED                       
  341. KEY_TAB:        DB 66H,6AH,6CH,0A6H,0AAH,0ACH,0C6H,0CAH,0CCH


  342. ;延時(shí)1ms
  343. DELAY1:                MOV        R6,#10
  344. D10:                MOV        R7,#100
  345.                         DJNZ        R7,$
  346.                         DJNZ        R6,D10
  347.                         RET
  348. DS1MS:                 MOV R1,#10
  349. DSLLO:                 MOV R2,#100
  350.             DJNZ R2,$
  351.             DJNZ R1,DSLLO
  352.             RET                  ;延時(shí)返回

  353.                                
  354. DELAY:
  355. LOOP:                MOV R1,#06H
  356. LOOP1:                DJNZ R1,LOOP1
  357.                         DJNZ R0,LOOP
  358.                         RET

  359. ;500毫秒延時(shí)子程序
  360. DELAY500:        MOV R4,#248
  361. DA222:                MOV R5,#248
  362.             DJNZ R5,$
  363.             DJNZ R4,DA222
  364.             RET
  365. ;顯示程序
  366. ;*********************主函數(shù)*********************
  367. MAIN:                CLR                DIS_FLAG
  368.                         MOV                DPTR,#TABLE
  369.                         MOV                HOUR,#0                                                ;初始化
  370.                         MOV                MINUTE,#0
  371.                         MOV                SECOND,#0
  372.                         MOV                TCNT,#0
  373.                         MOV                TMOD,#01H
  374.                         MOV                TH0,#(65536-50000)/256                ;定時(shí)50毫秒
  375.                         MOV                TL0,#(65536-50000);MOD 256
  376.                         MOV                IE,#82H
  377.                         SETB        TR0
  378.                         ACALL        DS18B20
  379. MAIN_LOOP:        ACALL        SCAN_KEY
  380.                         MOV                R0,KEY
  381.                        
  382. ;按鍵處理程序,所有的都加載這下面
  383.                         CJNE        R0,#0FFH,NEXT0
  384.                         AJMP        NEXT10
  385.                        
  386. NEXT0:                CJNE        R0,#0,NEXT1
  387.                         CPL                DIS_FLAG
  388.                         AJMP        NEXT10
  389.                        
  390. NEXT1:                CJNE        R0,#1,NEXT2
  391.                         INC                HOUR
  392.                         MOV                A,HOUR
  393.                         CJNE        A,#24,BACK1       
  394.                         MOV                HOUR,#0
  395. BACK1:                AJMP        NEXT10
  396.                        
  397. NEXT2:                CJNE        R0,#2,NEXT3
  398.                         INC                MINUTE
  399.                         MOV                A,MINUTE
  400.                         CJNE        A,#60,BACK2
  401.                         MOV                MINUTE,#0
  402. BACK2:                AJMP        NEXT10
  403.                        
  404. NEXT3:                CJNE        R0,#3,NEXT4

  405. NEXT4:                CJNE        R0,#4,NEXT5

  406. NEXT5:                CJNE        R0,#5,NEXT6

  407. NEXT6:                CJNE        R0,#6,NEXT7

  408. NEXT7:                CJNE        R0,#7,NEXT8

  409. NEXT8:                CJNE        R0,#8,NEXT9

  410. NEXT9:                CJNE        R0,#9,NEXT10


  411. NEXT10:                JB                DIS_FLAG,TEM;什么都沒按下
  412.                         ACALL        DISPLAY1;顯示時(shí)間
  413.                         AJMP        MAIN_LOOP
  414. TEM:                ACALL        TEMPER        ;顯示溫度
  415.                         AJMP        MAIN_LOOP
  416.                         END
復(fù)制代碼

程序51hei提供下載:
溫度+時(shí)間程序模板.zip (33.57 KB, 下載次數(shù): 23)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:763147 發(fā)表于 2020-5-28 15:51 | 只看該作者
這相當(dāng)于一個(gè)框架,只需要在框架內(nèi)加入自己的程序就可以,有較好的擴(kuò)展性
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级在线| 欧美一区二区三区在线观看视频 | www.久久.com| 免费av手机在线观看 | 亚洲视频在线一区 | 久久精品av麻豆的观看方式 | 亚洲精品女人久久久 | 欧美成人精品 | 天天干免费视频 | 精品无码久久久久久国产 | 成年人在线视频 | 午夜伦4480yy私人影院 | 久久专区 | 三级成人在线 | 成人精品一区亚洲午夜久久久 | 欧美午夜精品理论片a级按摩 | 91免费小视频 | 天天干天天爱天天 | 特级丰满少妇一级aaaa爱毛片 | 亚洲精品久久久久久久久久久 | 91在线一区 | 亚洲精品欧美 | 国产精品极品美女在线观看免费 | 免费一区二区 | 91精品国产一二三 | 亚洲国产成人精 | 久久综合九色综合欧美狠狠 | 国产黄色大片在线免费观看 | 精品视频亚洲 | 欧美一级片在线观看 | 一级a毛片 | 国产在线中文字幕 | 国产精品成人一区二区三区 | 日韩亚洲视频 | 日韩在线欧美 | 国产日韩欧美在线 | 久久久精品国产 | 久久综合伊人 | 国产精品视频中文字幕 | 国产成人精品一区二区三区四区 | av日日操|