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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

電壓檢測程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:70976 發表于 2014-12-26 23:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1.           LCD_X  EQU   23H        ;LCD 地址變量(決定文字的在LCD上的顯示位置)
  2.           FSJCQ  EQU   33H        ;TMOD工作方式暫存寄存器
  3.           BJZC   EQU   34H        ;需要比較數據暫存寄存器,用于報警顯示
  4.           BJWX   EQU   35H        ;超標設定值暫存寄存器
  5.           BJJG   EQU   36H        ;偏高設定值暫存寄存器
  6.           JJCQ   EQU   37H        ;酒精顯示0%暫存寄存器
  7.           YYBZ   EQU   38H        ;語音播放標志
  8.           DJSJCQ EQU   39H        ;10S倒計時寄存器
  9.           JJCYCS EQU   3AH        ;酒精檢測采樣次數寄存器
  10.           SHZZ2  EQU   3BH        ;數據中轉寄存器

  11.           XSYSSJ  DATA   5        ;正常時顯示延時時間
  12.           YWBJCS  EQU   5        ;缺油報警次數
  13.           WXBJZ1  EQU   100       ;有害氣體危險報警設定值200PPM
  14.                                   ;實際設定值=200(顯示設定值)/2(修正倍率)
  15.           JGBJZ1  EQU   60        ;有害氣體警告報警設定值120PPM
  16.                                   ;實際設定值=120(顯示設定值)/2(修正倍率)
  17.           WXBJZ2  EQU   50        ;酒精危險報警設定值0.05% BAC
  18.                                   ;實際設定值=0.05%(顯示設定值)*1000(顯示位修正)/1(修正倍率)
  19.           JGBJZ2  EQU   20        ;酒精警告報警設定值0.02% BAC
  20.                                   ;實際設定值=0.02%(顯示設定值)*1000(顯示位修正)/1(修正倍率)
  21.           XIUZ1   EQU   10        ;有害氣體濃度顯示數據修正值,設置大時則顯示數值小,反之顯示大
  22.           XIUZ2   EQU   34        ;酒精濃度顯示數據修正值,設置大時則顯示數值小,反之顯示大

  23. ;-----------------------------------------------------------
  24.           LCD_RS    EQU   P4.0    ;LCD 數據/命令選擇端
  25.           LCD_RW    EQU   P4.1    ;LCD 讀/寫選擇端
  26.           LCD_EN    EQU   P4.2    ;LCD 使能信號
  27.           LCD_BG    EQU   P4.3    ;LCD 背光控制端
  28.           LCD_SJ    EQU   P0      ;LCD 數據

  29.           BITE      EQU   9       ;串口發送9位數據
  30.           FSSZ      EQU   40H     ;主機發送的數據塊首址
  31.           JSSZ      EQU   50H     ;主機接收的數據塊首址

  32.           YY_DAT    DATA  29H     ;語音段地址存放單元
  33.           YYRST     EQU   P3.3    ;語音模塊復位信號引腳
  34.           BUSY      EQU   P1.0    ;語音忙控制端,0為正在播放1為沒有播放空閑時
  35.           YYSDA     EQU   P1.1    ;語音模塊數據線引腳

  36. ;===========================================================
  37.           ORG  0000H
  38.           AJMP  MAIN

  39.           ORG  0100H

  40. ;=========================================
  41. ;以下為主程序
  42. ;=========================================
  43. ;以下為油位顯示和報警程序
  44. MAIN:     MOV  SP,#60H
  45.           CLR  LCD_BG         ;打開LCD背光
  46.           LCALL  SET_LCD      ;初始化 LCD
  47.           CLR A
  48.           MOV  R0,#20H        ;將20H-7FH 單元清零
  49.           MOV  R1,#63
  50. CLEAR:    MOV  @R0,A
  51.           INC  R0
  52.           DJNZ  R1,CLEAR

  53.           MOV A,#5
  54.           MOV DPTR,#1000H     ;查看語音報警次數
  55.           MOVX @DPTR,A

  56.           ;MOV 08H,#5

  57. YWJCCX:   LCALL MENU_7        ;顯示菜單1

  58. FFFF:     LCALL YWJC          ;調用油位檢測程序
  59.           LCALL DYXZ          ;調用電瓶電壓檢測程序
  60.           LCALL DELAY3
  61.           LCALL DELAY3
  62.           SJMP FFFF

  63. ;***************************************************
  64. ;以下為子程序
  65. ;==============================================
  66. ;以下為LCD顯示有害氣體程序
  67. ;72H-70H 分別存放百位、十位、個位的數據
  68. ;==============================================
  69. CONV400:  MOV  A,73H         ;加載百位數據
  70.           MOV  LCD_X,#0      ;設置顯示位置
  71.           CJNE A,#00H,CONV410
  72.           MOV  A,#" "        ;百位數等于0顯示空格
  73.           MOV  B,LCD_X
  74.           CALL  LCDP2
  75.           JMP  CONV420

  76. CONV410:  CALL  SHOW_DIG2    ;顯示數據

  77. CONV420:  INC  LCD_X         ;調整顯示地址
  78.           MOV  A,72H         ;十位
  79.           CALL  SHOW_DIG2

  80.           INC  LCD_X         ;調整顯示地址
  81.           MOV  A,#'.'
  82.           MOV  B,LCD_X
  83.           CALL  LCDP2

  84.           INC  LCD_X         ;調整顯示地址
  85.           MOV  A,71H         ;十位
  86.           CALL  SHOW_DIG2

  87.           RET
  88. ;=========================================
  89. ;LCD 顯示菜單1
  90. ;=========================================
  91. MENU_7:   MOV  DPTR,#M_OK31  ;指針指到顯示信息區
  92.           MOV  A,#1          ;顯示在第一行
  93.           CALL  LCD_PRINT
  94.           MOV  DPTR,#M_OK32  ;指針指到顯示信息區
  95.           MOV  A,#2          ;顯示在第二行
  96.           CALL  LCD_PRINT
  97.           MOV  DPTR,#M_OK33  ;指針指到顯示信息區
  98.           MOV  A,#3          ;顯示在第二行
  99.           CALL  LCD_PRINT
  100.           MOV  DPTR,#M_OK34  ;指針指到顯示信息區
  101.           MOV  A,#4          ;顯示在第二行
  102.           CALL  LCD_PRINT
  103.           RET
  104. M_OK31:   DB"油量:          ",0
  105. M_OK32:   DB"        升      ",0
  106. M_OK33:   DB"電瓶電壓:      ",0
  107. M_OK34:   DB"        V       ",0


  108. ;--------------------------------------------------------------------------
  109. ;以下為油位檢測和報警顯示程序
  110. ;--------------------------------------------------------------------------
  111. YWJC:     MOV R2,#0AH         ;與10號從機串口通信,多功能板地址為0AH
  112.           MOV R3,#01H         ;主機要求從機發送數據塊
  113.           LCALL COM           ;主機與多功能檢測板串口通信,要求其發送9個字節數據塊

  114.           MOV A,JSSZ+3        ;取出傳感器檢測到的電壓讀數(原始數據,16進制)
  115.           MOV B,#2            ;顯示修正倍率,原始數*倍率=LCD顯示值
  116.           LCALL HEX2BCD1      ;調用數值轉換程序
  117.           MOV YYBZ,#JSSZ+3    ;設標志
  118.           MOV  DPTR,#BJ61     ;顯示油位過低
  119.           LCALL BTT5          ;顯示清屏
  120.           LCALL CONV400       ;調用LCD顯示程序
  121.           LCALL YWBJ          ;調用報警比較程序
  122.           RET

  123. YWBJ:     MOV A,JSSZ+3        ;取出檢測到的電壓讀數(原始數據,16進制)
  124.           SUBB A,#19H         ;比較,查看是否是低油位
  125.           JNC BTT6            ;油位沒有過低直接返回

  126.           MOV DPTR,#1000H     ;查看語音報警次數
  127.           MOVX A,@DPTR
  128.           JZ YWBJ1            ;等于0FF說明首次打開此段語音
  129.           DEC A               ;沒有播放完允許再播放
  130.           MOV DPTR,#1000H     ;查看語音報警次數
  131.           MOVX @DPTR,A

  132.           ;MOV A,08H     ;查看語音報警次數
  133.           ;JZ YWBJ1   ;等于0FF說明首次打開此段語音
  134.           ;DEC A               ;沒有播放完允許再播放
  135.           ;MOV 08H,A     ;查看語音報警次數

  136.           JNB BUSY,$          ;如果語言正在播放,則等待
  137.           MOV YY_DAT,#38      ;報出“油位過低請加油”
  138.           LCALL YUYIN         ;開始語音播放

  139. YWBJ1:    LCALL DELAY3        ;延時
  140.           MOV  DPTR,#BJ60     ;顯示油位過低
  141. BTT5:     MOV  A,#90H         ;設置 LCD 顯示的地址(第四行)
  142.           CALL  WCOM          ;寫入指令
  143. BLC:      CLR  A              ;填入字符
  144.           MOVC  A,@A+DPTR     ;由信息區取出字符
  145.           CJNE  A,#0,BLD      ;判斷是否為結束碼
  146. BTT6:     RET
  147. BLD:      CALL  WDATA         ;寫入數據
  148.           INC  DPTR           ;指針加1
  149.           JMP  BLC            ;繼續填入字符

  150. BJ60:     DB "低油位,請加油  ",0
  151. BJ61:     DB "        升      ",0

  152. ;--------------------------------------------------------------------------
  153. ;以下為電瓶電壓檢測和報警顯示程序
  154. ;--------------------------------------------------------------------------
  155. DYXZ:     MOV R2,#0AH         ;與10號從機串口通信,多功能板地址為0AH
  156.           MOV R3,#01H         ;主機要求從機發送數據塊
  157.           LCALL COM           ;主機與多功能檢測板串口通信,要求其發送9個字節數據塊
  158. ;電壓比較程序
  159.           MOV A,JSSZ+5        ;取出檢測到的電壓讀數(原始數據,16進制)
  160.           SUBB A,#7AH         ;比較,查看電壓是否高于8V
  161.           JC BTT1             ;電壓高于8V小于15.5V顯示電壓值,超過不顯示只報警
  162.           MOV R1,A            ;送暫存器
  163.           MOV A,JSSZ+5
  164.           SUBB A,#0C2H        ;超過15.5V報警
  165.           JC BTT2
  166. ;電壓過高
  167.           JNB BUSY,$          ;如果語言正在播放,則等待
  168.           MOV YY_DAT,#20      ;報出“電瓶電壓過高,請檢查”
  169.           LCALL YUYIN         ;開始語音播放
  170.           MOV  DPTR,#BJ50     ;超標顯示的內容
  171.           LCALL DYBJXS        ;超過15.5V報警顯示電壓過高
  172.           SJMP BTT3

  173. ;電壓正常顯示電壓值
  174. BTT2:     MOV  DPTR,#BJ52     ;顯示清屏
  175.           LCALL DYBJXS
  176.           MOV A,R1
  177.           MOV  DPTR,#DAB8     ;電壓值修正(實際電壓與檢測到的數值成非線性)
  178.           MOVC  A,@A+DPTR
  179.           MOV B,#100          ;把十進制數值分離出來
  180.           DIV AB
  181.           MOV 73H,A           ;十位
  182.           MOV A,B
  183.           MOV B,#10
  184.           DIV AB
  185.           MOV 72H,A           ;個位
  186.           MOV 71H,B           ;小數點后1位
  187.           MOV YYBZ,#JSSZ+5    ;設標志
  188.           LCALL CONV400       ;電壓值顯示
  189.           SJMP BTT3           ;返回主程序
  190. ;電壓過低
  191. BTT1:     JNB BUSY,$          ;如果語言正在播放,則等待
  192.           MOV YY_DAT,#19      ;報出“電瓶電壓過低,請檢查”
  193.           LCALL YUYIN         ;開始語音播放
  194.           MOV  DPTR,#BJ51     ;未達到8V報警電壓過低
  195.           LCALL DYBJXS        ;調用報警顯示程序
  196. BTT3:     RET


  197. DYBJXS:   MOV  A,#98H          ;設置 LCD 顯示的地址(第四行)
  198.           CALL  WCOM           ;寫入指令
  199. BLA:      CLR  A               ;填入字符
  200.           MOVC  A,@A+DPTR      ;由信息區取出字符
  201.           CJNE  A,#0,BLB       ;判斷是否為結束碼
  202.           RET
  203. BLB:      CALL  WDATA          ;寫入數據
  204.           INC  DPTR            ;指針加1
  205.           JMP  BLA             ;繼續填入字符

  206. BJ50:     DB "電壓過高,請檢查",0
  207. BJ51:     DB "電壓過低,請檢查",0
  208. BJ52:     DB"        V       ",0


  209. DAB8:                          ;電壓值修正
  210. DB  80,80,81,82,83,84,85,85,
  211. DB  86,87,88,89,90,90,91,91,
  212. DB  92,92,93,93,94,94,95,95,
  213. DB  96,97,98,98,99,100,100,101,
  214. DB  102,103,104,105,105,106,107,108,
  215. DB  109,110,110,111,112,113,114,115,
  216. DB  116,117,118,119,120,121,122,123,
  217. DB  124,125,126,128,130,132,134,135,
  218. DB  137,139,140,142,144,145,148,150,
  219. DB  153,155,158,160,163,165,170,173,
  220. DB  175,178,180,185,190,195,200,205,
  221. DB  0,





  222. ;=========================================
  223. ;以下為兩個單字節十六進制相乘
  224. ;入口:A*B
  225. ;出口:16位低字節放A中,高字節放B中
  226. ;=========================================
  227. HEX2BCD1: MUL AB
  228.           MOV R6,B
  229.           MOV R7,A
  230.           MOV JJCQ,A        ;為顯示0%作準備
  231. ;=========================================
  232. ;以下為雙字節十六進制整數轉換成雙字節BCD碼整數
  233. ;入口條件:待轉換的雙字節十六進制整數在R6、R7中。
  234. ;出口信息:轉換后的三字節BCD碼整數在R3、R4、R5中。
  235. ;影響資源:PSW、A、R2~R7,堆棧需求:2字節
  236. ;=========================================
  237.           CLR A             ;BCD碼初始化
  238.           MOV R3,A
  239.           MOV R4,A
  240.           MOV R5,A
  241.           MOV R2,#10H       ;轉換雙字節十六進制整數
  242. HB3:      MOV A,R7          ;從高端移出待轉換數的一位到CY中
  243.           RLC A
  244.           MOV R7,A
  245.           MOV A,R6
  246.           RLC A
  247.           MOV R6,A
  248.           MOV A,R5          ;BCD碼帶進位自身相加,相當于乘2
  249.           ADDC A,R5
  250.           DA A              ;十進制調整
  251.           MOV R5,A
  252.           MOV A,R4
  253.           ADDC A,R4
  254.           DA A
  255.           MOV R4,A
  256.           MOV A,R3
  257.           ADDC A,R3
  258.           MOV R3,A          ;雙字節十六進制數的萬位數不超過6,不用調整
  259.           DJNZ R2,HB3       ;處理完16bit

  260. ;=========================================
  261. ;以下為把BCD碼提取出并送顯示寄存器70H~73H
  262. ;入口:;三字節BCD碼整數在R3(高位為十萬低位為萬)、
  263. ;R4(高位為千低位為百)、R5(高位為十低位為個)中。
  264. ;出口:73H-70H(舍去十萬、萬位)
  265. ;=========================================
  266.           MOV A,R4
  267.           ANL A,#00001111B
  268.           MOV 73H,A
  269.           MOV A,R5
  270.           ANL A,#11110000B
  271.           SWAP A
  272.           MOV 72H,A
  273.           MOV A,R5
  274.           ANL A,#00001111B
  275.           MOV 71H,A
  276.           MOV 70H,#0
  277.           RET

  278. ;=========================================
  279. ;以下為主機串行通信程序
  280. ;占用資源:R0~R4,A、40H、50H
  281. ;=========================================
  282. COM:   MOV A,TMOD           ;設置T1工作方式為方式2、T0工作方式保持不變
  283.        MOV FSJCQ,A
  284.        ORL A,#00101111B
  285.        MOV TMOD,A
  286.        MOV TH1,#0FDH        ;11.0592MHz 晶振,波特率=9600,時長0.6695
  287.        MOV TL1,#0FDH
  288.        MOV SCON,#0D8H       ;置串行模式3,SM2=1,允許接收
  289.        SETB TR1             ;啟動T1
  290.        LCALL COM1           ;調用一線發碼子程序
  291.        MOV TMOD,FSJCQ       ;恢復T1、T0原先的工作方式
  292.        RET

  293. COM1:   MOV A,R2            ;發送地址幀
  294.         MOV SBUF,A
  295.         JNB TI,$
  296.         CLR TI
  297.         JNB RI,$            ;等待從機應答
  298.         CLR RI
  299.         MOV A,SBUF
  300.         XRL A,R2
  301.         JNZ MS104           ;判應答地址是否相符
  302.         CLR TB8             ;地址符合,準備發送命令
  303.         MOV SBUF,R3         ;發送發送或接收數據命令
  304.         JNB TI,$
  305.         CLR TI
  306.         JNB RI,$            ;等待從機應答
  307.         CLR RI
  308.         MOV A,SBUF          ;取應答信息
  309.         JNB ACC.7,MS102     ;判斷是否出錯
  310. MS101:  SETB TB8
  311.         MOV SBUF,#0FFH      ;不相符重新聯絡
  312.         JNB TI,$
  313.         CLR TI
  314.         SJMP COM1           ;轉重發地址

  315. MS102:  CJNE R3,#00H,MS103  ;判是否要求從機接收數據
  316.         JNB ACC.0,MS101     ;從機接收數據準備就緒否?
  317.         MOV R0,#FSSZ        ;主機發送的數據塊首址
  318.         MOV R4,#BITE        ;設數據塊長度(9字節)
  319. LPTX:   MOV SBUF,@R0        ;主機發送數據塊
  320.         JNB TI,$            ;等待發送完1幀
  321.         CLR TI
  322.         INC R0              ;修改地址指針
  323.         DJNZ R4,LPTX        ;判數據塊是否傳完
  324.         SJMP MS104          ;返回主程序

  325. MS103:  JNB ACC.1,MS101     ;從機發送數據準備就緒否?
  326.         MOV R1,#JSSZ        ;主機接收的數據塊首址
  327.         MOV R4,#BITE        ;設數據塊長度(9字節)
  328. LPRX:   JNB RI,LPRX         ;等待接收完1幀
  329.         CLR RI
  330.         MOV A,SBUF          ;取出接收到的字符
  331.         MOV @R1,A
  332.         INC R1
  333.         DJNZ R4,LPRX        ;未接收完則繼續

  334. MS104:  CLR TR1             ;關閉T1
  335.         RET

  336. ;=============================================
  337. ;在LCD的第二行顯示數據字符
  338. ;A=ASCII 數據, B=位置變量
  339. ;==============================================
  340. LCDP2:    PUSH  ACC           ;在LCD的第二行顯示字符
  341.           MOV  A,B            ;設置顯示地址
  342.           MOV R0,YYBZ
  343.           CJNE R0,#JSSZ+3,LCDP3
  344.           ADD  A,#90H         ;設置LCD的第二行地址90
  345.           SJMP LCDP4
  346. LCDP3:    CJNE R0,#JSSZ+5,LCDP5
  347.           ADD  A,#98H         ;設置LCD的第四行地址98
  348. LCDP4:    CALL  WCOM          ;寫入命令
  349. LCDP5:    POP  ACC            ;由堆棧取出A
  350.           CALL  WDATA         ;寫入數據
  351.           RET
  352. ;-------------------------------------------------------
  353. SHOW_DIG2:                   ;在 LCD 的第二行顯示數字
  354.           ADD  A,#30H        ;加30H,轉換為ASCII碼
  355.           MOV  B,LCD_X       ;確定顯示位置
  356.           CALL  LCDP2        ;送顯示
  357.           RET

  358. ;=================================================
  359. ;對 LCD 做初始化設置
  360. ;=================================================
  361. SET_LCD:  MOV A,#34H      ;34H--擴充指令操作
  362.           CALL  WCOM         ;寫入命令
  363.    MOV A,#30H      ;30H--基本指令操作
  364.           CALL  WCOM         ;寫入命令
  365.    MOV A,#01H      ;清除顯示
  366.           CALL  WCOM         ;寫入命令
  367.           MOV A,#06H      ;指定在資料寫入或讀取時,光標的移動方向
  368.           CALL  WCOM         ;DDRAM 的地址計數器(AC)加1
  369.    MOV A,#0CH      ;開顯示,關光標,不閃爍
  370.           CALL  WCOM         ;寫入命令
  371.           RET

  372. ;===============================================
  373. ;命令寫入子程序
  374. ;RS=L,RW=L,D0-D7=指令碼,E=高脈沖
  375. ;以8位控制方式將命令寫至LCD
  376. ;===============================================
  377. WCOM:    LCALL CHK_BUSY       ;寫入指令
  378.   CLR LCD_RS
  379.   CLR LCD_RW
  380.   MOV LCD_SJ,A
  381.   SETB LCD_EN
  382.   NOP
  383.   NOP
  384.   CLR LCD_EN
  385.   RET
  386. ;===============================================
  387. ;數據寫入子程序
  388. ;RS=H,RW=L,D0-D7=指令碼,E=高脈沖
  389. ;以8位控制方式將數據寫至LCD
  390. ;===============================================
  391. WDATA:    MOV  LCD_SJ,A       ;寫入數據
  392.           SETB  LCD_RS
  393.           CLR  LCD_RW
  394.           SETB  LCD_EN
  395.           CALL  DE
  396.           CLR  LCD_EN
  397.           CALL  DE
  398.           RET
  399. ;===============================================
  400. ;測LCD忙碌子程序
  401. ;RS=0,RW=1,E=H,D0-D7=狀態字
  402. ;===============================================
  403. CHK_BUSY: MOV LCD_SJ,#0FFH   ;測忙碌子程序
  404.    CLR LCD_RS
  405.    SETB LCD_RW
  406.    SETB LCD_EN
  407.    JB LCD_SJ.7,$
  408.    CLR LCD_EN
  409.    RET

  410. ;==================================================
  411. ;在LCD的顯示字符串
  412. ;DPTR = 放字符串的地址
  413. ;==================================================
  414. LCD_PRINT:CJNE  A,#1,LINE2  ;判斷是否為第一行
  415. LINE1:    MOV  A,#80H       ;設置 LCD 的第一行地址
  416.           CALL  WCOM        ;寫入命令
  417.           CALL  CLR_LINE    ;清除該行字符數據
  418.           MOV  A,#80H       ;設置 LCD 的第一行地址
  419.           CALL  WCOM        ;寫入命令
  420.           JMP  FILL

  421. LINE2:    CJNE  A,#2,LINE3  ;判斷是否為第二行
  422.           MOV  A,#90H       ;設置 LCD 的第二行地址
  423.           CALL  WCOM        ;寫入命令
  424.           CALL  CLR_LINE    ;清除該行字符數據
  425.           MOV  A,#90H       ;設置 LCD 的第二行地址
  426.           CALL  WCOM
  427.           JMP  FILL

  428. LINE3:    CJNE  A,#3,LINE4  ;判斷是否為第三行
  429.           MOV  A,#88H       ;設置 LCD 的第三行地址
  430.           CALL  WCOM        ;寫入命令
  431.           CALL  CLR_LINE    ;清除該行字符數據
  432.           MOV  A,#88H       ;設置 LCD 的第三行地址
  433.           CALL  WCOM
  434.           JMP  FILL

  435. LINE4:    MOV  A,#98H       ;設置 LCD 的第四行地址
  436.           CALL  WCOM        ;寫入命令
  437.           CALL  CLR_LINE    ;清除該行字符數據
  438.           MOV  A,#98H       ;設置 LCD 的第四行地址
  439.           CALL  WCOM

  440. FILL:     CLR  A            ;填入字符
  441.           MOVC  A,@A+DPTR   ;由信息區取出字符
  442.           CJNE  A,#0,LC1    ;判斷是否為結束碼
  443.           RET

  444. LC1:      CALL  WDATA       ;寫入數據
  445.           INC  DPTR         ;指針加1
  446.           JMP  FILL         ;繼續填入字符
  447. ;===============================================
  448. ;清除一行 LCD 的字符
  449. ;輸入一行空格,來替代原顯示字符
  450. ;===============================================
  451. CLR_LINE: MOV  R0,#16       ;清除該行 LCD 的字符
  452. CL1:      MOV  A,#' '
  453.           CALL  WDATA
  454.           DJNZ  R0,CL1
  455.           RET
  456. ;**********************************************************
  457. ;延時子程序
  458. ;**********************************************************
  459. DE:      MOV  R7,#229        ;延時 500 微秒,此條2個機器周期
  460.          DJNZ  R7,$
  461.          RET    ;此條2個機器周期,總延時(229*2+2+2)*(12/11.0592)≈500uS

  462. DELAY:   MOV  R5,#20         ;延時200MS
  463. DELAY1:  MOV  R6,#96         ;100
  464. DL1:     MOV  R7,#96         ;100
  465.          DJNZ  R7,$
  466.          DJNZ  R6,DL1
  467.          DJNZ  R5,DELAY1     ;96*2*48*(12/11.0592)+2*(12/11.0592)≈10000uS=10mS
  468.          RET

  469. DELAY2:  MOV  R6,#10         ;延時5MS
  470. DL2:     MOV  R7,#229        ;100微秒
  471.          DJNZ  R7,$
  472.          DJNZ  R6,DL2
  473.          DJNZ  R5,DELAY2
  474.          RET

  475. DELAY3:  MOV  R5,#10         ;延時200MS
  476. DELA:    MOV  R6,#255
  477. DL3:     MOV  R7,#255
  478.          DJNZ  R7,$
  479.          DJNZ  R6,DL3
  480.          DJNZ  R5,DELA
  481.          RET
  482. ;**********************************************************
  483. ;語音驅動和播放程序
  484. ;**********************************************************
  485. ;50H為語音段地址暫存器,1到210段,實際用到40
  486. ;50H為E0H~E7H時分別代表自低往高的8級音量
  487. ;在語音播放過程中發送F2H至50H可循環播放當前地址語音
  488. ;發送FEH至50H停止播放語音
  489. ;****************************************************
  490. YUYIN: MOV A,TMOD          ;設置T1工作方式為方式1、T0工作方式保持不變
  491.        MOV FSJCQ,A
  492.        ORL A,#00011111B
  493.        MOV TMOD,A
  494.        MOV R6,#08H         ;發碼8位循環數據
  495.        LCALL ONE_LINE      ;調用一線發碼子程序
  496.        MOV TMOD,FSJCQ          ;恢復T1、T0原先的工作方式
  497.        RET

  498. ONE_LINE:                  ;////一線發碼子程序
  499.        SETB YYRST          ;復位
  500.        MOV R7,#2           ;延時2MS
  501.        LCALL DELAY1MS
  502.        CLR YYRST           ;延時使系統穩定
  503.        MOV R7,#6           ;延時6MS
  504.        LCALL DELAY1MS
  505.        CLR YYSDA           ;喚醒語音芯片
  506.        MOV R7,#17          ;延時17MS
  507.        LCALL DELAY1MS
  508.        MOV A,YY_DAT

  509. LP1:   SETB YYSDA
  510.        RRC A               ;分辨50H內的數據各位是高電平還是低電平
  511.        JNC DIDIANPIN       ;高電平用高:低=2:1的脈寬表示
  512.        LCALL DELAY200US
  513.        LCALL DELAY200US
  514.        LCALL DELAY200US
  515.        CLR YYSDA
  516.        LCALL DELAY200US
  517. LP2:   DJNZ R6,LP1         ;查看數據是否發完,未發完繼續發
  518.        MOV R6,#08H
  519.        SETB YYSDA
  520.        RET

  521. DIDIANPIN:                 ;低電平用高:低=1:2的脈寬表示
  522.        LCALL DELAY200US
  523.        CLR YYSDA
  524.        LCALL DELAY200US
  525.        LCALL DELAY200US
  526.        LCALL DELAY200US
  527.        SJMP LP2

  528. ;以下為延時子程序
  529. DELAY200US:                ;延時200US子程序,晶振11.0592MHz,方式1
  530.        MOV  TH1,#0FFH
  531.        MOV  TL1,#47H
  532.        SETB TR1
  533. LOP1:  JBC  TF1,NEXT1
  534.        SJMP LOP1
  535. NEXT1: CLR TR1
  536.        RET

  537. DELAY1MS:MOV  TH1,#0FCH    ;延時1ms子程序
  538.        MOV  TL1,#66H
  539.        SETB TR1
  540. LOP2:  JBC  TF1,NEXT2
  541.        SJMP LOP2
  542. NEXT2: DJNZ R7,DELAY1MS
  543.        CLR TR1
  544.        RET


  545.          END
復制代碼


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产原创视频 | www.久久.com| 日韩一区二区在线免费观看 | 九色91视频 | 91免费福利在线 | 伊人久操 | 性欧美hd| 青青青伊人 | 九九热在线观看 | 7799精品视频天天看 | 午夜精品一区二区三区在线观看 | 99久久日韩精品免费热麻豆美女 | 久久小视频 | 久草免费在线 | 日韩中文字幕在线观看 | 国产aa| 午夜寂寞影院在线观看 | 久久国产精品一区二区三区 | 成人片免费看 | 国产999精品久久久 精品三级在线观看 | 狠狠色综合久久婷婷 | 日本黄色影片在线观看 | 精品一区在线 | 一级黄色录像片子 | 精品日韩在线 | 欧美在线观看黄色 | 日韩av最新网址 | 色综合99| 日韩精品视频在线播放 | 99re在线视频 | 中文字幕av高清 | 日韩在线观看网站 | 久久国产精品久久国产精品 | 国产亚洲一区二区精品 | 色资源在线观看 | h片在线观看免费 | 欧美精品一区三区 | 男女羞羞的网站 | 日本一二区视频 | 五月槐花香 | 国产东北一级毛片 |