找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1763|回复: 0
打印 上一主题 下一主题
收起左侧

单片机数字式温度测量

[复制链接]
跳转到指定楼层
楼主
基本要求:利用单片机AT89C51基于数字温度传感器设计数字温度计,能对模拟信号进行检测,能将所测量的温度在LED显示器上显示。测量范围为20 120
创新:具有方便的键盘操作功能;温度超出界限时具有报警功能等。



仿真


程序如下:

  1. TEMP_ZH DATA 24H
  2. TEMPL DATA 25H
  3. TEMPH DATA 26H
  4. TEMP_TH DATA 27H
  5. TEMP_TL DATA 28H
  6. TEMPHC DATA 29H
  7. TEMPLC DATA 2AH
  8. K1 EQU P1.4
  9. K2 EQU P1.5
  10. K3 EQU P1.6
  11. K4 EQU P1.7
  12. BEEP EQU P3.6
  13. RELAY EQU P3.7
  14. LCD_X EQU 2FH
  15. LCD_RS EQU P2.0
  16. LCD_RW EQU P2.1
  17. LCD_EN EQU P2.2
  18. flag1 EQU 20H.0
  19. KEY_UD EQU 20H.1
  20. date_line EQU P3.3
  21. ;========================================================================
  22. ORG 0000H
  23. JMP MAIN
  24. MAIN:
  25.      MOV SP,#60H;
  26.   MOV A,#00H;
  27.   MOV R0,#20H;
  28.   MOV R1,#10H;
  29. CLEAR:
  30.   MOV @R0,A;
  31.   INC R0;
  32.   DJNZ R1,CLEAR;
  33.   CALL SET_LCD;
  34.   CALL RE_18B20;
  35.   
  36.   
  37. start:
  38.   CALL RESET;
  39.   JNB flag1,START1;
  40.   CALL MENU_OK;
  41.   CALL READ_E2;
  42.   CALL TEMP_BJ;
  43.   JMP START2;
  44. START1:
  45.   CALL MENU_ERROR;
  46.   CALL TEMP_BJ;
  47.   JMP $;
  48. START2:
  49.      CALL RESET;
  50.   JNB FLAG1,START1;
  51.   MOV A,#0CCH;
  52.   CALL WRITE;
  53.   MOV A,#44H;
  54.   CALL WRITE;
  55.   CALL RESET;
  56.   MOV A,#0CCH;
  57.   CALL WRITE;
  58.   MOV A,#0BEH;
  59.   CALL WRITE;
  60.   CALL READ;
  61.   call CONVTEMP;
  62.   Call DISPBCD;
  63.   CALL CONV;
  64.   CALL TEMP_COMP;
  65.   CALL PROC_KEY;
  66.   
  67.   SJMP START2;
  68.   
  69. PROC_KEY:
  70.      JB K1,PROC_K1;
  71.   CALL BEEP_BL;
  72.   JNB K1,$;
  73.   MOV DPTR,#M_ALAX1;
  74.   MOV A,#1;
  75.   CALL LCD_PRINT;
  76.   CALL LOOK_ALARM;
  77.   JB K3,$;
  78.   CALL BEEP_BL;
  79.   JMP PROC_K2;
  80. PROC_K1:
  81.   JB K2,PROC_END;
  82.   CALL BEEP_BL;
  83.   JNB K2,$;
  84.   MOV DPTR,#RESET_A1;
  85.   MOV A,#1;
  86.   CALL LCD_PRINT;
  87.   CALL SET_ALARM;
  88.   CALL RE_18B20;
  89.   CALL WRITE_E2;
  90. PROC_K2:
  91.      CALL MENU_OK;
  92.   CALL TEMP_BJ;
  93. PROC_END:
  94.      RET
  95. ;============================================================
  96. SET_ALARM:
  97.      CALL RESET_ALARM;
  98.   CALL LOOK_ALARM;
  99. AS0:
  100.   JB K1,AS00;
  101.   CALL BEEP_BL;
  102.   JNB K1,$;
  103.   CPL 20H.1;
  104. AS00:
  105.   JB 20H.1,ASZ01;
  106.   JMP ASJ01;
  107. ASZ01:
  108.   JB K2,ASZ02;
  109.   CALL BEEP_BL;
  110.   INC TEMP_TH;
  111.   MOV A,TEMP_TH;
  112.   CJNE A,#120,ASZ011;
  113.   MOV TEMP_TH,#0;
  114. ASZ011:
  115.   CALL LOOK_ALARM;
  116.   MOV R5,#10;
  117.   CALL DELAY;
  118.   JMP ASZ01;
  119. ASZ02:
  120.   JB K3,ASZ03;
  121.   CALL BEEP_BL;
  122.   INC TEMP_TL;
  123.   MOV A,TEMP_TL;
  124.   CJNE A,#99,ASZ021;
  125.   MOV TEMP_TL,#00H;
  126. ASZ021:
  127.   CALL LOOK_ALARM;
  128.   MOV R5,#10;
  129.   CALL DELAY;
  130.   JMP ASZ02;
  131. ASZ03:
  132.   JB K4,AS0;
  133.   CALL BEEP_BL;
  134.   JNB K4,$;
  135.   RET
  136. ASJ01:
  137.     JB K2,ASJ02;
  138. CALL BEEP_BL;
  139. DEC TEMP_TH;
  140. MOV A,TEMP_TH;
  141. CJNE A,#0FFH,ASJ011;
  142. JMP ASJ022;
  143. ASJ011:
  144. CALL LOOK_ALARM;
  145. MOV R5,#10;
  146. CALL DELAY;
  147. JMP AS0;
  148. ASJ02:
  149. JB K3,ASJ03;
  150. CALL BEEP_BL;
  151. DEC TEMP_TL;
  152. MOV A,TEMP_TL;
  153. CJNE A,#0FFH,ASJ021;
  154. JMP ASJ022;
  155. ASJ021:
  156. CALL LOOK_ALARM;
  157. MOV R5,#10;
  158. CALL DELAY;
  159. JMP AS0;
  160. ASJ022:
  161. CPL 20H.1;
  162. JMP ASZ01;
  163. ASJ03:
  164.     JMP ASZ03;
  165. RET
  166. RESET_ALARM:
  167.     MOV DPTR,#RESET_A1;
  168. MOV A,#1;
  169. CALL LCD_PRINT;
  170. RET
  171. RESET_A1:
  172.     DB "RESET ALERT CODE";
  173. ;==================================================================
  174. TEMP_COMP:
  175.     MOV A,TEMP_TH;
  176. SUBB A,TEMP_ZH;
  177. JC CHULI1;
  178. MOV A,TEMP_ZH;
  179. SUBB A,TEMP_TL;
  180. JC CHULI2;
  181. MOV DPTR,#BJ5;
  182. CALL TEMP_BJ3;
  183. CLR RELAY;
  184. RET
  185. CHULI1:
  186.     MOV DPTR,#BJ3;
  187. CALL TEMP_BJ3;
  188. SETB RELAY;
  189. CALL BEEP_BL;
  190. RET
  191. CHULI2:
  192.     MOV DPTR,#BJ4;
  193. CALL TEMP_BJ3;
  194. CALL BEEP_BL;
  195. RET
  196. ;-------------------------------
  197. TEMP_BJ3:
  198.     MOV A,#0CEH;
  199. CALL WCOM;
  200. MOV R1,#0;
  201. MOV R0,#2;
  202. BBJJ3:
  203.     MOV A,R1;
  204. MOVC A,@A+DPTR;
  205. CALL WDATA;
  206. INC R1;
  207. DJNZ R0,BBJJ3;
  208. RET
  209. BJ3:
  210.     DB ">H";
  211. BJ4:
  212.     DB "<L";
  213. BJ5:
  214.     DB "!";
  215. ;====================================================================
  216. TEMP_BJ:
  217.     MOV A,#0CBH;
  218. CALL WCOM;
  219. MOV DPTR,#BJ1;
  220. MOV R1,#0;
  221. MOV R0,#2;
  222. BBJJ1:
  223. MOV A,R1;
  224. MOVC A,@A+DPTR;
  225. CALL WDATA;
  226. INC R1;
  227. DJNZ R0,BBJJ1;
  228. RET
  229. BJ1:
  230.     DB 00H,"C";
  231. ;==================================
  232. MENU_OK:
  233.     MOV DPTR,#M_OK1;
  234. MOV A,#1;
  235. CALL LCD_PRINT;
  236. MOV DPTR,#M_OK2;
  237. MOV A,#2;
  238. CALL LCD_PRINT;
  239. RET
  240. M_OK1:
  241.     DB "DS18B20 OK",0
  242. M_OK2:
  243.     DB "TEMP:",0
  244. ;------------------------------------
  245. MENU_ERROR:
  246.     MOV DPTR,#M_ERROR1;
  247. MOV A,#1;
  248. CALL LCD_PRINT;
  249. MOV DPTR,#M_ERROR2;
  250. MOV A,#2;
  251. CALL LCD_PRINT;
  252. RET
  253. M_ERROR1:
  254.     DB "DS18B20 ERROR",0;
  255. M_ERROR2:
  256.     DB "TEMP:----",0;
  257. ;====================================
  258. reset:
  259.     setb date_line;
  260. nop
  261. clr date_line;
  262. mov r0,#6bh;
  263. mov r1,#04h;
  264. tsr1:
  265. djnz r0,$;
  266. mov r0,#6bh;
  267. djnz r1,tsr1;
  268. setb date_line;
  269. nop
  270. nop
  271. nop
  272. mov r0,#32h;
  273. tsr2:
  274. jnb date_line,tsr3;
  275. djnz r0,tsr2;
  276. jmp tsr4;
  277. tsr3:
  278. setb flag1;
  279. jmp tsr5;
  280. tsr4:
  281. clr flag1;
  282. jmp tsr7;
  283. tsr5:
  284. mov r0,#06bh;
  285. tsr6:
  286. djnz r0,$;
  287. tsr7:
  288. setb date_line;
  289. ret
  290. ;====================================
  291. RE_18B20:
  292.     JB FLAG1,RE_18B20A;
  293. RET
  294. RE_18B20A:
  295.     CALL RESET;
  296. MOV A,#0CCH;
  297. LCALL WRITE;
  298. MOV A,#4EH;
  299. LCALL WRITE;
  300. MOV A,TEMP_TH;
  301. LCALL WRITE;
  302. MOV A,TEMP_TL;
  303. LCALL WRITE;
  304. MOV A,#7FH;
  305. LCALL WRITE;
  306. RET
  307. ;------------------------------------
  308. WRITE_E2:
  309.     CALL RESET;
  310. MOV A,#0CCH;
  311. LCALL WRITE;
  312. MOV A,#48H;
  313. CALL WRITE;
  314. RET
  315. ;------------------------------------
  316. READ_E2:
  317.     CALL  RESET;
  318. MOV A, #0CCH;
  319. LCALL WRITE;
  320. MOV A, #0B8H;
  321. CALL WRITE;
  322. RET
  323. ;------------------------------------------------------------------------
  324. STORE_DATA:
  325.     MOV A,#40H;
  326. CALL WCOM;
  327. MOV R2,#08H;
  328. MOV DPTR,#D_DATA;
  329. MOV R3,#00H;
  330. S_DATA:
  331.     MOV A,R3;
  332. MOVC A,@A+DPTR;
  333. CALL WDATA;
  334. INC R3;
  335. DJNZ R2,S_DATA;
  336.     RET
  337. D_DATA:
  338.     DB 0CH,12H,12H,0CH,00H,00H,00H,00H;10h,06h,09h,08h,08h,09h,06h,00h;
  339. ;======================================================================
  340. write:
  341. mov r2,#8;
  342. CLR C;
  343. wr1:
  344.     clr date_line;
  345. mov r3,#07;
  346. djnz r3,$;
  347. rrc a;
  348. mov date_line,c;
  349. mov r3,#3CH;
  350. djnz r3,$;
  351. setb date_line;
  352. nop
  353. djnz r2,wr1;
  354. setb date_line;
  355. ret
  356. ;-------------------------------------

  357. read:
  358. mov r4,#4;
  359. mov r1,#TEMPL;
  360. re00:
  361. mov r2,#8;
  362. re01:
  363. clr cy;
  364. setb date_line;
  365. nop
  366. nop
  367. clr date_line;
  368. nop
  369. nop
  370. nop
  371. setb date_line;
  372. mov r3,#09;
  373. djnz r3,$;
  374. mov c,date_line;
  375. mov r3,#3CH;
  376. djnz r3,$;
  377. rrc a;
  378. djnz r2,re01;
  379. mov @r1,a;
  380. inc r1;
  381. djnz r4,re00;
  382. ret
  383. ;**************************************************************************************
  384. CONVTEMP:
  385. MOV A,TEMPH;
  386. ANL A,#80H;
  387. JZ TEMPC1;
  388. CLR C;
  389. MOV A,TEMPL;
  390. CPL A;
  391. ADD A,#01H;
  392. MOV TEMPL,A;
  393. MOV A,TEMPH;
  394. CPL A;
  395. ADDC A,#00H;
  396. MOV TEMPH,A;
  397. SJMP TEMPC11;

  398. TEMPC1:
  399. MOV TEMPHC,#0AH;
  400. TEMPC11:
  401. MOV A,TEMPHC;
  402. SWAP A;
  403. MOV TEMPHC,A;
  404. MOV A,TEMPL;
  405. ANL A,#0FH;
  406. MOV DPTR,#TEMPDOTTAB;
  407. MOVC A,@A+DPTR;
  408. MOV TEMPLC,A;


  409. MOV A,TEMPL;
  410. ANL A,#0F0H;
  411. SWAP A;
  412. MOV TEMPL,A;
  413. MOV A,TEMPH;
  414. ANL A,#0FH;
  415. SWAP A;
  416. ORL A,TEMPL;
  417. MOV TEMP_ZH,A;
  418. LCALL HEX2BCD1;
  419. MOV TEMPL,A;
  420. ANL A,#0F0H;
  421. SWAP A;
  422. ORL A,TEMPHC;
  423. MOV TEMPHC,A;
  424. MOV A,TEMPL;
  425. ANL A,#0FH;

  426. SWAP A;
  427. ORL A,TEMPLC;
  428. MOV TEMPLC,A;
  429. MOV A,R4;
  430. JZ TEMPC12;
  431. ANL A,#0FH;
  432. SWAP A;
  433. MOV R4,A;
  434. MOV A,TEMPHC;
  435. ANL A,#0FH;
  436. ORL A,R4;
  437. MOV TEMPHC,A;
  438. TEMPC12:
  439. RET
  440. ;------------------------------------
  441. HEX2BCD1:
  442.     MOV B,#064H;
  443. DIV AB;
  444. MOV R4,A;
  445. MOV A,#0AH;
  446. XCH A,B;
  447. DIV AB;
  448. SWAP A;
  449. ORL A,B;
  450. RET
  451. ;--------------------------------------------------------------------------
  452. TEMPDOTTAB:
  453.     DB 00H,00H,01H,01H,02H,03H,03H,04H;
  454. DB 05H,05H,06H,06H,07H,08H,08H,09H;
  455. ;======================================
  456. LOOK_ALARM:
  457.     MOV DPTR,#M_ALAX2;
  458. MOV A,#2;
  459. CALL LCD_PRINT;
  460. MOV A,#0C6H;
  461. CALL TEMP_BJ1;
  462. MOV A,TEMP_TH;
  463. MOV LCD_X,#3;
  464. CALL SHOW_DIG2H;


  465. MOV A,#0CEH;
  466. CALL TEMP_BJ1;
  467. MOV A,TEMP_TL;
  468. MOV LCD_X,#12;
  469. CALL SHOW_DIG2L;
  470. RET
  471. ;------------------------------------
  472. M_ALAX1:
  473.     DB "LOOK ALERT CODE",0;
  474. M_ALAX2:
  475.     DB "TH:     TL:      ",0;
  476. ;----------------------------------------------------------
  477. TEMP_BJ1:
  478.     CALL WCOM;
  479. MOV DPTR,#BJ2;
  480. MOV R1,#0;
  481. MOV R0,#2;
  482. BBJJ2:
  483.     MOV A,R1;
  484. MOVC A,@A+DPTR;
  485. CALL WDATA;
  486. INC R1;
  487. DJNZ R0,BBJJ2;
  488. RET
  489. BJ2:
  490.     DB 00H,"C"
  491. ;-------------------------------------
  492. SHOW_DIG2H:
  493.     MOV B,#100;
  494. DIV AB;
  495. ADD A,#30H;
  496. PUSH B;
  497. MOV B,LCD_X;
  498. CALL LCDP2;
  499. POP B;
  500. MOV A,#0AH;
  501. XCH A,B;
  502. DIV AB;
  503. ADD A,#30H;
  504. INC LCD_X;
  505. PUSH B;
  506. MOV B,LCD_X;
  507. CALL LCDP2;
  508. POP B;
  509. INC LCD_X;
  510. MOV A,B;
  511. MOV B,LCD_X;
  512. ADD A,#30H;
  513. CALL LCDP2;
  514. RET
  515. SHOW_DIG2L:
  516.     MOV B,#100;
  517. DIV AB;
  518. MOV A,#0AH;
  519. XCH A,B;
  520. DIV AB;
  521. ADD A,#30H;
  522. PUSH B;
  523. MOV B,LCD_X;
  524. CALL LCDP2;
  525. POP B;
  526. INC LCD_X;
  527. MOV A,B;
  528. MOV B,LCD_X;
  529. ADD A,#30H;
  530. CALL LCDP2;
  531. RET
  532. ;-----------------------------------------------------------------------
  533. DISPBCD:
  534.     MOV A,TEMPLC;
  535. ANL A,#0FH;
  536. MOV 70H,A;
  537. MOV A,TEMPLC;
  538. SWAP A;
  539. ANL A,#0FH;
  540. MOV 71H,A;
  541. MOV A,TEMPHC;
  542. ANL A,#0FH;
  543. MOV 72H,A;
  544. MOV A,TEMPHC;
  545. SWAP A;
  546. ANL A,#0FH;
  547. MOV 73H,A;
  548. MOV A,TEMPHC;
  549. ANL A,#0F0H;
  550. CJNE A,#010H,DISPBCD0;
  551. SJMP DISPBCD2;
  552. DISPBCD0:
  553. MOV A,TEMPHC;
  554. ANL A,#0FH;
  555. JNZ DISPBCD2;
  556. MOV A,TEMPHC;
  557. SWAP A;
  558. ANL A,#0FH;
  559. MOV 73H,#0AH;
  560. MOV 72H,A;
  561. DISPBCD2:
  562. RET
  563. ;========================================================================
  564. CONV:
  565.     MOV A,#73H;
  566. MOV LCD_X,#6;
  567. CJNE A,#1,CONV1;
  568. JMP CONV2;
  569. CONV1:
  570. MOV A,#'*';
  571.     MOV B,LCD_X;
  572. CALL LCDP2;
  573. JMP CONV3;
  574. CONV2:
  575. CALL SHOW_DIG2;
  576. CONV3:
  577. INC LCD_X;
  578. mov a,73h;
  579. CALL SHOW_DIG2;
  580. INC LCD_X;
  581. mov a,72h;
  582. CALL SHOW_DIG2;
  583. inc LCD_X;
  584. mov a,71h;
  585. CALL SHOW_DIG2;
  586. inc LCD_X;
  587. MOV A,#'.';
  588. MOV B,LCD_X;
  589. CALL LCDP2;
  590. MOV A,70h;
  591. INC LCD_X;
  592. CALL SHOW_DIG2;
  593. RET
  594. ;-------------------------------------
  595. SHOW_DIG2:
  596.     ADD A,#30H;
  597. MOV B,LCD_X;
  598. CALL LCDP2;
  599. RET
  600. ;-------------------------------------
  601. LCDP2:
  602. PUSH ACC;
  603. MOV A,B;
  604. ADD A,#0C0H;
  605. CALL WCOM;
  606. POP ACC;
  607. CALL WDATA;
  608. RET
  609. ;-------------------------------------
  610. SET_LCD:
  611.     CLR LCD_EN;
  612. CALL INIT_LCD;
  613. CALL STORE_DATA;
  614. RET
  615. INIT_LCD:
  616.     MOV A,#38H;
  617. CALL WCOM;
  618. call delay1;
  619. MOV A,#38H;
  620. CALL WCOM;
  621. call delay1;


  622. MOV A,#38H;
  623. CALL WCOM;
  624. call delay1;
  625. MOV A,#0CH;
  626. CALL WCOM;
  627. call delay1;
  628. MOV A,#01H;
  629. CALL WCOM;
  630. call delay1;
  631. RET
  632. ;====================================
  633. CLR_LINE1:
  634.     MOV A,#80H;
  635. CALL WCOM;
  636. MOV R0,#24;
  637. C1:
  638. MOV A,#'*';
  639. CALL WDATA;
  640. DJNZ R0,C1;
  641. RET
  642. ;====================================
  643. LCD_PRINT:
  644. CJNE A,#1,LINE2;
  645. LINE1:
  646. MOV A,#80H;
  647. CALL WCOM;
  648. CALL CLR_LINE;
  649. MOV A,#80H;
  650. CALL WCOM;
  651. JMP FILL;
  652. LINE2:
  653. MOV A,#0C0H;
  654. CALL WCOM;
  655. CALL CLR_LINE;
  656. MOV A,#0C0H;
  657. CALL WCOM;
  658. FILL:
  659. CLR A
  660. MOVC A,@A+DPTR;
  661. CJNE A,#0,LC1;
  662. RET
  663. LC1:
  664.     CALL WDATA;
  665. INC DPTR;
  666. JMP FILL;
  667. RET
  668. ;====================================
  669. CLR_LINE:
  670.     MOV R0,#24;
  671. CL1:
  672.     MOV A,#'*';
  673. CALL WDATA;
  674. DJNZ R0,CL1;
  675. RET
  676. DE:
  677. MOV R7,#250;
  678. DJNZ R7,$;
  679. RET
  680. ;====================================
  681. WCOM:
  682.     MOV P0,A;
  683. CLR LCD_RS;
  684. CLR LCD_RW;
  685. SETB LCD_EN;
  686. ACALL DELAY1;
  687. CLR LCD_EN;
  688. RET
  689. ;====================================
  690. WDATA:
  691.     MOV P0,A;
  692. SETB LCD_RS;
  693. CLR LCD_RW;
  694. SETB LCD_EN;
  695. CALL DE;
  696. CLR LCD_EN;
  697. CALL DE;
  698. RET
  699. ;====================================
  700. ;PRINT A CHAR ON LINE 1
  701. ;A=ASC DATA,B=LINE X POS
  702. ;====================================
  703. LCDP1:
  704.     PUSH ACC;
  705. MOV A,B;
  706. ADD A,#80H;
  707. CALL WCOM;
  708. POP ACC;
  709. CALL WDATA;
  710. RET
  711. ;====================================
  712. BEEP_BL:
  713.     MOV R6,#100;
  714. BL2:
  715. CALL DEX1;
  716. CPL BEEP;
  717. DJNZ R6,BL2;
  718. MOV R5,#10;
  719. CALL DELAY;
  720. RET
  721. DEX1:
  722. MOV R7,#180;
  723. DE2:
  724. NOP
  725. DJNZ R7,DE2;
  726. RET
  727. DELAY:
  728.     MOV R6,#50;
  729. DL1:
  730. MOV R7,#100;
  731. DJNZ R7,$;
  732. DJNZ R6,DL1;
  733. DJNZ R5,DELAY;
  734. RET
  735. DELAY1:
  736.     MOV R6,#25;
  737. DL2:
  738. MOV R7,#100;
  739. DJNZ R7,$;
  740. DJNZ R6,DL2;
  741. RET
  742. ;====================================
  743. END
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表