- 打卡等级:常住居民II
- 打卡总天数:91
- 最近打卡:2026-04-30 08:54:04
已绑定手机
注册会员
- 积分
- 76
|
发表于 2026-4-14 08:24:49
|
显示全部楼层
;汇编源程序
;led16X16点阵
;
;
P_SW1 DATA 0A2H ;端口切换寄存器地址命名
P_SW2 DATA 0BAH ;端口切换寄存器地址命名
P0M1 DATA 093H ;端口模式寄存器地址命名
P0M0 DATA 094H
P1M1 DATA 091H
P1M0 DATA 092H
P2M1 DATA 095H
P2M0 DATA 096H
P3M1 DATA 0B1H
P3M0 DATA 0B2H
P4M1 DATA 0B3H
P4M0 DATA 0B4H
P5M1 DATA 0C9H
P5M0 DATA 0CAH
P6M1 DATA 0CBH
P6M0 DATA 0CCH
P7M1 DATA 0E1H
P7M0 DATA 0E2H
P4 DATA 0C0H ;标准51单片机扩充端口命名
P5 DATA 0C8H
P6 DATA 0E8H
P7 DATA 0F8H
T3L DATA 0D5H ;P定时器T3初值寄存器
T3H DATA 0D4H
T4L DATA 0D3H ;P定时器T4初值寄存器
T4H DATA 0D2H
T4T3M DATA 0D1H ;t4/3控制寄存器
IE2 DATA 0AFH ;中断允许寄存器2
AUXR DATA 8EH ;辅助寄存器,用于选择串口1的波特率发生定时器(T0、T1),以及工作方式1T、12T,扩展内存使能
;B1=1时内部扩展RAM被禁用,它还控制着T0T1T2三个定时/计数器的工作1T还是12T,以及T2的运行,b5=1确定串口1波特率加6倍
;B0=1,串口1的波特率发生器选择T2,B0=0选择T1,b7=1是设置T0工作在1T模式,B6=1设置T1的1T模式,B2=1是T2的1T模式
T2H DATA 0D6H ;T2初值寄存器
T2L DATA 0D7H
EADC BIT IE.5 ;ADC转换中断允许位
ORG 0000H
JMP MAIN
ORG 0003H ;INT0中断向量
ORG 000BH ;TIMER0中断向量
ORG 0013H ;INT1中断向量
ORG 001BH ;TIMER1中断向量
ORG 0023H ;UART1中断向量
ORG 002BH ;ADC中断向量
ORG 0033H ;LVD中断向量
ORG 003BH ;PCA中断向量
ORG 0043H ;UART2中断向量
ORG 004BH ;SPI中断向量
ORG 0053H ;INT2中断向量
ORG 005BH ;INT3中断向量
ORG 0063H ;TIMER2中断向量
JMP TM2_ISR
ORG 0083H ;INT4中断向量
ORG 008BH ;UART3中断向量
ORG 0093H ;UART4中断向量
ORG 009BH ;TIMER3中断向量
ORG 00A3H ;TIMER4中断向量
ORG 00ABH ;CMP中断向量
ORG 00C3H ;I2C中断向量
ORG 00CBH ;USB中断向量
ORG 00D3H ;PWMA中断向量
ORG 00DBH ;PWMB中断向量
ORG 011BH ;TKSU中断向量
ORG 0123H ;RTC中断向量
ORG 012BH ;P0中断向量
ORG 0133H ;P1中断向量
ORG 013BH ;P2中断向量
ORG 0143H ;P3中断向量
ORG 014BH ;P4中断向量
ORG 0153H ;P5中断向量
ORG 015BH ;P6中断向量
ORG 0163H ;P7中断向量
ORG 017BH ;DMA_M2M中断向量
ORG 0183H ;DMA_ADC中断向量
ORG 018BH ;DMA_SPI中断向量
ORG 0193H ;DMA_UR1T中断向量
ORG 019BH ;DMA_UR1R中断向量
ORG 01A3H ;DMA_UR2T中断向量
ORG 01ABH ;DMA_UR2R中断向量
ORG 01B3H ;DMA_UR3T中断向量
ORG 01BBH ;DMA_UR3R中断向量
ORG 01C3H ;DMA_UR4T中断向量
ORG 01CBH ;DMA_UR4R中断向量
ORG 01D3H ;DMA_LCM中断向量
ORG 01DBH ;LCM中断向量
ORG 021BH ;TIMER11中断向量
;--------------------------------------------------------------------
;内存分配及变量定义
;16X16点阵,共256个点,每一位对应一个点,共需要32个字节,从30h到4fh
XIAN_SHI_MEM EQU 30H
JISHI EQU 50H ;计时变量,计时单位为T2的计时周期
ORG 0230H
MAIN: ;主程序开始
;端口模式配置
MOV P0M0, #00H
MOV P0M1, #00H
MOV P1M0, #00H
MOV P1M1, #00H
MOV P2M0, #0ffH
MOV P2M1, #00H
MOV P3M0, #00H
MOV P3M1, #00H
MOV P4M0, #0ffH
MOV P4M1, #00H
MOV P5M0, #00H
MOV P5M1, #00H
MOV P6M0, #0ffH
MOV P6M1, #00H
MOV P7M0, #0ffH
MOV P7M1, #00H
MOV SP,#7FH
LCALL TM2_INIT
MAIN_LOOP:
MOV DPTR,#HAN_ZI
MOV R6,#11 ;显示汉字个数,用于控制循环显示
HUAN_ZI:
MOV R0,#XIAN_SHI_MEM
MOV R7,#32
DATA_LP:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R7,DATA_LP
MOV R7,#32
DELAY:
CJNE R5,#255,$
INC R4
CLR A
MOV R5,A
CJNE R4,#6,DELAY
CLR A
MOV R4,A
DJNZ R6,HUAN_ZI
JMP MAIN_LOOP
;-----------------主程序结束------------------------------------------------
;定时器T2的初始化子程序
TM2_INIT: ;40微秒@11.0592MHz
PUSH PSW
MOV PSW,#08H ;使用01组通用寄存器
MOV R4,PSW ;用R4保存PSW值,以便于在中断子程序中应用
MOV P6,#0FFH
MOV P7,#0FFH
MOV R0,#XIAN_SHI_MEM ;取得显示内存首地址
MOV R2,#0FFH ;R2中保存当前扫描的行
MOV R3,#0FFH
ORL AUXR,#04H ;定时器时钟1T模式,B2=1为1T模式,B2=0为12T模式
MOV T2L,#00H ;设置定时初始值
MOV T2H,#0F0H ;设置定时初始值
ORL AUXR,#10H ;定时器2开始计时,B4=1,为T2R
ORL IE2,#04H ;允许TIMER2中断
SETB EA ;开放总中断
POP PSW
RET
;-----------定时单行扫描16X16点阵----------------
TM2_ISR:
;-------让定时时间更长,以便观察扫描过程------------;
; INC R5 ;
; CJNE R5,#6,JIXU ;
; MOV R5,#0 ;
; JMP JIXU2 ;
;JIXU: ;
; RETI ;
;JIXU2: ;
;---------------------------------------------------;
INC R5 ;额外的计数
PUSH ACC
PUSH PSW
MOV PSW,#08H ;使用01组通用寄存器
MOV PSW,R4
;取得一行数据进行扫描,前8行由p6口扫描
MOV A,@R0
MOV P2,A
INC R0
MOV A,@R0
MOV P4,A
INC R0
MOV A,R2
RLC A
MOV R2,A
MOV A,R3
RLC A
MOV R3,A ;准备下一行扫描
MOV P6,R2 ;p6口扫描
MOV P7,R3
JC TM2_ISR_EXIT ;16行没完成扫描则退出中断,等待下一次再扫
MOV R0,#XIAN_SHI_MEM
TM2_ISR_EXIT:
MOV R4,PSW
POP PSW
POP ACC
RETI
HAN_ZI:
;DB 01H, 00H, 02H, 00H, 04H, 00H, 08H ,00H ,10H ,00H ,20H ,00H ,40H ,00H ,80H, 00H;
;DB 00H, 01H, 00H,02H, 00H, 04H, 00H, 08H, 00H, 10H, 00H, 20H, 00H ,40H, 00H, 80H;一条对角线
; 丰(0) 镇(1) 一(2) 中(3) 科(4) 技(5) 社(6) 欢(7) 迎(8) 你(9) !(10)
DB 80H, 00H, 80H, 00H, 80H, 00H, 0FEH, 3FH, 80H, 00H, 80H, 00H, 80H, 00H, 0FCH, 1FH;
DB 80H, 00H, 80H, 00H, 80H, 00H, 0FFH, 7FH, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 00H;"丰",0
HAN_ZI2:
DB 04H, 04H, 04H, 04H, 0DCH, 7FH, 02H, 04H, 82H, 3FH, 9EH, 20H, 85H, 3FH, 84H, 20H;
DB 9FH, 3FH, 84H, 20H, 84H, 3FH, 94H, 20H, 0ECH, 7FH, 04H, 11H, 80H, 20H, 40H, 40H;"镇",1
HAN_ZI3:
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 0FFH, 7FH;
DB 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H;"一",2
HAN_ZI4:
DB 80H, 00H, 80H, 00H, 80H, 00H, 80H, 00H, 0FCH, 1FH, 84H, 10H, 84H, 10H, 84H, 10H;
DB 84H, 10H, 84H, 10H, 0FCH, 1FH, 84H, 10H, 80H, 00H, 80H, 00H, 80H, 00H, 80H, 00H;"中",3
HAN_ZI5:
DB 10H, 08H, 0B8H, 08H, 0FH, 09H, 08H, 09H, 08H, 08H, 0BFH, 08H, 08H, 09H, 1CH, 09H;
DB 2CH, 08H, 0AH, 78H, 0CAH, 0FH, 09H, 08H, 08H, 08H, 08H, 08H, 08H, 08H, 08H, 08H;"科",4
HAN_ZI26:
DB 08H, 04H, 08H, 04H, 08H, 04H, 00C8H, 7FH, 3FH, 04H, 08H, 04H, 08H, 04H, 0A8H, 3FH;
DB 18H, 21H, 0CH, 11H, 0BH, 12H, 08H, 0AH, 08H, 04H, 08H, 0AH, 8AH, 11H, 64H, 60H;"技",5
HAN_ZI7:
DB 04H, 04H, 08H, 04H, 08H, 04H, 1FH, 04H, 10H, 04H, 08H, 04H, 0C8H, 7FH, 1CH, 04H;
DB 2AH, 04H, 29H, 04H, 08H, 04H, 08H, 04H, 08H, 04H, 08H, 04H, 0E8H, 7FH, 08H, 00H;"社",6
HAN_ZI8:
DB 00H, 01H, 00H, 01H, 3FH, 01H, 20H, 3FH, 0A0H, 20H, 92H, 10H, 54H, 02H, 28H, 02H;
DB 08H, 02H, 14H, 05H, 24H, 05H, 0A2H, 08H, 81H, 08H, 40H, 10H, 20H, 20H, 10H, 40H;"欢",7
HAN_ZI9:
DB 00H, 00H, 04H, 01H, 0C8H, 3CH, 48H, 24H, 40H, 24H, 40H, 24H, 4FH, 24H, 48H, 24H;
DB 48H, 24H, 48H, 2DH, 0C8H, 14H, 48H, 04H, 08H, 04H, 14H, 04H, 0E2H, 7FH, 00H, 00H;"迎",8
HAN_ZI10:
DB 10H, 01H, 10H, 01H, 10H, 01H, 88H, 7FH, 88H, 40H, 4CH, 20H, 2CH, 04H, 0AH, 04H;
DB 89H, 14H, 88H, 24H, 48H, 24H, 48H, 44H, 28H, 44H, 08H, 04H, 08H, 05H, 08H, 02H;"你",9
HAN_ZI11:
DB 00H, 00H, 08H, 00H, 08H, 00H, 08H, 00H, 08H, 00H, 08H, 00H, 08H, 00H, 08H, 00H;
DB 08H, 00H, 08H, 00H, 00H, 00H, 00H, 00H, 08H, 00H, 08H, 00H, 00H, 00H, 00H, 00H;"!",10
END |
|