微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 一起来学LCD12864菜单程序

一起来学LCD12864菜单程序

时间:10-02 整理:3721RD 点击:
/*-------------------------------------------
项目名:   家电中央控制系统工程
程序名:    显示MCU总体程序
编写人:    杜洋 
初写时间:  2005年9月5日晚20时
程序功能:    实现液晶、语音部分的人机对话和总线的通信
实现方法:  用中断实现总线接收
CPU说明:   89S52  12MHZ晶振
接口说明:  (详见 初定义)
信息说明:  
修改日志:  
  NO.1-
 
-------------------------------------------*/
;----------------------------------------初定义
LCDDAT    EQU     P2
RS        EQU     P3.5
RW        EQU     P3.6
E         EQU     P3.7
REDLED    EQU     P3.4
BACKLED   EQU     P3.1
PLAY      EQU     P1.7
STOPIN    EQU     P3.0
LIN       EQU     P3.2
SPDAT     EQU     P1
XX2       EQU     P0.0
LT_RAM    EQU     30H
LR_RAM    EQU     40H
SP_RAM    EQU     20H
DIS1_RAM  EQU     50H
DIS2_RAM  EQU     70H
DIS3_RAM  EQU     60H
DIS4_RAM  EQU     80H
RR1       EQU     26H
RR3       EQU     21H
RR4       EQU     22H
T0_RAM    EQU     23H
QR3_RAM   EQU     24H
QR2_RAM   EQU     25H
LCDDISPLAY EQU    26H                      ;菜单显示移位寄存器
MENU_RAM  EQU     27H                     ;菜单位置寄存器
ONOFFLCD  EQU     28H

;-------------------------------------程序入口
    ORG     0000H
    JMP     LCD_START
    ORG     0003H
    JMP     LIN_INT0
     ORG     000BH
     JMP     LED_T0
    ORG     0030H

;--------------------------------------主程序开始
LCD_START:
   
    SETB   PLAY
     
     MOV    T0_RAM,#250
     MOV    TMOD,#01H
     SETB   ET0
     MOV    TL0,#0B0H                ;50MS定时初值(T0计时用)
   
     MOV    TH0,#3CH                ;50MS定时初值
   
     CLR    IT0
    SETB   EX0
     
     SETB   TR0
   
     SETB   EA
     MOV    DPTR,#TAB_0
                     
     CALL   START_LCD
     
     
;-----自检程序
     CALL   DL1S
                        
     MOV    MENU_RAM,#00H
     MOV    DPTR,#TAB_H
                     
     CALL   START_LCD
     CLR    LCDDISPLAY
;--------------------------------------主循环体程序
LCD_LOOP:
     JB  ONOFFLCD,DISPLAY_PRO
   
LCD_LOOP_1:
        
    JMP    LCD_LOOP
     
;---------------------------- 菜单显示处理
DISPLAY_PRO:
    MOV   A,MENU_RAM
      MOV   DPTR,#MENUTAB_HOST
     RLC   A
     JMP   @A+DPTR

MENUNEXT:
     
     CALL   START_LCD
     
     CLR    LCDDISPLAY
     CLR    ONOFFLCD
    JMP    LCD_LOOP

;-------------------------

MENUTAB_HOST:
     JMP    HOST_H           ;主菜单
     JMP    HOST_1           ;       1,控制
     JMP    HOST_2            ;       2,设置
     JMP    HOST_3              ;    3,智能
     JMP    HOST_4               ;  4,帮助
     
MENUTAB_1:
     JMP    HOST_11          ;
     JMP    HOST_12           ;      
     JMP    HOST_13            ;      

MENUTAB_2:
     JMP    HOST_21          ;
     JMP    HOST_22           ;      
     JMP    HOST_23            ;      
MENUTAB_3:
     JMP    HOST_31          ;
     JMP    HOST_32           ;      
     JMP    HOST_33            ;      
MENUTAB_4:
     JMP    HOST_41          ;
     JMP    HOST_42           ;      
     JMP    HOST_43            ;      

   
;-------------------------------菜单项主流程
HOST_H:                 ;主菜单的适用键
     MOV   A,LCDDISPLAY
     CJNE  A,#01H,HH_H1
     MOV    DPTR,#TAB_1
     MOV    MENU_RAM,#01H
     
     JMP    MENUNEXT
HH_H1:
     CJNE  A,#02H,HH_H2
    MOV    DPTR,#TAB_2
     MOV    MENU_RAM,#02H
     
     JMP    MENUNEXT
HH_H2:
     CJNE  A,#03H,HH_H3
    MOV    DPTR,#TAB_3
     MOV    MENU_RAM,#03H
     
     JMP    MENUNEXT
HH_H3:
     CJNE  A,#04H,HH_H4
    MOV    DPTR,#TAB_4
     MOV    MENU_RAM,#04H
     
     JMP    MENUNEXT
HH_H4:
     CLR    LCDDISPLAY
     CLR    ONOFFLCD
  
     JMP    LCD_LOOP

     ;----------------------------------------------第一层菜单
HOST_1:                                   ;《《《控制》》》
    MOV   A,LCDDISPLAY               ;回到主菜单
     CJNE  A,#0DH,HH_10
     MOV    DPTR,#TAB_H
     MOV    MENU_RAM,#00H
     
     JMP    MENUNEXT
HH_10:
     MOV   A,LCDDISPLAY
     CJNE  A,#01H,HH_11
     MOV    DPTR,#TAB_11
     MOV    MENU_RAM,#05H
     
     JMP    MENUNEXT
HH_11:
     CJNE  A,#02H,HH_12
    MOV    DPTR,#TAB_12
     MOV    MENU_RAM,#06H
     
     JMP    MENUNEXT
HH_12:
     CJNE  A,#03H,HH_13
    MOV    DPTR,#TAB_13
     MOV    MENU_RAM,#07H
     
     JMP    MENUNEXT
HH_13:
     CLR    LCDDISPLAY
     CLR    ONOFFLCD
  
     JMP    LCD_LOOP

HOST_2:                                   ;《《《设置》》》
     MOV   A,LCDDISPLAY               ;回到主菜单
     CJNE  A,#0DH,HH_20
     MOV    DPTR,#TAB_H
     MOV    MENU_RAM,#00H
      
     JMP    MENUNEXT
HH_20:
     MOV   A,LCDDISPLAY
     CJNE  A,#01H,HH_21
     MOV    DPTR,#TAB_21
     MOV    MENU_RAM,#09H
      
     JMP    MENUNEXT
      
HH_21:
     CJNE  A,#02H,HH_22
    MOV    DPTR,#TAB_22
     MOV    MENU_RAM,#0AH
      
     JMP    MENUNEXT
      
HH_22:
     CJNE  A,#03H,HH_23
    MOV    DPTR,#TAB_23
     MOV    MENU_RAM,#0BH
      
     JMP    MENUNEXT
      
HH_23:
     CLR    LCDDISPLAY
     CLR    ONOFFLCD
  
     JMP    LCD_LOOP

HOST_3:                                     ;《《《智能》》》
    MOV   A,LCDDISPLAY                 ;回到主菜单
     CJNE  A,#0DH,HH_30
     MOV    DPTR,#TAB_H
     MOV    MENU_RAM,#00H
      
     JMP    MENUNEXT
      
HH_30:
   
     MOV   A,LCDDISPLAY
     CJNE  A,#01H,HH_31
     MOV    DPTR,#TAB_31
     MOV    MENU_RAM,#0CH
      
     JMP    MENUNEXT
      
HH_31:
     CJNE  A,#02H,HH_32
    MOV    DPTR,#TAB_32
     MOV    MENU_RAM,#0DH
      
     JMP    MENUNEXT
      
HH_32:
     CJNE  A,#03H,HH_33
    MOV    DPTR,#TAB_33
     MOV    MENU_RAM,#0EH
      
     JMP    MENUNEXT
      
HH_33:
     CLR    LCDDISPLAY
     CLR    ONOFFLCD
  
     JMP    LCD_LOOP

