⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7218__.txt

📁 单片机与cpld总线方式通信
💻 TXT
字号:
;四个子程序实现7218的各种显示。1.显示一个提示语句:将要显示的字符写到dis_table,调用DIS_NOTE,在调用
;DISPLAY显示;2.软件译码方式:先调用DIS_CHANGE,在调用DISPLAY显示;3.硬件译码:先调用DIS_MOV,再调
;用DISPLAY显示
;显示数据缓冲区30h-37h,7218工作地址:8000h
;一.DISPLAY子程序将30h-37h中的数据显示出来(软件译码的话还要在此前调用DIS_CHANGE,
     ;硬间译码需要在此之前调用DIS_MOV)
DISPLAY:    
        SETB P1.0        ;设置mode为高电平,准备写控制字
        MOV A,#0B0H      ;软件译码方式;如果采用硬件译码则B码控制字:D0h;十六进制译码为:90h
        MOV DPTR,#8000H  ;7218工作地址
        MOVX @DPTR,A     ;输出控制字  
        CLR P1.0         ;设置mode为低电平,准备写数据
        ;ret             ;可以将初始化程序作为一个独立的子程序
        ;下面的程序段向7218写入8位数据
 DIPLAY8:
        ;PUSH 00h  ; 保存R0的值
        ;PUSH 01h  ; 保存R1的值
        MOV R0,#38H  ;显示的数据的首地址
        MOV R7,#08H  ;8位显示,R1控制循环次数
        MOV DPTR,#8000h ;7218工作地址
 again: MOV A,@R0     ;取出显示的数据
        MOVX @DPTR,A  ;输出数据到7218
        INC R0        ;指向下一位数据
        DJNZ R7,again  ;8位未显示完,继续循环
        ;POP 01H        ;恢复R0,R1的值
        ;POP 00H
        RET
;***********************************************************************************************
;二.  DIS_NOTE子程序.用软件译码的方式将显示表中的8位数据转化位对应的显示码送入显示缓冲区
      ;用于软件译码,适合显示各种提示符号
DIS_NOTE:
     MOV  R0,#38H   ;显示缓冲区首地址
     MOV  R7,#08h  ;8位数据
     MOV  DPTR,#dis_table   ;显示字符表首地址
tp:  MOV   A,#00h     ;采用固定偏移量查表
     MOVC  A,@A+DPTR  ;查显示字符表
     PUSH  DPH
     PUSH  DPL
     MOV   DPTR,#led_tab  ;指向字形码(段选码)表首地址,准备将显示字符表中的数据转化位led字形码
     MOVC  A,@A+DPTR      ;查表
     MOV   @R0,A        ;转化位字形码后保存到显示缓冲区
     POP   DPL
     POP   DPH
     INC   DPTR        ;指向下一个显示字符码地址
     INC   R0      ;指向显示缓冲区的下一地址
     DJNZ  R7,tp        ;8位显示码没有送完继续
     RET 
;dis_table存放要显示的字符表,调用dis_store将此表得到的led字符码送入单片机内部显示缓冲区,再调用display程序就可以显示       
 dis_table: db  0h,10h,10h,10h,10h,10h,10h,10h              ;字符1 2 3 4 5 6 7 8
 led_tab:   db  0fbh,0b0h,0edh,0f5h,0b6h,0d7h,0dfh, 0f0h     ;0,1,2,3,4,5,6,7 
            db  0ffh,0f7h,0feh,9fh,0cbh,0bdh,0cfh,0ceh,80H       ;8,9,a,b,c,d,e,f,熄灭
  
    
;*****************************************************************************************************      
;三.将显示缓冲区的数据38H-3FH(每一单元都是一位的十六进制数)转化为对应的显示码,
  ;保存到30H-37H,供显示调用
DIS_CHANGE:
    MOV   R0,#30h  ;显示缓冲区首地址
    MOV   R1,#38H
    MOV   R7,#08h  ;8位数据
DC: MOV   A,@R0
    MOV   DPTR,#led_tab1  ;指向字形码(段选码)表首地址,准备将显示字符表中的数据转化位led字形码
    MOVC  A,@A+DPTR      ;查表
    MOV   @R1,A        ;转化位字形码后保存到显示缓冲区
    INC   R1
    INC   R0          ;指向显示缓冲区的下一地址
    DJNZ  R7,DC       ;8位显示码没有送完继续
    RET 
led_tab1: db  0fbh,0b0h,0edh,0f5h,0b6h,0d7h,0dfh, 0f0h     ;0,1,2,3,4,5,6,7 
         db  0ffh,0f7h,0feh,9fh,0cbh,0bdh,0cfh,0ceh,80H       ;8,9,a,b,c,d,e,f,熄灭
  
;**************************************************************************************************
;四.采用硬件译码将30H-37H中的内容送到显示缓冲区38-3FH
DIS_MOV:
    MOV R0,#30H    
    MOV R1,#38H
    MOV R7,#08H
DISM:
    MOV A,@R0
    MOV @R1,A
    INC R0
    INC R1
    DJNZ R7,DISM
 RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -