MAX7219驱动数码管-8G1K08A-汇编
本帖最后由 DebugLab 于 2024-10-12 09:13 编辑;11.059200
$INCLUDE(STC8G.INC)
;引脚定义
MAX7219_CS EQU P55
ORG 0000H
LJMPF_MAIN
F_MAIN:
MOV SP,#7FH
MOV P3M1,#00H
MOV P3M0,#00H
MOV P5M1,#00H
MOV P5M0,#00H
LCALL F_SPI_MasterInit
LCALL F_MAX7219_Init
MOV 30H,#8
L_LOOP:
MOV A,30H
MOV R7,30H
LCALL F_MAX7219_WriteReg
DJNZ30H,L_LOOP
SJMP$
; 功能描述: MAX7219 初始化
; 入口参数:
; 出口参数:
; 影响资源:
; 堆栈需求:
; 注 意:
; 示 例1:
F_MAX7219_Init:
SETBMAX7219_CS ;取消片选
;清除显示寄存器
MOV 30H,#8
L_MAX7219_Init_Loop:
MOV A,30H
MOV R7,#0FH ;清除显示 00H: 不译码, 0FH: 译码模式
LCALL F_MAX7219_WriteReg
DJNZ30H,L_MAX7219_Init_Loop
MOV A,#09H ;译码模式 0: 不译码, 1: BCD 译码
MOV R7,#11111111B ;数位 0...7
LCALL F_MAX7219_WriteReg
MOV A,#0AH ;亮度 0...15
MOV R7,#0
LCALL F_MAX7219_WriteReg
MOV A,#0BH;扫描控制 0...7
MOV R7,#07H ;显示位数 +1
LCALL F_MAX7219_WriteReg
MOV A,#0CH;0:关闭模式:1: 正常工作模式
MOV R7,#1
LCALL F_MAX7219_WriteReg
MOV A,#0FH;显示检测 0: 正常显示, 1;测试
MOV R7,#0
LCALL F_MAX7219_WriteReg
RET
; 功能描述: MAX7219 写入寄存器
; 入口参数: A: 寄存器地址
; R7: 写入数据
; 出口参数:
; 影响资源:
; 堆栈需求:
; 注 意:
; 示 例1:
F_MAX7219_WriteReg:
CLR MAX7219_CS
LCALL F_SPI_ReadSendByte
MOV A,R7
LCALL F_SPI_ReadSendByte
SETBMAX7219_CS
RET
; 功能描述: SPI 主模式初始化
; 入口参数:
; 出口参数:
; 影响资源:
; 堆栈需求:
; 注 意: 注释配置
; 示 例1:
F_SPI_MasterInit:
MOV SPCTL,#0D0H ;SPI 使能,主模式
;注释配置
;ORL SPCTL,#020H ;先接发数据的低位
;ORL SPCTL,#008H ;SCLK 空闲时为高电平,SCLK 的前时钟沿为下降沿,后时钟沿为上升沿
;ORL SPCTL,#004H ;数据在 SCLK 的前时钟沿驱动,后时钟沿采样
;SPI 时钟频率选择
;#000HSYSclk / 4
;ORL SPCTL,#001H ;SYSclk / 8
;ORL SPCTL,#002H ;SYSclk / 16
;ORL SPCTL,#003H ;SYSclk / 32
RET
; 功能描述: SPI 收发一字节数据
; 入口参数: A: 发送数据
; 出口参数: A: 接收数据
; 影响资源:
; 堆栈需求:
; 注 意:
; 示 例1:
F_SPI_ReadSendByte:
MOV SPDAT,A ;发送/接收数据
L_SPI_ReadSendByte_Loop:
MOV A,SPSTAT
JZ L_SPI_ReadSendByte_Loop ;累加器为零跳转
MOV SPSTAT,#0C0H ;写 1 清零
MOV A,SPDAT ;接收数据
RET
END
玩汇编的都是牛人啊,MAX7219有16位刚刚好驱动8个数码管啊。 为何不是 STC8H4K32TL-LQFP48/32, RMB1.6
什么?8H4K64TL硬件80mA大电流LED数码管自动刷新驱动居然可以8位亮度256种组合? - 段码LCD/80mA大电流LED数码管自动刷新显示/RTC实时时钟/触摸按键/低功耗 国芯技术交流网站 - AI32位8051交流社区 (stcaimcu.com)
汇编 牛{:5_322:} 神农鼎 发表于 2024-10-12 08:02
为何不是 STC8H4K32TL-LQFP48/32, RMB1.6
有机会试下
页:
[1]