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

📄 lcd.asm

📁 DSP2407A的LCD控制代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
r16  .set 280h
r17 .set  282h
r18   .set  284h
r21  .set  286h
r22   .set  288h     ;r22 为调用显示一次的列数
r23   .set  28ah     ;r24显示起始页 
r24   .set  28ch     ;r24显示起始列
r25   .set  28eh      ;r25显示结束页
r26   .set   290h
keydata    .set     292h  ;存放键值
rowdata    .set     294h  ;存放行数
scandata   .set     296h  ;存放扫描值
keybuffer  .set     298h  ;读写键值缓冲
dp_user      .set    5h
keydata1    .set    29ah
lcdtab     .set     29ch
lcddata     .set    29eh
pbdatdir   .set  709ah           

dp_pf2    .set  0e1h
padatdir  .set 7098h
pcdatdir   .set  709ch
mcra     .set    7090h
mcrb    .set    7092h
mcrc    .set    7094h
pedatdir    .set    7095h
pfdatdir     .set   7096h

;;;;;;以F口的低四位为输出,C口的7,6,5,0为输入,调试以通
   .data 

;-- 文字:  百  --
;-- 宋体24;  此字体下对应的点阵为:宽x高=32x32   --
tab24 
 .word  000H,000H,000H,004H,004H,00CH,00CH,00CH,00CH,00CH,004H,004H,004H,006H,006H,006H
 .word  007H,003H,002H,002H,002H,003H,003H,003H,003H,003H,001H,001H,001H,000H,000H,000H
 .word  000H,000H,000H,000H,000H,000H,000H,000H,000H,007H,00FH,00FH,00CH,00CH,004H,004H
 .word  0C4H,0E4H,07CH,00CH,002H,003H,003H,004H,000H,000H,000H,000H,000H,000H,000H,000H
 .word  000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,0FFH,0FFH,001H,001H,021H,021H
 .word  021H,021H,021H,021H,031H,0FFH,0FFH,000H,000H,000H,000H,000H,000H,000H,000H,000H
 .word  000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,0C0H,0F0H,080H,000H,000H,000H
 .word  000H,000H,000H,000H,000H,0E0H,0C0H,000H,000H,000H,000H,000H,000H,000H,000H,000H
  
;--  文字:  科  --
;--  楷体_GB231224;  此字体下对应的点阵为:宽x高=32x32   --
tab23
 .word  000H,000H,000H,000H,000H,000H,000H,03FH,07FH,060H,000H,001H,001H,001H,001H,000H
 .word  000H,018H,01CH,00CH,005H,007H,002H,002H,001H,001H,000H,000H,000H,000H,000H,000H
 .word  000H,001H,001H,001H,001H,001H,001H,0FFH,0FFH,000H,000H,08CH,08CH,008H,008H,000H
 .word  020H,031H,033H,013H,0FFH,0FFH,01FH,009H,00CH,00CH,00CH,004H,006H,004H,000H,000H
 .word  000H,000H,000H,080H,080H,080H,080H,0FFH,0FFH,080H,080H,0C0H,040H,040H,040H,040H
 .word  040H,000H,000H,000H,0E0H,0FFH,000H,080H,0C0H,070H,010H,008H,004H,002H,002H,000H
 .word  000H,000H,000H,000H,000H,000H,000H,0C0H,0FEH,000H,000H,000H,000H,000H,000H,000H
 .word  000H,000H,000H,000H,000H,0F0H,0E0H,000H,000H,000H,000H,000H,000H,000H,000H,000H

;--  文字:  融  --
;--  楷体_GB231224;  此字体下对应的点阵为:宽x高=32x32   --
tab22 
 .word  000H,000H,000H,000H,000H,000H,000H,000H,018H,01FH,030H,000H,000H,000H,000H,000H
 .word  000H,008H,008H,008H,008H,00CH,00CH,00CH,004H,004H,004H,000H,000H,000H,000H,000H
 .word  000H,000H,000H,018H,03FH,031H,031H,011H,010H,0FFH,010H,008H,008H,00FH,00CH,000H
 .word  001H,003H,0C3H,0F1H,099H,089H,089H,049H,07DH,060H,000H,000H,001H,000H,000H,000H
 .word  000H,000H,002H,00FH,01EH,034H,004H,084H,086H,0FEH,082H,083H,083H,0C3H,003H,002H
 .word  0FEH,0FFH,000H,008H,048H,0E8H,01FH,008H,078H,0C4H,084H,0FEH,0FFH,000H,000H,000H
 .word  000H,000H,000H,080H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
 .word  000H,0E0H,070H,040H,040H,000H,000H,000H,000H,000H,000H,000H,0E0H,000H,000H,000H

