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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

多功能檢測儀程序(4路溫度控制)

[復(fù)制鏈接]
ID:70976 發(fā)表于 2014-12-26 23:39 | 顯示全部樓層 |閱讀模式
  1. ;*******************************************************************
  2. ;*溫度控制程序,在LCD屏幕上顯示4路溫度(車內(nèi)外溫度、水溫、油溫)
  3. ;分兩頁顯示,每頁顯示2路溫度,溫度傳感器開路時語音報警和顯示故障
  4. ;水溫、油溫超溫報警
  5. ;*LCD12864顯示,晶振11.0592M
  6. ;*******************************************************************
  7. ;-----------------------------------------------------------
  8. ;以下參數(shù)可以修改
  9. ;-----------------------------------------------------------
  10.           XSYSSJ    DATA   40     ;顯示延時時間
  11.           XSGZSJ    DATA   40     ;故障顯示延時時間
  12.           CNBJCS    DATA   2      ;車內(nèi)溫度傳感器出故障報警次數(shù)
  13.           CWBJCS    DATA   2      ;車外溫度傳感器出故障報警次數(shù)
  14.           SWBJCS    DATA   2      ;水溫傳感器故出障報警次數(shù)
  15.           YWBJCS    DATA   2      ;油溫度傳感器出故障報警次數(shù)
  16.           SWGWSD    DATA   50     ;水溫超高報警值(單位℃)
  17.           SWDWSD    DATA   23     ;水溫超低報警值(單位℃)
  18.           YWGWSD    DATA   40     ;油溫超高報警值(單位℃)
  19.           YWDWSD    DATA   25     ;油溫超低報警值(單位℃)
  20.          
  21. ;-----------------------------------------------------------
  22. ;以下參數(shù)不宜修改
  23. ;-----------------------------------------------------------
  24.           FLAG0     BIT   20H.0   ;車內(nèi)溫度傳感器標(biāo)志
  25.           FLAG1     BIT   20H.1   ;車外溫度傳感器標(biāo)志
  26.           FLAG2     BIT   20H.2   ;水溫傳感器標(biāo)志
  27.           FLAG3     BIT   20H.3   ;油溫傳感器標(biāo)志

  28.           FLAG4     BIT   20H.4   ;車內(nèi)溫度傳感器故障標(biāo)志位,1為故障0為正常
  29.           FLAG5     BIT   20H.5   ;車外溫度傳感器故障標(biāo)志位,1為故障0為正常
  30.           FLAG6     BIT   20H.6   ;水溫傳感器故障標(biāo)志位,1為故障0為正常
  31.           FLAG7     BIT   20H.7   ;油溫傳感器故障標(biāo)志位,1為故障0為正常

  32.           FLAH0     BIT   21H.0   ;溫度正負(fù)標(biāo)志,1為負(fù)0為正,正不顯示
  33.           FLAH1     BIT   21H.1   ;水溫過高標(biāo)志,1為過高
  34.           FLAH2     BIT   21H.2   ;油溫過高標(biāo)志,1為過高

  35. ;-----------------------------------------------------------
  36.           XSYS      DATA  22H     ;顯示延時時間存放單元
  37.           LCD_X     EQU   23H     ;LCD 地址變量

  38.           TEMP_ZH   DATA  24H     ;實時溫度值存放單元
  39.           TEMPL     DATA  25H     ;溫度低位值存放單元
  40.           TEMPH     DATA  26H     ;溫度高位值存放單元
  41.           TEMP_TH   DATA  27H     ;高溫報警值存放單元
  42.           TEMP_TL   DATA  28H     ;低溫報警值存放單元
  43.           YY_DAT    DATA  29H     ;語音地址存放單元

  44.           CNBJ      DATA  2AH     ;車內(nèi)溫度傳感器故障報警次數(shù)存放單元
  45.           CWBJ      DATA  2BH     ;車外溫度傳感器故障報警次數(shù)存放單元
  46.           SWBJ      DATA  2CH     ;水溫傳感器故障報警次數(shù)存放單元
  47.           YWBJ      DATA  2DH     ;油溫傳感器故障報警次數(shù)存放單元

  48.           YYDAT     DATA  2EH     ;語音發(fā)碼值暫存地址
  49. ;-----------------------------------------------------------
  50.           CNCGBJ    DATA   30     ;“車內(nèi)溫度傳感器出故障,請檢查”語音地址
  51.           CWCGBJ    DATA   31     ;“車外溫度傳感器出故障,請檢查”語音地址
  52.           SWCGBJ    DATA   32     ;“水溫傳感器出故障,請檢查”語音地址
  53.           YWCGBJ    DATA   33     ;“油溫傳感器出故障,請檢查”語音地址
  54. ;-----------------------------------------------------------
  55. ;以下參數(shù)是固定的,不要修改
  56. ;-----------------------------------------------------------
  57.           YYRST     EQU   P3.3    ;語音模塊復(fù)位信號引腳
  58.           BUSY      EQU   P1.0    ;語音忙控制端,0為正在播放1為沒有播放
  59.           YYSDA     EQU   P1.1    ;語音模塊數(shù)據(jù)引腳

  60.           CG_CHENEI EQU   P1.4    ;車內(nèi)溫度傳感器數(shù)據(jù)線
  61.           CG_CHEWAI EQU   P1.5    ;車外溫度傳感器數(shù)據(jù)線
  62.           CG_SHUIWE EQU   P1.6    ;水溫傳感器數(shù)據(jù)線
  63.           CG_YOUWEN EQU   P1.7    ;油溫傳感器數(shù)據(jù)線
  64. ;-----------------------------------------------------------
  65.           LCD_RS    EQU   P4.0    ;LCD 數(shù)據(jù)/命令選擇端
  66.           LCD_RW    EQU   P4.1    ;LCD 讀/寫選擇端
  67.           LCD_EN    EQU   P4.2    ;LCD 使能信號
  68.           LCD_BG    EQU   P4.3    ;LCD 背光控制端
  69.           LCD_SJ    EQU   P0      ;LCD 數(shù)據(jù)




  70. ;===========================================================
  71.           ORG  0000H
  72.           AJMP  MAIN
  73.           ORG  0100H
  74. ;===========================================================
  75. MAIN:     MOV  SP,#60H
  76.           MOV  A,#00H
  77.           MOV  R0,#20H         ;將 20H-2FH 單元清零
  78.           MOV  R1,#10H
  79. CLEAR:    MOV  @R0,A
  80.           INC  R0
  81.           DJNZ  R1,CLEAR
  82.           CLR  LCD_BG          ;打開LCD背光

  83.           CALL  SET_LCD        ;初始化 LCD

  84.           MOV   CNBJ,#CNBJCS   ;設(shè)置車內(nèi)溫度傳感器故障報警次數(shù)
  85.           MOV   CWBJ,#CWBJCS   ;設(shè)置車外溫度傳感器故障報警次數(shù)
  86.           MOV   SWBJ,#SWBJCS   ;設(shè)置水溫傳感器故障報警次數(shù)
  87.           MOV   YWBJ,#YWBJCS   ;設(shè)置油溫傳感器故障報警次數(shù)

  88.           ;LCALL TEMP



  89. ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
  90. ;##########################################################
  91. ;以下溫度顯示程序(車內(nèi)外溫度、水溫、油溫)
  92. ;-----------------------------------------------------------
  93. ;用到的資源:R0~R7,A、B、C,20H~2EH,P4,P3.3,P1.0,P1.4~P1.7
  94. ;-----------------------------------------------------------
  95. ;##########################################################
  96. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  97. ;**************顯示第一頁溫度(車內(nèi)外溫度)

  98. TEMP:     CALL  MENU_OK1       ;顯示溫度菜單1

  99.           MOV TEMP_TH,#00H     ;溫度低位值存放單元
  100.           MOV TEMP_TL,#00H     ;溫度低位值存放單元

  101.           SETB  FLAG0          ;開始讀取車內(nèi)溫度傳感器,設(shè)標(biāo)志為1
  102.           CLR FLAG1
  103.           CLR FLAG2
  104.           CLR FLAG3
  105.           MOV  XSYS,#XSYSSJ    ;每頁顯示時間

  106. ;讀取和顯示車內(nèi)溫度
  107. L1:       CALL  RESET          ;18B20復(fù)位子程序
  108.           JB   FLAG4,L2        ;檢查車外溫度傳感器是否正常
  109.           CALL  BJ1            ;調(diào)用報警程序
  110.           MOV  XSYS,#XSGZSJ    ;重新設(shè)每頁顯示時間
  111.           SJMP  L3             ;傳感器出故障不再顯示該溫度
  112. L2:       CALL  READ_TEMP      ;讀出溫度與報警數(shù)據(jù)
  113.           CALL  CONVTEMP       ;轉(zhuǎn)換處理溫度為BCD碼
  114.           CALL  CONV01         ;顯示車內(nèi)溫度

  115. L3:       CLR FLAG0
  116.           SETB FLAG1
  117.           CLR FLAG2
  118.           CLR FLAG3

  119. ;讀取和顯示車外溫度
  120.           CALL  RESET          ;18B20復(fù)位子程序
  121.           JB   FLAG5,L4        ;檢查車內(nèi)溫度傳感器是否正常
  122.           CALL  BJ2            ;調(diào)用報警程序
  123.           SJMP  L5             ;傳感器出故障不再顯示該溫度
  124. L4:       CALL  READ_TEMP      ;讀出溫度與報警數(shù)據(jù)
  125.           CALL  CONVTEMP       ;轉(zhuǎn)換處理溫度為BCD碼
  126.           CALL  CONV02         ;顯示車外溫度

  127. L5:       SETB FLAG0
  128.           CLR FLAG1
  129.           CLR FLAG2
  130.           CLR FLAG3

  131.           JB FLAG4,L71
  132.           JB FLAG5,L71

  133.           MOV R0,#XSGZSJ
  134. L70:      ACALL DELAY
  135.           DJNZ R0,L70
  136.           SJMP L6

  137. L71:      ACALL DELAY          ;延時
  138.           DEC XSYS             ;車內(nèi)外溫度顯示頁顯示一段時間,以便觀察
  139.           MOV A,XSYS
  140.           JZ L6
  141.           SJMP L1

  142. ;**************顯示第二頁溫度(水溫和油溫)

  143. L6:       CALL  MENU_OK2       ;顯示溫度菜單2
  144.           MOV  XSYS,#XSYSSJ    ;重新設(shè)每頁顯示時間
  145.           CLR FLAG0
  146.           CLR FLAG1
  147.           SETB FLAG2
  148.           CLR FLAG3

  149. ;讀取和顯示水溫
  150. L7:       CALL  RESET          ;傳感器復(fù)位子程序
  151.           JB   FLAG6,L8        ;檢查水溫傳感器是否正常
  152.           CALL  BJ3            ;調(diào)用報警程序
  153.           SJMP  L9
  154. L8:       CALL  READ_TEMP      ;讀出溫度與報警數(shù)據(jù)
  155.           CALL  CONVTEMP       ;轉(zhuǎn)換處理溫度為BCD碼
  156.           CALL  TEMP_COMP      ;溫度比較子程序
  157.           CALL  CONV01         ;顯示水溫

  158. L9:       CLR FLAG0
  159.           CLR FLAG1
  160.           CLR FLAG2
  161.           SETB FLAG3

  162. ;讀取和顯示油溫
  163.           CALL  RESET          ;傳感器復(fù)位子程序
  164.           JB   FLAG7,L10       ;檢查油溫傳感器是否正常
  165.           CALL  BJ4            ;調(diào)用報警程序
  166.           SJMP  L11
  167. L10:      CALL  READ_TEMP      ;讀出溫度與報警數(shù)據(jù)
  168.           CALL  CONVTEMP       ;轉(zhuǎn)換處理溫度為BCD碼
  169.           CALL  TEMP_COMP      ;溫度比較子程序
  170.           CALL  CONV02         ;顯示油溫

  171. L11:      CLR FLAG0
  172.           CLR FLAG1
  173.           SETB FLAG2
  174.           CLR FLAG3

  175.           JB FLAG6,L81
  176.           JB FLAG7,L81

  177.           MOV R0,#XSGZSJ
  178. L80:      ACALL DELAY
  179.           DJNZ R0,L80
  180.           SJMP L82

  181. L81:      ACALL DELAY
  182.           DEC XSYS              ;水溫、油溫顯示頁顯示一段時間,以便觀察
  183.           MOV A,XSYS
  184.           JZ L82
  185.           AJMP L7
  186. L82:      AJMP MAIN
  187.           RET

  188. ;------------------------------------------------------
  189. ;報警程序,傳感器故障聲音報警和LCD顯示
  190. ;------------------------------------------------------
  191. BJ1:      MOV A,CNBJ        ;車內(nèi)溫度故障報警和顯示
  192.           JZ L13            ;聲音報警N次后不再報警,只顯示故障
  193.           MOV YY_DAT,#CNCGBJ;報出“車內(nèi)溫度傳感器出故障,請檢查”
  194.           JNB BUSY,L13      ;如果正在播放語音則跳過,只顯示故障
  195.           DEC CNBJ          ;車內(nèi)溫度傳感器語音報警次數(shù)倒計數(shù)
  196.           SJMP L12          ;故障語音報警

  197. BJ2:      MOV A,CWBJ        ;車外溫度故障報警和顯示
  198.           JZ L15            ;聲音報警N次后不再報警,只顯示故障
  199.           MOV YY_DAT,#CWCGBJ;報出“車外溫度傳感器出故障,請檢查”
  200.           JNB BUSY,L15      ;如果正在播放語音則跳過,只顯示故障
  201.           DEC CWBJ          ;車外溫度傳感器語音報警次數(shù)倒計數(shù)
  202.           SJMP L14          ;故障顯示

  203. BJ3:      MOV A,SWBJ        ;水溫故障報警和顯示
  204.           JZ L13            ;聲音報警N次后不再報警,只顯示故障
  205.           MOV YY_DAT,#SWCGBJ;報出“水溫傳感器出故障,請檢查”
  206.           JNB BUSY,L13      ;如果正在播放語音則跳過,只顯示故障
  207.           DEC SWBJ          ;水溫傳感器語音報警次數(shù)倒計數(shù)
  208. L12:      ACALL YUYIN       ;語音播放
  209. L13:      MOV  A,#90H        ;顯示在第二行
  210.           SJMP L16          ;故障顯示

  211. BJ4:      MOV A,YWBJ        ;油溫故障報警和顯示
  212.           JZ L15            ;聲音報警N次后不再報警,只顯示故障
  213.           MOV YY_DAT,#YWCGBJ;報出“油溫傳感器出故障,請檢查”
  214.           JNB BUSY,L15      ;如果正在播放語音則跳過,只顯示故障
  215.           DEC YWBJ          ;油溫傳感器語音報警次數(shù)倒計數(shù)
  216. L14:      ACALL YUYIN       ;語音播放
  217. L15:      MOV  A,#98H       ;顯示在第四行

  218. L16:      MOV  DPTR,#MUNE1  ;指針指到顯示信息區(qū)
  219.           CALL  WCOM
  220. L203:     CLR  A            ;填入字符
  221.           MOVC  A,@A+DPTR   ;由信息區(qū)取出字符
  222.           CJNE  A,#0,L205   ;判斷是否為結(jié)束碼
  223.           RET

  224. L205:     CALL  WDATA       ;寫入數(shù)據(jù)
  225.           INC  DPTR         ;指針加1
  226.           JMP  L203         ;繼續(xù)填入字符

  227. MUNE1:    DB"探頭故障請檢查!",0 ;溫度探頭不正常報警程序

  228. ;--------------------------------------------------------------------
  229. ;傳感器讀溫度子程序
  230. ; 將溫度低位、高位、TH、TL從傳感器中讀出
  231. ; 分別存入 25H、26H、27H、28H 單元中
  232. ;--------------------------------------------------------------------
  233. READ_TEMP:MOV   A,#0CCH        ; 跳過ROM匹配
  234.          CALL  WRITE
  235.          MOV   A,#44H          ; 發(fā)出溫度轉(zhuǎn)換命令
  236.          CALL  WRITE
  237.          CALL  RESET
  238.          MOV   A,#0CCH         ; 跳過ROM匹配
  239.          CALL  WRITE
  240.          MOV   A,#0BEH         ; 發(fā)出讀溫度命令
  241.          CALL  WRITE           ;先寫入命令

  242.          MOV R4,#4             ;存入4個單元中
  243.          MOV R1,#TEMPL         ;存入單元的首地址送入 R1
  244. RE00:    MOV R2,#8             ;8位數(shù)據(jù)長度
  245. RE01:    CLR CY
  246. ;***********************
  247.          JNB FLAG0,L01
  248.          SETB CG_CHENEI
  249.          NOP
  250.          NOP
  251.          CLR CG_CHENEI        ;讀前總線保持為低
  252.          NOP
  253.          NOP
  254.          NOP
  255.          SETB CG_CHENEI       ;開始讀總線釋放
  256.          MOV R3,#07           ;延時15微妙
  257.          DJNZ R3,$
  258.          MOV C,CG_CHENEI      ;從傳感器總線讀得一個BIT
  259.          AJMP L5A

  260. L01:     JNB FLAG1,L02
  261.          SETB CG_CHEWAI
  262.          NOP
  263.          NOP
  264.          CLR CG_CHEWAI        ;讀前總線保持為低
  265.          NOP
  266.          NOP
  267.          NOP
  268.          SETB CG_CHEWAI       ;開始讀總線釋放
  269.          MOV R3,#07           ;延時15微妙
  270.          DJNZ R3,$
  271.          MOV C,CG_CHEWAI      ;從傳感器總線讀得一個BIT
  272.          AJMP L5A

  273. L02:     JNB FLAG2,L03
  274.          SETB CG_SHUIWE
  275.          NOP
  276.          NOP
  277.          CLR CG_SHUIWE        ;讀前總線保持為低
  278.          NOP
  279.          NOP
  280.          NOP
  281.          SETB CG_SHUIWE       ;開始讀總線釋放
  282.          MOV R3,#07           ;延時15微妙
  283.          DJNZ R3,$
  284.          MOV C,CG_SHUIWE      ;從傳感器總線讀得一個BIT
  285. L0:      AJMP L5A

  286. L03:     JNB FLAG3,L0
  287.          SETB CG_YOUWEN
  288.          NOP
  289.          NOP
  290.          CLR CG_YOUWEN        ;讀前總線保持為低
  291.          NOP
  292.          NOP
  293.          NOP
  294.          SETB CG_YOUWEN       ;開始讀總線釋放
  295.          MOV R3,#07           ;延時15微妙
  296.          DJNZ R3,$
  297.          MOV C,CG_YOUWEN      ;從傳感器總線讀得一個BIT
  298. ;*****************************
  299. L5A:     MOV R3,#3CH
  300.          DJNZ R3,$            ;等待100微妙
  301.          RRC A                ;把讀得的位值環(huán)移給A
  302.          DJNZ R2,RE01         ;讀下一個BIT
  303.          MOV @R1,A
  304.          INC R1
  305.          DJNZ R4,RE00         ;沒有讀完,繼續(xù)
  306. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  307. ;         JB FLAG0,L000
  308. ;         PUSH A
  309. ;         MOV A,#WENDSD
  310. ;         CLR C
  311. ;         SUBB  A,TEMPL      ;減數(shù)>被減數(shù),則
  312. ;        JC L00
  313. ;         SETB FLAH3
  314. ;L00:     POP A
  315. L000:    RET
  316. ;*****************************************************
  317. ;處理溫度 BCD 碼子程序
  318. ;整數(shù)部分:取出 TEMPL 高四位和 TEMPH 低四位進(jìn)行重新組合
  319. ;小數(shù)部分:取出 TEMPL 低四位,查小數(shù)碼表
  320. ;****************************************************
  321. CONVTEMP:MOV  A,TEMPH       ;判溫度是否零下
  322.          ANL  A,#80H
  323.          JZ  TEMPC1         ;溫度零上轉(zhuǎn)
  324.          SETB FLAH0         ;溫度為負(fù)值
  325.          CLR  C
  326.          MOV  A,TEMPL       ;二進(jìn)制數(shù)求補(bǔ)(雙字節(jié))
  327.          CPL  A             ;取反加1
  328.          ADD  A,#01H
  329.          MOV  TEMPL,A
  330.          MOV  A,TEMPH
  331.          CPL  A
  332.          ADDC  A,#00H
  333.          MOV  TEMPH,A
  334.          JMP  TEMPC2

  335. TEMPC1:  CLR  FLAH0               ;溫度為正值
  336. TEMPC2:  MOV  A,TEMPL
  337.          ANL  A,#0FH              ;取出小數(shù)部分
  338.          MOV  B,#10               ;將TEMP_L的低四位X10/16得小數(shù)后一位數(shù).
  339.          MUL  AB
  340.   MOV  B,#16
  341.   DIV  AB
  342.          MOV  70H,A               ;小數(shù)部分 BCD

  343.          MOV  A,TEMPL             ;整數(shù)部分
  344.          ANL  A,#0F0H             ;取出高四位
  345.          SWAP  A
  346.          MOV  TEMPL,A
  347.          MOV  A,TEMPH             ;取出低四位
  348.          ANL  A,#0FH
  349.          SWAP  A
  350.          ORL  A,TEMPL             ;重新組合溫度數(shù)據(jù)
  351.          MOV  TEMP_ZH,A           ;重新組合的溫度數(shù)據(jù)存入TEMP_ZH
  352.          LCALL  HEX2BCD1

  353.          MOV  TEMPL,A             ;(A)=十位數(shù)和個位數(shù)
  354.          ANL  A,#0F0H
  355.          SWAP  A
  356.          MOV  72H,A               ;十位數(shù) BCD
  357.          MOV  A,TEMPL
  358.          ANL  A,#0FH
  359.          MOV  71H,A               ;個位數(shù) BCD
  360.          MOV  A,R4                ;(R4)= 百位數(shù)
  361.          MOV  73H,A

  362. TEMPC3:  RET
  363. ;====================================================
  364. ;單字節(jié)十六進(jìn)制轉(zhuǎn)BCD
  365. ;入口:(A)=單字節(jié)十六進(jìn)制的溫度值
  366. ;出口:(R4)= 百位數(shù),(A)=十位數(shù)和個位數(shù)
  367. ;====================================================
  368. HEX2BCD1:MOV  B,#64H
  369.          DIV  AB
  370.          MOV  R4,A             ;(R4)=百位數(shù)
  371.          MOV  A,#0AH
  372.          XCH  A,B
  373.          DIV  AB
  374.          SWAP  A
  375.          ORL  A,B             ;(A)=十位數(shù)和個位數(shù)
  376.          RET

  377. ;==========================================================
  378. ; LCD 溫度值顯示子程序
  379. ;73H-70H 分別存放百位、十位、個位、小數(shù)位的數(shù)據(jù)
  380. ;==========================================================
  381. CONV01:   MOV  A,73H         ;加載百位數(shù)據(jù)
  382.           MOV  LCD_X,#1      ;設(shè)置顯示位置
  383.           JNB  FLAH0,CONV0   ;
  384.           MOV  A,#"-"        ;顯示"-"
  385.           MOV  B,LCD_X
  386.           CALL  LCDP2

  387.           MOV  A,72H         ;十位
  388.           CJNE A,#00H,CONV3
  389.           INC  LCD_X         ;調(diào)整顯示地址
  390.           MOV  A,#" "        ;十位數(shù)等于0顯示空格
  391.           MOV  B,LCD_X
  392.           CALL  LCDP2
  393.           JMP  CONV4

  394. CONV0:    CJNE A,#00H,CONV2

  395. CONV1:    MOV  A,#" "        ;百位數(shù)等于0顯示空格
  396.           MOV  B,LCD_X
  397.           CALL  LCDP2
  398.           MOV  A,72H         ;十位
  399.           CJNE A,#00H,CONV3
  400.           INC  LCD_X         ;調(diào)整顯示地址
  401.           MOV  A,#" "        ;十位數(shù)等于0顯示空格
  402.           MOV  B,LCD_X
  403.           CALL  LCDP2
  404.           JMP  CONV4

  405. CONV2:    CALL  SHOW_DIG2    ;顯示數(shù)據(jù)

  406. CONV3:    INC  LCD_X         ;調(diào)整顯示地址
  407.           MOV  A,72H         ;十位
  408.           CALL  SHOW_DIG2

  409. CONV4:    INC  LCD_X         ;調(diào)整顯示地址
  410.           MOV  A,71H         ;個位
  411.           CALL  SHOW_DIG2
  412.           INC  LCD_X         ;調(diào)整顯示地址
  413.           MOV  A,#'.'
  414.           MOV  B,LCD_X
  415.           CALL  LCDP2
  416.           MOV  A,70H         ;加載小數(shù)位
  417.           INC  LCD_X         ;設(shè)置位置
  418.           CALL  SHOW_DIG2    ;顯示數(shù)據(jù)
  419.           RET
  420. ;=============================================
  421. ;在LCD的第二行顯示數(shù)據(jù)字符
  422. ;A=ASCII 數(shù)據(jù), B=位置變量
  423. ;==============================================
  424. LCDP2:   PUSH  ACC        ;在LCD的第二行顯示字符
  425.          MOV  A,B         ;設(shè)置顯示地址
  426.          ADD  A,#90H     ;設(shè)置LCD的第二行地址
  427.          CALL  WCOM       ;寫入命令
  428.          POP  ACC         ;由堆棧取出A
  429.          CALL  WDATA      ;寫入數(shù)據(jù)
  430.          RET
  431. ;-------------------------------------------------------
  432. SHOW_DIG2:                 ;在 LCD 的第二行顯示數(shù)字
  433.           ADD  A,#30H      ;加30H,轉(zhuǎn)換為ASCII碼
  434.           MOV  B,LCD_X     ;確定顯示位置
  435.           CALL  LCDP2      ;送顯示
  436.           RET
  437. ;*************************************************************************
  438. ;==========================================================
  439. ; LCD 溫度值顯示子程序2,顯示在第四行
  440. ;73H-70H 分別存放百位、十位、個位、小數(shù)位的數(shù)據(jù)
  441. ;==========================================================
  442. CONV02:   MOV  A,73H         ;加載百位數(shù)據(jù)
  443.           MOV  LCD_X,#1      ;設(shè)置顯示位置
  444.           JNB  FLAH0,CONV10   ;
  445.           MOV  A,#"-"        ;顯示"-"
  446.           MOV  B,LCD_X
  447.           CALL  LCDP4

  448.           MOV  A,72H         ;十位
  449.           CJNE A,#00H,CONV13
  450.           INC  LCD_X         ;調(diào)整顯示地址
  451.           MOV  A,#" "        ;十位數(shù)等于0顯示空格
  452.           MOV  B,LCD_X
  453.           CALL  LCDP4
  454.           JMP  CONV14

  455. CONV10:   CJNE A,#00H,CONV12

  456. CONV11:   MOV  A,#" "        ;百位數(shù)等于0顯示空格
  457.           MOV  B,LCD_X
  458.           CALL  LCDP4
  459.           MOV  A,72H         ;十位
  460.           CJNE A,#00H,CONV13
  461.           INC  LCD_X         ;調(diào)整顯示地址
  462.           MOV  A,#" "        ;十位數(shù)等于0顯示空格
  463.           MOV  B,LCD_X
  464.           CALL  LCDP4
  465.           JMP  CONV14

  466. CONV12:   CALL  SHOW_DIG4    ;顯示數(shù)據(jù)

  467. CONV13:   INC  LCD_X         ;調(diào)整顯示地址
  468.           MOV  A,72H         ;十位
  469.           CALL  SHOW_DIG4

  470. CONV14:   INC  LCD_X         ;調(diào)整顯示地址
  471.           MOV  A,71H         ;個位
  472.           CALL  SHOW_DIG4
  473.           INC  LCD_X         ;調(diào)整顯示地址
  474.           MOV  A,#'.'
  475.           MOV  B,LCD_X
  476.           CALL  LCDP4
  477.           MOV  A,70H         ;加載小數(shù)位
  478.           INC  LCD_X         ;設(shè)置位置
  479.           CALL  SHOW_DIG4    ;顯示數(shù)據(jù)
  480.           RET
  481. ;=============================================
  482. ;在LCD的第二行顯示數(shù)據(jù)字符
  483. ;A=ASCII 數(shù)據(jù), B=位置變量
  484. ;==============================================
  485. LCDP4:   PUSH  ACC        ;在LCD的第二行顯示字符
  486.          MOV  A,B         ;設(shè)置顯示地址
  487.          ADD  A,#98H      ;設(shè)置LCD的第二行地址
  488.          CALL  WCOM       ;寫入命令
  489.          POP  ACC         ;由堆棧取出A
  490.          CALL  WDATA      ;寫入數(shù)據(jù)
  491.          RET
  492. ;-------------------------------------------------------
  493. SHOW_DIG4:                 ;在 LCD 的第二行顯示數(shù)字
  494.           ADD  A,#30H      ;加30H,轉(zhuǎn)換為ASCII碼
  495.           MOV  B,LCD_X     ;確定顯示位置
  496.           CALL  LCDP4      ;送顯示
  497.           RET
  498. ;*************************************************************************
  499. ;------------------------------------------------------------------
  500. ;傳感器 寫命令、數(shù)據(jù)子程序
  501. ;根據(jù)命令的內(nèi)容,進(jìn)行寫操作
  502. ;------------------------------------------------------------------
  503. WRITE:  MOV R2,#8            ;8位數(shù)據(jù)長度
  504.         CLR  C
  505. WR1:    JNB FLAG0,L21
  506.         CLR CG_CHENEI        ;開始寫入傳感器總線要處于復(fù)位(低)狀態(tài)
  507.         MOV R3,#08
  508.         DJNZ R3,$            ;總線復(fù)位保持16微妙以上
  509.         RRC A                ;把一個字節(jié)DATA 分成8個BIT環(huán)移給C
  510.         MOV CG_CHENEI,C      ;寫入一個BIT
  511.         MOV R3,#3CH
  512.         DJNZ R3,$            ;等待120微妙
  513.         SETB CG_CHENEI       ;重新釋放總線
  514.         NOP
  515.         DJNZ R2,WR1          ;寫入下一個BIT
  516.         SETB CG_CHENEI
  517.         RET

  518. L21:    JNB FLAG1,L22
  519.         CLR CG_CHEWAI        ;開始寫入傳感器總線要處于復(fù)位(低)狀態(tài)
  520.         MOV R3,#08
  521.         DJNZ R3,$            ;總線復(fù)位保持16微妙以上
  522.         RRC A                ;把一個字節(jié)DATA 分成8個BIT環(huán)移給C
  523.         MOV CG_CHEWAI,C      ;寫入一個BIT
  524.         MOV R3,#3CH
  525.         DJNZ R3,$            ;等待120微妙
  526.         SETB CG_CHEWAI       ;重新釋放總線
  527.         NOP
  528.         DJNZ R2,WR1          ;寫入下一個BIT
  529.         SETB CG_CHEWAI
  530.         RET

  531. L22:    JNB FLAG2,L23
  532.         CLR CG_SHUIWE        ;開始寫入傳感器總線要處于復(fù)位(低)狀態(tài)
  533.         MOV R3,#08
  534.         DJNZ R3,$            ;總線復(fù)位保持16微妙以上
  535.         RRC A                ;把一個字節(jié)DATA 分成8個BIT環(huán)移給C
  536.         MOV CG_SHUIWE,C      ;寫入一個BIT
  537.         MOV R3,#3CH
  538.         DJNZ R3,$            ;等待120微妙
  539.         SETB CG_SHUIWE       ;重新釋放總線
  540.         NOP
  541.         DJNZ R2,WR1          ;寫入下一個BIT
  542.         SETB CG_SHUIWE
  543.         RET

  544. L23:    JNB FLAG3,L24
  545.         CLR CG_YOUWEN        ;開始寫入傳感器總線要處于復(fù)位(低)狀態(tài)
  546.         MOV R3,#08
  547.         DJNZ R3,$            ;總線復(fù)位保持16微妙以上
  548.         RRC A                ;把一個字節(jié)DATA 分成8個BIT環(huán)移給C
  549.         MOV CG_YOUWEN,C      ;寫入一個BIT
  550.         MOV R3,#3CH
  551.         DJNZ R3,$            ;等待120微妙
  552.         SETB CG_YOUWEN       ;重新釋放總線
  553.         NOP
  554.         DJNZ R2,WR1          ;寫入下一個BIT
  555.         SETB CG_YOUWEN
  556. L24:    RET

  557. ;=================================================
  558. MENU_OK1: MOV  DPTR,#M_OK11  ;指針指到顯示信息區(qū)
  559.           MOV  A,#1          ;顯示在第一行
  560.           CALL  LCD_PRINT
  561.           MOV  DPTR,#M_OK12  ;指針指到顯示信息區(qū)
  562.           MOV  A,#2          ;顯示在第二行
  563.           CALL  LCD_PRINT
  564.           MOV  DPTR,#M_OK13  ;指針指到顯示信息區(qū)
  565.           MOV  A,#3          ;顯示在第二行
  566.           CALL  LCD_PRINT
  567.           MOV  DPTR,#M_OK14  ;指針指到顯示信息區(qū)
  568.           MOV  A,#4          ;顯示在第二行
  569.           CALL  LCD_PRINT
  570.           RET
  571. M_OK11:   DB"車內(nèi)溫度:      ",0
  572. M_OK12:   DB"            ℃ ",0
  573. M_OK13:   DB"車外溫度:      ",0
  574. M_OK14:   DB"            ℃ ",0
  575. ;=================================================
  576. MENU_OK2: MOV  DPTR,#M_OK21  ;指針指到顯示信息區(qū)
  577.           MOV  A,#1          ;顯示在第一行
  578.           CALL  LCD_PRINT
  579.           MOV  DPTR,#M_OK22  ;指針指到顯示信息區(qū)
  580.           MOV  A,#2          ;顯示在第二行
  581.           CALL  LCD_PRINT
  582.           MOV  DPTR,#M_OK23  ;指針指到顯示信息區(qū)
  583.           MOV  A,#3          ;顯示在第二行
  584.           CALL  LCD_PRINT
  585.           MOV  DPTR,#M_OK24  ;指針指到顯示信息區(qū)
  586.           MOV  A,#4          ;顯示在第二行
  587.           CALL  LCD_PRINT
  588.           RET
  589. M_OK21:   DB"水溫:         ",0
  590. M_OK22:   DB"            ℃ ",0
  591. M_OK23:   DB"油溫:         ",0
  592. M_OK24:   DB"            ℃ ",0

  593. ;==================================================
  594. ;在LCD的第一行或第二行顯示字符串
  595. ;DPTR = 放字符串的地址
  596. ;==================================================
  597. LCD_PRINT:CJNE  A,#1,LINE2  ;判斷是否為第一行
  598. LINE1:    MOV  A,#80H       ;設(shè)置 LCD 的第一行地址
  599.           CALL  WCOM        ;寫入命令
  600.           CALL  CLR_LINE    ;清除該行字符數(shù)據(jù)
  601.           MOV  A,#80H       ;設(shè)置 LCD 的第一行地址
  602.           CALL  WCOM        ;寫入命令
  603.           JMP  FILL

  604. LINE2:    CJNE  A,#2,LINE3  ;判斷是否為第二行
  605.           MOV  A,#90H       ;設(shè)置 LCD 的第二行地址
  606.           CALL  WCOM        ;寫入命令
  607.           CALL  CLR_LINE    ;清除該行字符數(shù)據(jù)
  608.           MOV  A,#90H       ;設(shè)置 LCD 的第二行地址
  609.           CALL  WCOM
  610.           JMP  FILL

  611. LINE3:    CJNE  A,#3,LINE4  ;判斷是否為第三行
  612.           MOV  A,#88H       ;設(shè)置 LCD 的第三行地址
  613.           CALL  WCOM        ;寫入命令
  614.           CALL  CLR_LINE    ;清除該行字符數(shù)據(jù)
  615.           MOV  A,#88H       ;設(shè)置 LCD 的第三行地址
  616.           CALL  WCOM
  617.           JMP  FILL

  618. LINE4:    MOV  A,#98H      ;設(shè)置 LCD 的第四行地址
  619.           CALL  WCOM        ;寫入命令
  620.           CALL  CLR_LINE    ;清除該行字符數(shù)據(jù)
  621.           MOV  A,#98H      ;設(shè)置 LCD 的第四行地址
  622.           CALL  WCOM

  623. FILL:     CLR  A            ;填入字符
  624.           MOVC  A,@A+DPTR   ;由信息區(qū)取出字符
  625.           CJNE  A,#0,LC1    ;判斷是否為結(jié)束碼
  626.           RET

  627. LC1:      CALL  WDATA       ;寫入數(shù)據(jù)
  628.           INC  DPTR         ;指針加1
  629.           JMP  FILL         ;繼續(xù)填入字符
  630. ;===============================================
  631. ;清除一行 LCD 的字符
  632. ;輸入一行空格,來替代原顯示字符
  633. ;===============================================
  634. CLR_LINE: MOV  R0,#24       ;清除該行 LCD 的字符
  635. CL1:      MOV  A,#' '
  636.           CALL  WDATA
  637.           DJNZ  R0,CL1
  638.           RET
  639. ;====================================================
  640. ;傳感器 復(fù)位與檢測子程序
  641. ;傳感器 正常 FLAG* 置 1,不正常 FLAG* 置 0。
  642. ;====================================================
  643. RESET:  JNB FLAG0,L31
  644.         SETB CG_CHENEI        ;
  645.         NOP
  646.         CLR CG_CHENEI
  647.         MOV R0,#6BH           ;主機(jī)發(fā)出延時復(fù)位低脈沖
  648.         MOV R1,#04H
  649. TSR11:  DJNZ R0,$             ;延時
  650.         MOV R0,#6BH
  651.         DJNZ R1,TSR11
  652.         SETB CG_CHENEI        ;然后拉高數(shù)據(jù)線
  653.         NOP
  654.         NOP
  655.         NOP
  656.         MOV R0,#32H
  657. TSR21:  JNB CG_CHENEI,TSR31   ;等待傳感器回應(yīng)
  658.         DJNZ R0,TSR21
  659.         JMP TSR41             ; 延時
  660. TSR31:  SETB FLAG4            ; 置標(biāo)志位,表示DS1820存在
  661.         JMP TSR51
  662. TSR41:  CLR FLAG4             ; 清標(biāo)志位,表示DS1820不存在
  663.         JMP TSR61
  664. TSR51:  MOV R0,#06BH
  665.         DJNZ R0,$             ; 時序要求延時一段時間
  666. TSR61:  SETB CG_CHENEI
  667.         RET
  668. ;------------------------
  669. L31:    JNB FLAG1,L32
  670.         SETB CG_CHEWAI        ;
  671.         NOP
  672.         CLR CG_CHEWAI
  673.         MOV R0,#6BH           ;主機(jī)發(fā)出延時復(fù)位低脈沖
  674.         MOV R1,#04H
  675. TSR12:  DJNZ R0,$             ;延時
  676.         MOV R0,#6BH
  677.         DJNZ R1,TSR12
  678.         SETB CG_CHEWAI        ;然后拉高數(shù)據(jù)線
  679.         NOP
  680.         NOP
  681.         NOP
  682.         MOV R0,#32H
  683. TSR22:  JNB CG_CHEWAI,TSR32   ;等待傳感器回應(yīng)
  684.         DJNZ R0,TSR22
  685.         JMP TSR42             ; 延時
  686. TSR32:  SETB FLAG5            ; 置標(biāo)志位,表示DS1820存在
  687.         JMP TSR52
  688. TSR42:  CLR FLAG5             ; 清標(biāo)志位,表示DS1820不存在
  689.         JMP TSR62
  690. TSR52:  MOV R0,#06BH
  691.         DJNZ R0,$             ; 時序要求延時一段時間
  692. TSR62:  SETB CG_CHEWAI
  693.         RET
  694. ;------------------------
  695. L32:    JNB FLAG2,L33
  696.         SETB CG_SHUIWE        ;
  697.         NOP
  698.         CLR CG_SHUIWE
  699.         MOV R0,#6BH           ;主機(jī)發(fā)出延時復(fù)位低脈沖
  700.         MOV R1,#04H
  701. TSR13:  DJNZ R0,$             ;延時
  702.         MOV R0,#6BH
  703.         DJNZ R1,TSR13
  704.         SETB CG_SHUIWE        ;然后拉高數(shù)據(jù)線
  705.         NOP
  706.         NOP
  707.         NOP
  708.         MOV R0,#32H
  709. TSR23:  JNB CG_SHUIWE,TSR33   ;等待傳感器回應(yīng)
  710.         DJNZ R0,TSR23
  711.         JMP TSR43             ; 延時
  712. TSR33:  SETB FLAG6            ; 置標(biāo)志位,表示DS1820存在
  713.         JMP TSR53
  714. TSR43:  CLR FLAG6             ; 清標(biāo)志位,表示DS1820不存在
  715.         JMP TSR63
  716. TSR53:  MOV R0,#06BH
  717.         DJNZ R0,$             ; 時序要求延時一段時間
  718. TSR63:  SETB CG_SHUIWE
  719.         RET
  720. ;------------------------
  721. L33:    JNB FLAG3,L34
  722.         SETB CG_YOUWEN        ;
  723.         NOP
  724.         CLR CG_YOUWEN
  725.         MOV R0,#6BH           ;主機(jī)發(fā)出延時復(fù)位低脈沖
  726.         MOV R1,#04H
  727. TSR14:  DJNZ R0,$             ;延時
  728.         MOV R0,#6BH
  729.         DJNZ R1,TSR14
  730.         SETB CG_YOUWEN        ;然后拉高數(shù)據(jù)線
  731.         NOP
  732.         NOP
  733.         NOP
  734.         MOV R0,#32H
  735. TSR24:  JNB CG_YOUWEN,TSR34   ;等待傳感器回應(yīng)
  736.         DJNZ R0,TSR24
  737.         JMP TSR44             ; 延時
  738. TSR34:  SETB FLAG7            ; 置標(biāo)志位,表示DS1820存在
  739.         JMP TSR54
  740. TSR44:  CLR FLAG7             ; 清標(biāo)志位,表示DS1820不存在
  741.         JMP TSR64
  742. TSR54:  MOV R0,#06BH
  743.         DJNZ R0,$             ; 時序要求延時一段時間
  744. TSR64:  SETB CG_YOUWEN
  745. L34:    RET
  746. ;------------------------

  747. ;==========================================================
  748. ;=================================================
  749. ;對 LCD 做初始化設(shè)置
  750. ;=================================================
  751. SET_LCD:  MOV A,#34H      ;34H--擴(kuò)充指令操作
  752.           CALL  WCOM         ;寫入命令
  753.    MOV A,#30H      ;30H--基本指令操作
  754.           CALL  WCOM         ;寫入命令
  755.    MOV A,#01H      ;清除顯示
  756.           CALL  WCOM         ;寫入命令
  757.           MOV A,#06H      ;指定在資料寫入或讀取時,光標(biāo)的移動方向
  758.           CALL  WCOM         ;DDRAM 的地址計數(shù)器(AC)加1
  759.    MOV A,#0CH      ;開顯示,關(guān)光標(biāo),不閃爍
  760.           CALL  WCOM         ;寫入命令

  761.           RET

  762. ;==================================================
  763. ;===============================================
  764. ;命令寫入子程序
  765. ;RS=L,RW=L,D0-D7=指令碼,E=高脈沖
  766. ;以8位控制方式將命令寫至LCD
  767. ;===============================================
  768. WCOM:    LCALL CHK_BUSY
  769.   CLR LCD_RS
  770.   CLR LCD_RW
  771.   MOV LCD_SJ,A
  772.   SETB LCD_EN
  773.   NOP
  774.   NOP
  775.   CLR LCD_EN
  776.   RET
  777. ;===============================================
  778. ;數(shù)據(jù)寫入子程序
  779. ;RS=H,RW=L,D0-D7=指令碼,E=高脈沖
  780. ;以8位控制方式將數(shù)據(jù)寫至LCD
  781. ;===============================================
  782. WDATA:    MOV  LCD_SJ,A       ;寫入數(shù)據(jù)
  783.           SETB  LCD_RS
  784.           CLR  LCD_RW
  785.           SETB  LCD_EN
  786.           CALL  DE
  787.           CLR  LCD_EN
  788.           CALL  DE
  789.           RET
  790. ;**********************************************************

  791. ;測忙碌子程序
  792. ;RS=0,RW=1,E=H,D0-D7=狀態(tài)字

  793. ;**********************************************************
  794. CHK_BUSY:  MOV LCD_SJ,#0FFH    ;測忙碌子程序
  795.     CLR LCD_RS
  796.     SETB LCD_RW
  797.     SETB LCD_EN
  798.     JB LCD_SJ.7,$
  799.     CLR LCD_EN
  800.     RET

  801. ;====================================================
  802. ;實時溫度值與設(shè)定報警溫度值 TH、TL 比較子程序
  803. ;當(dāng)實際溫度大于 TH 的設(shè)定值時,顯示“過高”并閃動顯示
  804. ;當(dāng)實際溫度小于 TH 的設(shè)定值時,顯示“正常”
  805. ;當(dāng)實際溫度小于 TL 的設(shè)定值時,顯示“過低”
  806. ;====================================================
  807. TEMP_COMP:JNB FLAG2,L101
  808.           MOV TEMP_TH,#SWGWSD
  809.           MOV TEMP_TL,#SWDWSD      ;設(shè)置 LCD 的第一行地址
  810.           SJMP L102
  811. L101:     JNB FLAG3,L103
  812.           MOV TEMP_TH,#YWGWSD
  813.           MOV TEMP_TL,#YWDWSD

  814. L102:     MOV  A,TEMP_ZH
  815.           CJNE  A,TEMP_TH,T_COMP0
  816. T_COMP0:  JNC   CHULI1
  817.           MOV  A,TEMP_ZH
  818.           SUBB  A,TEMP_TL       ;減數(shù)>被減數(shù),則
  819.           JC  CHULI2            ;借位標(biāo)志位C=1,轉(zhuǎn)

  820.           MOV  DPTR,#BJ50       ;顯示"正常"
  821.           CALL  TEMP_BJ3
  822.           CLR   FLAG1           ;清除報警標(biāo)志
  823. L103:     RET

  824. CHULI1:   MOV  DPTR,#BJ60       ;形成閃爍效果
  825.           CALL  TEMP_BJ3
  826.           MOV  R5,#10           ;延時10MS
  827.           ACALL DELAY1
  828.           MOV  DPTR,#BJ30       ;顯示"過高"
  829.           CALL  TEMP_BJ3
  830.           SETB  FLAG1           ;設(shè)置報警標(biāo)志
  831.           RET

  832. CHULI2:   MOV  DPTR,#BJ40       ;顯示"過低"
  833.           CALL  TEMP_BJ3
  834.           CLR   FLAG1           ;清除報警標(biāo)志
  835.           RET
  836. ;=========================================
  837. ;標(biāo)記字符寫入子程序
  838. ;=========================================
  839. TEMP_BJ3: JNB FLAG2,L001
  840.           MOV  A,#86H       ;設(shè)置 LCD 的第一行地址
  841.           SJMP L002
  842. L001:     JNB FLAG3,L004
  843.           MOV  A,#8EH       ;設(shè)置 LCD 的第三行地址
  844. L002:     CALL  WCOM
  845. L003:     CLR  A            ;填入字符
  846.           MOVC  A,@A+DPTR   ;由信息區(qū)取出字符
  847.           CJNE  A,#0,L005   ;判斷是否為結(jié)束碼
  848. L004:     RET

  849. L005:     CALL  WDATA       ;寫入數(shù)據(jù)
  850.           INC  DPTR         ;指針加1
  851.           JMP  L003         ;繼續(xù)填入字符

  852. BJ30:     DB  "過高",0      ;過高標(biāo)記
  853. BJ40:     DB  "過低",0      ;正常標(biāo)記
  854. BJ50:     DB  "正常",0      ;過低標(biāo)記
  855. BJ60:     DB  "    ",0      ;過低標(biāo)記
  856. ;**********************************************************
  857. ;語音驅(qū)動和播放程序
  858. ;**********************************************************
  859. ;50H為語音段地址暫存器,1到210段,實際用到40
  860. ;50H為E0H~E7H時分別代表自低往高的8級音量
  861. ;在語音播放過程中發(fā)送F2H至50H可循環(huán)播放當(dāng)前地址語音
  862. ;發(fā)送FEH至50H停止播放語音
  863. ;****************************************************
  864. YUYIN: RET        ;$$$$$$$$$$$$$
  865.        MOV TMOD,#00000001B ;定時/計數(shù)器0工作于方式1
  866.        MOV R6,#08H         ;發(fā)碼8位循環(huán)數(shù)據(jù)
  867.        LCALL ONE_LINE      ;調(diào)用一線發(fā)碼子程序
  868.        RET

  869. ONE_LINE:                  ;////一線發(fā)碼子程序
  870.        SETB YYRST          ;復(fù)位
  871.        MOV R7,#2           ;延時2MS
  872.        LCALL DELAY1MS
  873.        CLR YYRST           ;延時使系統(tǒng)穩(wěn)定
  874.        MOV R7,#6           ;延時6MS
  875.        LCALL DELAY1MS
  876.        CLR YYSDA           ;喚醒語音芯片
  877.        MOV R7,#17          ;延時17MS
  878.        LCALL DELAY1MS
  879.        MOV A,YY_DAT

  880. LP1:   SETB YYSDA
  881.        RRC A               ;分辨50H內(nèi)的數(shù)據(jù)各位是高電平還是低電平
  882.        JNC DIDIANPIN       ;高電平用高:低=2:1的脈寬表示
  883.        LCALL DELAY200US
  884.        LCALL DELAY200US
  885.        LCALL DELAY200US
  886.        CLR YYSDA
  887.        LCALL DELAY200US
  888. LP2:   DJNZ R6,LP1         ;查看數(shù)據(jù)是否發(fā)完,未發(fā)完繼續(xù)發(fā)
  889.        MOV R6,#08H
  890.        SETB YYSDA
  891.        RET

  892. DIDIANPIN:                 ;低電平用高:低=1:2的脈寬表示
  893.        LCALL DELAY200US
  894.        CLR YYSDA
  895.        LCALL DELAY200US
  896.        LCALL DELAY200US
  897.        LCALL DELAY200US
  898.        SJMP LP2

  899. ;以下為延時子程序
  900. DELAY200US:                ;延時200US子程序,晶振11.0592MHz,方式1
  901.        MOV  TH0,#0FFH
  902.        MOV  TL0,#47H
  903.        SETB TR0
  904. LOP1:  JBC  TF0,NEXT1
  905.        SJMP LOP1
  906. NEXT1: CLR TR0
  907.        RET

  908. DELAY1MS:                  ;延時1ms子程序
  909.        MOV  TH0,#0FCH
  910.        MOV  TL0,#66H
  911.        SETB TR0
  912. LOP2:  JBC  TF0,NEXT2
  913.        SJMP LOP2
  914. NEXT2: DJNZ R7,DELAY1MS
  915.        CLR TR0
  916.        RET
  917. ;**********************************************************
  918. ;延時子程序
  919. ;**********************************************************
  920. DE:       MOV  R7,#250        ;延時 500 微秒
  921.           DJNZ  R7,$
  922.           RET
  923. ;===============================================
  924. DELAY:   MOV  R5,#20      ;延時20MS
  925. DELAY1:  MOV  R6,#48      ;50
  926. DL1:     MOV  R7,#96      ;100
  927.          DJNZ  R7,$
  928.          DJNZ  R6,DL1
  929.          DJNZ  R5,DELAY1
  930.          RET              ;96*2*48*(12/11.0592)+2*(12/11.0592)≈10000uS=10mS

  931.           END
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:72846 發(fā)表于 2015-1-28 11:46 | 顯示全部樓層
我測試下,感謝分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 男人天堂网址 | 超碰在线人人 | 天天操天天射综合 | 奇米四色在线观看 | h视频免费在线观看 | 欧美久久精品一级黑人c片 91免费在线视频 | 激情毛片 | 国产精品视频在线播放 | 久久久久精 | av网站免费看 | 日韩激情在线 | 中文字幕精品一区二区三区精品 | 国产精品小视频在线观看 | 性一爱一乱一交一视频 | 亚洲 欧美 激情 另类 校园 | 免费av手机在线观看 | 亚洲狠狠 | 91精品麻豆日日躁夜夜躁 | 日本精品久久 | 久久激情五月丁香伊人 | 精品一区二区在线看 | 久久精品久久精品 | 免费国产一区二区视频 | 人人射人人| 男女免费观看在线爽爽爽视频 | 91视频88av| 最新中文字幕 | 亚洲社区在线 | 国产精品久久久久久久久久不蜜臀 | 精品国产一区二区三区在线观看 | 精品无码久久久久久久动漫 | 一级a性色生活片久久毛片 一级特黄a大片 | 日韩毛片在线观看 | av中文字幕在线观看 | 国产精品3区 | 国产精品www| 国产精品成人免费 | 欧美色影院 | 亚洲国产一区在线 | 久久99精品久久久 | 国产精品一区二 |