=================================================
;管脚分配定义
;=================================================
M7219_clk bit p1.0
M7219_din bit p1.2
M7219_load bit p1.1
led_buf equ 50h ;显示数据首址
set_model equ 0ffh ;完全译码模式
set_bright equ 04h ;占空比为15/32;显示亮度;
set_limit equ 01h ;2位显示方式;
set_normal equ 01h ;测试模式
set_start equ 01h ;进入启动工作方式?
;============================================
;模拟主程序
;===========================================
org 0000h
ajmp main
org 0030h
main: mov sp,#70h
lcall Init_M7219
;====================================================
; function:Init_M7219 ;初始化max719
; input: ------------
; output: ----------
; usage: a,b
;====================================================
Init_M7219: ;初始化Max7219
mov a,#0bh ;设置扫描界限
mov b,#set_limit ;设置位数
lcall w_7219
mov a,#09h ;设置译码模式
mov b,#set_model ;00h非译码模式;ffh为BCD译码模式
lcall w_7219
mov a,#0ah ;设置亮度
mov b,#set_bright ;15/32亮度
lcall w_7219
mov a,#0fh ;设置工作方式
mov b,#set_normal ;正常工作方式
lcall w_7219
mov a,#0ch ;进入启动工作方式
mov b,#set_start
lcall w_7219
ret
;===================================================
; function:disp ;显示子程序
; input: r0
; output: -----------
; usage: r0,r3,r4,a,b
;===================================================
disp:
mov r0,#led_buf
mov r4,#01h
mov r3,#set_limit
disp1:
mov a,@r0
mov b,a
mov a,r4
lcall w_7219
inc r0
inc r4
djnz r3,disp1
ret
;===================================================
; function:w_7219 ;显示驱动程序;
; input: a ;传送7219的地址
; b ;传送7219的数据
; output:-------------
; usage: a,r2
;====================================================
w_7219:
clr M7219_clk
clr M7219_din
clr M7219_load ;置load=0
lcall sd_7219 ;传送7219的地址
mov a,b
lcall sd_7219 ;传送数据
setb M7219_load ;数据装载
clr M7219_din
ret
;=================================================
; function:sd_7219 ;向7219传送数据或地址子程序
; input: a
; output: max7219
; usage: a, r2
;==================================================
sd_7219: ;向7219送地址或数据
mov r2,#08h
c_sd: clr c
clr M7219_clk
rlc a
mov M7219_din,c ;准备数据
nop
setb M7219_clk ;上升沿将数据传入
nop
nop
clr M7219_clk
djnz r2,c_sd
ret |