;--  文字:  创  --
;--  楷体_GB231224;  此字体下对应的点阵为:宽x高=32x32   --
tab21
 .word  000H,000H,000H,000H,000H,01FH,03FH,020H,000H,000H,000H,000H,000H,000H,000H,000H
 .word  000H,001H,001H,01FH,01EH,007H,001H,000H,000H,000H,000H,000H,000H,000H,000H,000H
 .word  000H,000H,000H,000H,000H,0FFH,0E0H,000H,000H,000H,07FH,0FFH,080H,000H,020H,0E0H
 .word  0C0H,0C3H,087H,006H,002H,082H,0C2H,072H,03BH,00EH,006H,003H,001H,000H,000H,000H
 .word  000H,000H,000H,000H,000H,0FFH,000H,000H,000H,000H,0F0H,0F0H,000H,000H,001H,007H
 .word  000H,080H,0F8H,01CH,010H,000H,000H,007H,0FFH,000H,000H,000H,000H,080H,040H,000H
 .word 000H,000H,000H,000H,000H,0F8H,0FCH,038H,030H,020H,040H,000H,000H,000H,0C0H,0C0H
 .word  0C0H,040H,060H,060H,040H,0C0H,0C0H,080H,000H,000H,000H,000H,000H,000H,000H,000H



   .include "240xa.inc"
   .def   _c_int0
   .text
_c_int0
		 
         setc  INTM
         clrc  SXM
         clrc OVM
         clrc CNF
         ldp  #dp_pf2-1
		 lacl #0E01h
         sacl SCSR1
         nop
         ldp #0e0h
         splk  #0e8h,WDCR
         ldp #0
         splk  #0h,IMR
         splk #0ffffh,IFR
         ldp  	#dp_user
		 splk	#0,r22
         out r22,WSGR
         ldp  #dp_pf2
         lacl #00h
         sacl  mcra     ;初始化mcra,定义a的0,1口为i/o
         lacl  mcrb
          lacl #0ff00h
          sacl  mcrb      ;初始化mcrb,定义c 的2,3,4口为i/o 
          lacl #000h
          sacl  mcrc      ;初始化mcrc,定义e口为i/o 
          nop
          ldp #5
          lacl #0
          sacl lcdtab
          sacl keydata
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
long1: 
         lacl  #0ff00h
         ldp #0e1h
         sacl  PADATDIR     ;a的0,1口输出且为0
         rpt  #20          ;延时
         nop
         lacl  #0ff00h     
         sacl PCDATDIR      ;c的2,3,4口输出且为0
         rpt  #20
         nop
         lacl  #0ff00h     
         sacl pedatdir      ;c的2,3,4口输出且为0
         rpt  #20
         nop
         ldp  #dp_user
         splk #3eh,r16    ;关液晶显示3e
         call write_ins0
         call write_ins1
         rpt  #100
         nop
         rpt  #100
         nop
         rpt  #100
         nop
         ldp  #dp_user
         splk #3fh,r16    ;开液晶显示3f
         call write_ins0
         call write_ins1
         rpt  #100
         nop
         rpt  #100
         nop
         ; B     long100
l1:     ldp  #dp_user
         splk #0c0h,r16     ;起始行对应行
         call write_ins0
         nop
long2:   ldp #dp_user           
          splk #0bfh,r16   ;确定初始页;call write_ins0
          call write_ins0
         ldp #dp_user
         splk  #40h,r16     ;确定初始列
         call write_ins0
         ldp #dp_user