HOST_4:                                  ;《《《帮助》》》
    MOV   A,LCDDISPLAY              ;回到主菜单
     CJNE  A,#0DH,HH_40
     MOV    DPTR,#TAB_H
     MOV    MENU_RAM,#00H
      
     JMP    MENUNEXT
      
HH_40:
   
     MOV   A,LCDDISPLAY
     CJNE  A,#01H,HH_41
     MOV    DPTR,#TAB_41
     MOV    MENU_RAM,#0FH
      
     JMP    MENUNEXT
      
HH_41:
     CJNE  A,#02H,HH_42
    MOV    DPTR,#TAB_42
     MOV    MENU_RAM,#10H
      
     JMP    MENUNEXT
      
HH_42:
     CJNE  A,#03H,HH_43
    MOV    DPTR,#TAB_43
     MOV    MENU_RAM,#11H
      
     JMP    MENUNEXT
      
HH_43:
     CLR    LCDDISPLAY
     CLR    ONOFFLCD
  
     JMP    LCD_LOOP
;----------------------------------------第二层菜单
HOST_11:
    MOV    DPTR,#TAB_11
     MOV    MENU_RAM,#04H
     JMP    MENUNEXT

HOST_12:
    MOV    DPTR,#TAB_12
     MOV    MENU_RAM,#04H
     JMP    MENUNEXT

HOST_13:
    MOV    DPTR,#TAB_13
     MOV    MENU_RAM,#04H
     JMP    MENUNEXT

HOST_21:
    MOV    DPTR,#TAB_21
     MOV    MENU_RAM,#07H
     JMP    MENUNEXT

HOST_22:
    MOV    DPTR,#TAB_22
     MOV    MENU_RAM,#07H
     JMP    MENUNEXT

HOST_23:
    MOV    DPTR,#TAB_23
     MOV    MENU_RAM,#07H
     JMP    MENUNEXT

HOST_31:
    MOV    DPTR,#TAB_31
     MOV    MENU_RAM,#0AH
     JMP    MENUNEXT

HOST_32:
    MOV    DPTR,#TAB_32
     MOV    MENU_RAM,#0AH
     JMP    MENUNEXT

HOST_33:
    MOV    DPTR,#TAB_33
     MOV    MENU_RAM,#0AH
     JMP    MENUNEXT

HOST_41:
    MOV    DPTR,#TAB_41
     MOV    MENU_RAM,#0DH
     JMP    MENUNEXT

HOST_42:
    MOV    DPTR,#TAB_42
     MOV    MENU_RAM,#0DH
     JMP    MENUNEXT

HOST_43:
    MOV    DPTR,#TAB_43
     MOV    MENU_RAM,#0DH
     JMP    MENUNEXT
