6.ASM6_Seg_573: 74HC573锁存器控制数码管静态显示
/**
******************************************************************************
* @file Seg573.asm
* @author Alex——小白
* @version V1.0
* @date 2019.9.1
* @brief 74HC573控制数码管
* @store 有家Proteus仿真店子
* @Link https://shop484534014.taobao.com/
* @Email [email protected]
******************************************************************************
* @attention All Rights Reserved
**/
Duan BIT P2.0 ;引脚变量名
Wei BIT P2.1
Val EQU 30H ;30H单元的变量名为Val,类似于i
ORG 0000H ;程序执行的起始地址
LJMP Main ;跳转到main函数
ORG 0100H ;程序跳转到0100H开始执行
Main:
MOV Val,#00H ;用于位选循环
CLR Wei ;573的位片选引脚
CLR Duan ;573的段片选引脚
While:
MOV A,Val
CJNE A,#8,Next ;判断Val变量值是否大于7,若是则清零
MOV Val,#00H
SJMP While ;死循环
Next:
MOV DPTR,#Wei_Tab ;DPTR指向数组Wei_Tab首位
SETB Wei ;打开控制位数码管的使能端-位选
MOV A,Val ;位号赋给A
MOVC A,@A+DPTR ;读取数组数Duan_Tab
MOV P0,A ;数码管赋值位
CLR Wei ;关闭控制位数码管的使能端
MOV P0,#0FFH ;消影
MOV DPTR,#Duan_Tab ;DPTR指向数组Duan_Tab首位
SETB Duan ;打开控制段数码管的使能端-段选
MOV A,Val ;段号赋给A
MOVC A,@A+DPTR ;读取数组数Duan_Tab
MOV P0,A ;数码管赋值段
CLR Duan ;关闭段选
MOV P0,#0FFH ;消影
LCALL Delay ;延时1ms
INC Val
SJMP While ;死循环
Delay: ;t=t1*2=1ms,修改R6的值即可更改时间(不精准)
MOV R6, #02H ;02H=2
D1:
MOV R7, #0FAH ;t1=250*2=500
D2:
DJNZ R7, D2 ;R7=250自减,直到为0跳出循环,双周期
DJNZ R6, D1 ;R6=020自减,直到为0跳出循环,双周期
RET
Duan_Tab:
DB 03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH
Wei_Tab:
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
END
如需其他代码,请联系QQ844545015