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

📄 file18.asm

📁 单片机学习系统附的实验源代码
💻 ASM
字号:
; 这个程序采用8x8点阵数码显示一些汉字和图形符号
; 以后我们会陆续推出更多的这方面的程序
; 本程序实现循环现实"欢迎使用HJ51/AVR"。
; 当然您可以根据自己的想法进行设计
; 比如,可以设计一个逐渐扩大的方块,一个左右移动的霓虹效果等

;下载以后,需要进行跳线关闭数码显示,切换到点阵显示,只要把
; 点阵[屏左方(三极管上方)的短路帽拔出来,短路在右边两个端子即可
; 默认在左边,同样,如果您需要数码管显示,需要把他放回去

beep equ p3.7

segdata equ p0      ;数据 输出
sege    equ p2.7    ;显示 选中
segb    equ p2.6    ;位 选
segd    equ p2.5    ;段 选

org 00h
jmp main


org 30h
main:mov sp,#30h
     clr beep       ;关闭蜂鸣器
     
     mov r0,#0 
     mov r1,#0
     mov r2,#0
           
 kk: mov dptr,#num   ;获得需要显示的表头
     mov a,r1
     mov b,#8        ; 一个字符占用8位数据
     mul ab
     add a,dpl
     mov dpl,a       ; 重定位数据表
     
 lop:mov a,r0
     movc a,@a+dptr  ;查表找到数据
     mov b,r0
     acall led8      ;进行刷新显示
     inc r0
     cjne r0,#8,lop  ;循环输出8个点
     mov r0,#0
     inc r2
     cjne r2,#60,lop  ;为了保证亮度,每个字进行60次循环显示

     mov r2,#0
     mov r0,#0
     inc r1
     cjne r1,#11,kk  ;一共需要显示11个字符
     jmp main
     
num:
     db 90h,0ffh,99h,25h,22h,55h,88h,00h        ;欢  
     db 22h,0f0h,0abh,0aah,0aah,0eah,22h,0ffh   ;迎
     db 24h,0fch,0fah,0abh,0fah,32h,4ah,80h     ;使
     db 82h,0feh,92h,0bah,92h,0bah,92h,51h      ;用
     db 66h,66h,66h,7eh,7eh,66h,66h,66h         ;H
     db 7eh,18h,18h,18h,18h,18h,0eh,00h         ;J
     db 41h,5fh,41h,47h,48h,51h,4ah,44h         ;51
     db 80h,40h,20h,10h,08h,04h,02h,01h         ;/
     db 10h,18h,28h,24h,24h,3eh,42h,41h         ;a
     db 01h,21h,12h,12h,0ah,0ah,04h,04h         ;v
     db 03h,7eh,86h,86h,7eh,16h,26h,0c6h        ;r
     
;表是怎么做出来的
;+++++++++++++++++++++++++++++++++++++
;    列
; 行 1l1,1l2,1l3,1l4,1l5,1l6,1l7,1l8 ;用这一行作个范例
; 我们假设每一行从 l1->l8依次对应一个自己的低->高8位数
; 每一个点要亮我们设为1,否则,0就灭,那么,我们就可以看到
; 如果第一行第一个要亮起来,它对应的数就是 1000 0000
; 依次类推,第2。。8行
; 我们用一个字来看 ,H,用*表示显示
;
; 列    1  2  3  4  5  6  7  8
; 行 1     *  *        *  *        => 66H
;    2     *  *        *  *        => 66H
;    3     *  *        *  *        => 66H
;    4     *  *  *  *  *  *        => 7EH     
;    5     *  *  *  *  *  *        => 7EH
;    6     *  *        *  *        => 66H
;    7     *  *        *  *        => 66H
;    8     *  *        *  *        => 66H

;  上面的那个表就是根据这里作出来的

;*********  8x8LED显示刷新  *************

;  A 列,B 行
led8:clr sege
     cpl a
     mov segdata,a     ;列
     setb segd
     nop
     clr segd
     
     mov a,#1
 lep: rl a
     djnz  b,lep 
     
     mov segdata,a     ;行
     setb segb
     nop
     clr segb
     acall delayds

     mov segdata,#0     ;行消
     setb segb
     nop
     clr segb     
ret     


;***  显示参数说明  *********************
;     A里面存放需要显示的数字
;     B里面存放需要显示的数码管位数
;     如果B大于8,那么消隐所有数码显示内容
;     另外使用了一个临时存储单元,segtmp
;     
display:
     clr sege

     mov dptr,#tab_nu
     movc a,@a+dptr
     mov segdata,a
     setb segd
     nop
     clr segd
         
     mov a,#1
 lp: rl a
     djnz  b,lp    
     mov segdata,a
     setb segb
     nop
     clr segb
     acall delayds
     
     mov segdata,#0
     setb segb
     nop
     clr segb     
     
     
ret
;************* 和显示配套的延时子程序  *********************************************
;*********** 延时 5ms ****************
delayds:
	  push psw
	  clr  psw.3
	  setb  psw.4
	  mov r0,#250
  d5: djnz r0,d5
      pop psw
    ret
;************************************************************************************
;这是数字显示表格,其中 带小数点的数字比不带小数点的数字大16
; 比如 0 的显示代码为 0;那么 0.的显示代码为 16;如此类推
tab_nu: 
             db 0c0h, 0f9h, 0a4h, 0b0h, 99h ,  92h ,  82h, 0f8h ; 数字0-7 不带小数点代码
             db 80h ,  90h,  88h ,  83h ,  0c6h, 0a1h, 86h, 8eh  ; 数字8-f   不带小数点代码
             db 40h ,  79h,  24h ,  30h ,  19h ,  12h ,  02h, 78h  ; 数字0-7  带小数点代码
             db 00h ,  10h,  08h ,  03h ,  46h ,  21h ,  06h, 0eh  ; 数字8-f   带小数点代码
             
end

⌨️ 快捷键说明

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