;------------------------------
;----------------------------显示内容
TAB_0:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "    欢迎使用    ----------------家电中央控制系统自检中......    "
TAB_H:                                                            
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====主菜单项====3-智能   4-帮助1-控制    2-设置               "
TAB_1:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====控制选项====2-控制全部从机 1-从机选择控制 3-更新从机联接  "
TAB_2:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====设置选项====2-遥控设置   1-系统设置   3-时间设置    "
TAB_3:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====智能选项====2-温度自动控制 1-编程自动控制 3-时间自动控制  "
TAB_4:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====帮助选项====2-使用说明   1-系统自动检测 3-关于......       "
TAB_11:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAA         AA2AAAAAAAAAAAAA         AA4AAAAAAAAAAAAAAA"----;
DB "==从机选择控制==2-            ",0FH,20H,"1-            ",0FH,20H,"3-            ",0FH,1FH
TAB_12:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "==控制全部从机==2-关闭全部从机 1-开启全部从机 共有从机  个 "
TAB_13:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "==更新从机联接== [执行]-开始更新更新从机状态报告 [取消]-退出更新"
TAB_21:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====系统设置====                                                "
TAB_22:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====遥控设置====1-设置遥控键值  16路遥控开关设置2-设置遥控对象 "
TAB_23:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====时间设置====2005年09月06日  数字键入后按执行  22时33分      "
TAB_31:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "==编程自动控制== [执行]-打开串口通过电脑串口编程 [取消]-关闭串口                                               "
TAB_32:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "==温度自动控制==                                                "
TAB_33:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "==时间自动控制==                                                "
TAB_41:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "==系统自动检测==                                                "
TAB_42:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====使用说明====是由主机和多个从家电中央控制系统机组成的系统。",20H,1FH
TAB_43:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====统完全由杜洋自行本家电中央控制系开发,产权所有。"
TAB_EORR:  ;错误信息
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====系统错误====自检的错误!系统内部产生无法请断电后重新启动"
TAB_NEW:      ;新从机加入
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "==有新从机接入==统....          有新的从机接入系从机ID号:   "
TAB_OUT:      ;有从机断开
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====从机断开====已有1个从机断开 系统自检时发现--从机ID号:   "
TAB_ON:      ;开启了某从机
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====从机开启====                从机已经开启....从机ID号:   "
TAB_OFF:      ;关闭了某从机
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_LIVE:  ;自检报告显示
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_MESSAGE:    ;系统状态信息
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_BESY:        ;系统忙
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====系统忙碌====请耐心等候....  系统正在内部处理----------------"

TAB_ABOUT1:       ;系统开发关于。
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_ABOUT2:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_ABOUT3:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_NAME1:         ;系统使用说明书
;--"1AAAAAAAAAAAAAAA         3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "主机可以对任意",20H,1EH,"控制,并可以实现从机进行无线开关基本智能化控制",2EH,1FH
TAB_NAME2:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "                                                                "
TAB_NAME3:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_NAME4:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_NAME5:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_NAME6:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_W1:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_W2:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_W3:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "
TAB_W4:
;--"1AAAAAAAAAAAAAAA3AAAAAAAAAAAAAAA2AAAAAAAAAAAAAAA4AAAAAAAAAAAAAAA"----;
DB "====关于....====                                                "

;----------------------------
START_LCD:
   
    MOV    R1,#DIS1_RAM
     MOV    R2,#0
START_LCD_1:   
     MOV    A,R2
     MOVC   A,@A+DPTR
     MOV    @R1,A
     INC    R2
     INC    R1
     CJNE   R2,#64,START_LCD_1
      
     CALL   LCD_DISPLAY
     RET
;------------------------------显示寄存器清空
CLR_RAM:
    MOV    R0,#DIS1_RAM          ;清共64个内存单元
     MOV    R7,#64          ;
CLEARDISP:
  
    MOV    @R0,#00H          ;
     INC    R0             ;
     DJNZ   R7,CLEARDISP   ;
     RET
;--------------------------------------------渐亮显示程序
LED_LOOP1:                   ;
    CLR    A
LED_LO1:
    CLR    BACKLED
     INC    A                       ;A加1,渐渐的增加亮的时间
     CJNE   A,#0FFH,E2              ;当最亮时跳出
E1:
    JMP    LED_OVER1                 ;
E2:
    MOV    R7,A                    ;
D1:
    MOV    R6,#10                    ;
D019:
    JNB    LIN,LED_OVER1
     DJNZ   R6,D019                 ;
     DJNZ   R7,D1                    ;
     SETB   BACKLED                     ;
     JNB    LIN,LED_OVER1         
     CPL    A                    ;取反A
     MOV    R7,A                    ;
D2:
    MOV    R6,#10                    ;
D029:
    JNB    LIN,LED_OVER1
     DJNZ   R6,D029                    ;
     DJNZ   R7,D2                    ;
     CPL    A                    ;取回正A
     JMP    LED_LO1                    ;
LED_OVER1:
    CLR    BACKLED
     RET                    
;--------------------------------------------------渐暗子程序
LED_LOOP2:
    CLR    A
LED_LO2:
                    
    SETB   BACKLED
     INC    A
     CJNE   A,#0FFH,W2
W1:
     JMP    LED_OVER2