long31:   ldp #dp_user
         call display_cs0
         call display_cs1
         ldp #dp_user
         splk  #20h,r22           ;r22 为调用显示一次的列数
        ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #60h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
          lacc   #0               
          add  #tab24           ;取第一行的地址数
          sacl  lcdtab
          call  display4            ;显示第一个字     
         call delay
         call delay
         call delay
         call delay
          ldp #dp_user
        
long32:         ldp #dp_user
          splk  #20h,r22           ;r22 为调用显示一次的列数
           ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #40h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
           lacc   #0               
           add  #tab23         ;取第一行的地址数
           sacl  lcdtab
           call  display4            ;显示第一个字     
           call delay
           call delay
           call delay
         call delay
           ldp #dp_user
long33: 
         
         ldp #dp_user
         splk  #20h,r22           ;r22 为调用显示一次的列数
        ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #60h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
          lacc   #0               
          add  #tab22          ;取第一行的地址数
          sacl  lcdtab
          call  display5           ;显示第一个字     
          call delay
          call delay
          call delay
         call delay
            ldp #dp_user
        
long34:    ldp #dp_user
          splk  #20h,r22           ;r22 为调用显示一次的列数
           ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #40h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
           lacc   #0               
           add  #tab21         ;取第一行的地址数
           sacl  lcdtab
           call  display5            ;显示第一个字    
           call delay
           call delay 
           call delay
         call delay
           ldp #dp_user 
long41:   ldp #dp_user
         call display_cs0
         call display_cs1
         ldp #dp_user
         splk  #20h,r22           ;r22 为调用显示一次的列数
        ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #60h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
          lacc   #0               
          add  #tab23           ;取第一行的地址数
          sacl  lcdtab
          call  display4            ;显示第一个字     
          call delay
          call delay
          call delay
         call delay
          ldp #dp_user
        
long42:         ldp #dp_user
          splk  #20h,r22           ;r22 为调用显示一次的列数
           ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #40h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
           lacc   #0               
           add  #tab22         ;取第一行的地址数
           sacl  lcdtab
           call  display4            ;显示第一个字     
           call delay
           call delay
           call delay
         call delay
           ldp #dp_user
long43: 
         
         ldp #dp_user
         splk  #20h,r22           ;r22 为调用显示一次的列数
        ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #60h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
          lacc   #0               
          add  #tab21          ;取第一行的地址数
          sacl  lcdtab
          call  display5           ;显示第一个字     
           call delay
           call delay
           call delay
         call delay
            ldp #dp_user  
long51:   ldp #dp_user
         call display_cs0
         call display_cs1
         ldp #dp_user
         splk  #20h,r22           ;r22 为调用显示一次的列数
        ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #60h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
          lacc   #0               
          add  #tab22           ;取第一行的地址数
          sacl  lcdtab
          call  display4            ;显示第一个字     
             call delay
           call delay
           call delay
         call delay
          ldp #dp_user
        
long52:         ldp #dp_user
          splk  #20h,r22           ;r22 为调用显示一次的列数
           ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #40h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
           lacc   #0               
           add  #tab21         ;取第一行的地址数
           sacl  lcdtab
           call  display4            ;显示第一个字     
            call delay
           call delay
           call delay
         call delay
           ldp #dp_user                      
long61:   ldp #dp_user
         call display_cs0
         call display_cs1
         ldp #dp_user
         splk  #20h,r22           ;r22 为调用显示一次的列数
        ldp #dp_user
          splk  #0bdh,r23     ;r23显示起始页
          ldp #dp_user
          splk  #60h,r24         ;r24显示起始列
          ldp #dp_user
           splk  #0bah,r25         ;r25显示结束页     
         
          lacc   #0               
          add  #tab21           ;取第一行的地址数
          sacl  lcdtab
          call  display4            ;显示第一个字   
            call delay
           call delay  
           call delay
         call delay
        
          ldp #dp_user
         
         call display_cs0
         call display_cs1 
         b l1       
		ret 
;;;;;;;;;
;可以调用的在任何位置显示一个数 
;入口参数:
;r22 为调用显示一次的列数
;r24显示起始页 
;r24显示起始列
;r25显示结束页      
;;;;;;;;;       
display4: 
           ldp #dp_user
           lacl  r22              ;保存r22,即写第一次的总列数

⌨️ 快捷键说明

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