W2:
     MOV    R7,A
D11:
     MOV    R6,#10
D19:
     JNB    LIN,LED_OVER2
     DJNZ   R6,D19
     DJNZ   R7,D11
     CLR    BACKLED
     JNB    LIN,LED_OVER2
     CPL    A                     ;;
     MOV    R7,A
D22:
     MOV    R6,#10
D29:
     JNB    LIN,LED_OVER2
     DJNZ   R6,D29
     DJNZ   R7,D22
     CPL    A
     JMP    LED_LO2
LED_OVER2:
   
    SETB    BACKLED
   
     RET
   
;---------------------------------总线发射程序
LIN_T:
    CLR    REDLED
    CLR    EA
    CALL   BB
    MOV    R0,#LT_RAM
    MOV    R2,#4
LINT00:                      ;放入数据表
    MOV    A,@R0
    MOV    R3,#8
LINT0:                       ;发射数据
    RRC    A
    JC     LINT1
    CALL   B0
    JMP    LINT2
LINT1:
    CALL   B1
LINT2:
    DJNZ   R3,LINT0
    INC    R0
    DJNZ   R2,LINT00
LINTEXIT:    ;退出发射
    SETB   LIN
    SETB   EA
    SETB   REDLED
    RET
;------------------------------------代码0、1发射子程序[底层]
BB:                               ;初始化代码                    
    CLR    LIN
    CALL   DL4500US
    RET
B1:                              ;“1”的代码                    
        
    SETB   LIN
    CALL   DL1120US
   
     CLR    LIN
    CALL   DL560US
    RET
B0:    ;“0”的代码               
    SETB   LIN
    CALL   DL560US
     
    CLR    LIN
    CALL   DL560US
   
     RET


;======================================T0中断处理
LED_T0:
    CLR    EA
     JNB    BACKLED,LED_T0_1
     CALL   LED_LOOP1
      
LED_T0_1:
    CLR    BACKLED
     
     DJNZ   T0_RAM,LEDT0_OUT
     
     CLR    TR0
     
     MOV    T0_RAM,#250
     
     CALL   LED_LOOP2
LEDT0_OUT:
     MOV    TL0,#0B0H                ;50MS定时初值(T0计时用)
   
     MOV    TH0,#3CH                ;50MS定时初值
         
    SETB   EA
     RETI
;=========================================T0中断结束

;=========================================总线中断处理(int0)
LIN_INT0:
    CLR    REDLED
    CLR    EA                           ;
    PUSH   PSW                           ;
    PUSH   ACC
    MOV    RR1,R1                ;将R1的值寄存保护起来
    MOV    RR3,#7
      
II0:                               ;
    CALL   DL560US
    JB     LIN,INTT0EXIT            ;
    DJNZ   RR3,II0                                         
           
    MOV    R1,#LR_RAM              ;数据载入地址及位数
   
AINN:                                ;读出数据包长度位                  
    MOV    RR3,#8                       ;数据长度接收初定义
AINN0:
    JNB    LIN,$
    CALL   DL882US
    MOV    C,LIN
    JNC    AINN1
    CALL   DL560US
AINN1:                                  ;数据放入寄存器
    MOV    A,@R1
    RRC    A
    MOV    @R1,A
    DJNZ   RR3,AINN0
    MOV    RR4,A
    INC    R1
   
INN:                                 ;数据包正文                  
    MOV    RR3,#8
INN0:
    JNB    LIN,$
    CALL   DL882US
    MOV    C,LIN
    JNC    INN1
    CALL   DL560US
INN1:                                      ;数据放入寄存器
    MOV    A,@R1
    RRC    A
    MOV    @R1,A
    DJNZ   RR3,INN0
    INC    R1
    DJNZ   RR4,INN
     
;----------
    CLR    LCDDISPLAY
   
     
     
     SETB TR0     
     
     MOV    A,LR_RAM+1
     CJNE   A,#03H,INTT0EXIT
     MOV    LCDDISPLAY,LR_RAM+3
   
                          CPL XX2
     SETB   ONOFFLCD
     
     
INTT0EXIT:                         ;退出接收
    SETB   LIN

     MOV    T0_RAM,#250
     
     MOV    R1,RR1                          ;还原主程序中R1的值
               
    POP    ACC
    POP    PSW
                 
    SETB   EA
    SETB   REDLED
    RETI
;=========================================中断结束

;----------------------------液晶子程序
LCD_DISPLAY:
CLR   REDLED
PPPP_1:
MOV QR3_RAM,#30H
CALL WRI
MOV QR3_RAM,#0CH
CALL WRI
MOV QR3_RAM,#05H
CALL WRI
MOV QR3_RAM,#01H
CALL WRI
MOV QR3_RAM,#06H
CALL WRI

PPP_1:
MOV R2,#64
MOV QR3_RAM,#80H
CALL WRI
MOV R0,#DIS1_RAM
PPP_11:
MOV A,@R0
MOV QR2_RAM,A
CALL WRD
INC R0
DJNZ R2,PPP_11
SETB   REDLED
RET
;-------------------------液晶写入子程序
;写入"指令“子程序
WRI:
PUSH ACC
CLR RS
SETB RW
WRI_1:
MOV LCDDAT,#0FFH
SETB E
MOV A,LCDDAT
CLR E
JB ACC.7,WRI_1
CLR RW
MOV LCDDAT,QR3_RAM
SETB E
CLR E
POP ACC
RET
;写入"数据"子程序
WRD:
PUSH ACC
CLR RS
SETB RW
WRD_1:
MOV LCDDAT,#0FFH
SETB E
MOV A,LCDDAT
CLR E
JB ACC.7,WRD_1
SETB RS
CLR RW
MOV LCDDAT,QR2_RAM
SETB E
CLR E
POP ACC
RET


;-----------------------------------------延时子程序
;-----------
DL882US:                     
MOV R6,#20                     
D0: MOV R7,#20
DJNZ R7,$
DJNZ R6,D0
RET
DL4500US:                     
MOV R6,#10                     
DE1: MOV R7,#200
DJNZ R7,$
DJNZ R6,DE1
RET
DL560US:                        
MOV R6,#20                     
DE2: MOV R7,#12
DJNZ R7,$
DJNZ R6,DE2
RET
DL1000US:                    
MOV R6,#2                  
DE3:MOV R7,#248
DJNZ R7,$
DJNZ R6,DE3
RET
DL9000US:                     
CALL DL4500US
CALL DL4500US
RET
DL1120US:                     
CALL DL560US
CALL DL560US
RET
DL20MS:                                  ;20毫秒延时,主要用于去抖动。(100,100)
    MOV    R6,#100
DL20MS_1:                          
    MOV    R7,#100
    DJNZ   R7,$
    DJNZ   R6,DL20MS_1
    RET

DL60MS:                             ;60毫秒延时
    CALL   DL20MS
   
     CALL   DL20MS
   
     CALL   DL20MS
   
     RET
DL1S:                                ;1秒延时,用在了开始等待。(50)
    MOV    R5,#50
DL1S_1:
     
     CALL   DL20MS
     DJNZ   R5,DL1S_1
     RET

;---------------------------------------结束
END

汇编啊支持下

有C的没哦  不要汇编

表示对汇编一无所知

很好哦!不错

汇编只能看懂一点

看不懂,没有学过汇编。表示无奈

环天GPS模块 GlobalSat ET662 ET-662替代UBLOX的LEA-5A LEA-5S
GPS模块+线路板+天线+周围元器件
12864液晶屏 连接器
淘宝店网址:http://item.taobao.com/item.htm?id=15052058941

汇编好久以前整,现在改C了,觉得上手,不过效率还是汇编高,顶一个

c好啊

要C的,,,

汇编,我表示压力山大啊!不过还是谢谢小编!

谢谢小编

天啊,没法看,估计看完得用上一天时间

很好的教程,学习了,谢谢!

现在只能看看了····

汇编看着比较有压力啊,要是c的就好了。

汇编不是太懂!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top