📄 shumaguan.asm
字号:
/*******************************************************************************
* 标题: 启东微芯LJD-SY-5100单片机开发系统演示程序
* 文件: 数码管.asm
* 日期: 2005-7-4
* 版本: 1.0
* 作者: 启东微芯
* 网站: http://www.ljd-2008.com
********************************************************************************
* 描述: *
* 数码管轮流显0--F *
* *
* *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.ljd-2008.com All Rights Reserved *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
*******************************************************************************/
LOAD BIT P1.2
DIN BIT P1.0
DCLK BIT P1.1
DOUT BIT P3.3
;**********************************
DATA_F DATA 034H
DATA_KEY DATA 035H
TIMER DATA 030H
TIMER1 DATA 031H
TIMER2 DATA 032H
TIMER3 DATA 033H
;***********************************
ORG 0000H
JMP START
ORG 0013H
LJMP CH451_INT1
ORG 080H
START:
MOV SP,#60H
;***********************************
mov p1,#60h ;禁止其它芯片
CLR DIN ;初始化CH451
SETB DCLK
SETB DIN
SETB LOAD
SETB DOUT
NOP
MOV B,#04H ;设置CH451
MOV A,#03H ;关看门狗开显示键盘
nop
LCALL WRITE
NOP
START1:
CLR IT1 ;置外部信号为低电平触发
CLR IE1 ;清中断标志
SETB PX1
SETB EX1 ;允许键盘中断
SETB EA ;开总中断
MOV R5,#00H
TT1:
MOV A,R5
LCALL TT
MOV B,#08H ;加载字数据1
LCALL WRITE
LCALL DELAY_1S
LCALL DELAY_1S
MOV B,#03H ;字数据左移
MOV A,#00H
LCALL WRITE
INC R5
CJNE R5,#010H,TT1
JMP START1
TT:
MOV DPTR,#TAB
MOVC A,@A+DPTR
RET
NOP
JMP START1
TAB:
DB 03FH ;0
DB 006H ;1
DB 05BH ;2
DB 04FH ;3
DB 066H ;4
DB 06DH ;5
DB 07DH ;6
DB 07H ;7
DB 07FH ;8
DB 06FH ;9
DB 77H ;A
DB 07CH ;B
DB 039H ;C
DB 5EH ;D
DB 079H ;E
DB 071H ;F
;****************键盘处理*****************************
CH451_INT1:
PUSH PSW ;现场保护
PUSH ACC
PUSH B
MOV R4,#06H
YY:
MOV B,#08H
MOV A,#00H
LCALL WRITE
MOV B,#03H ;字数据左移
MOV A,#00H
LCALL WRITE
DJNZ R4,YY
LCALL INTER
K1:
MOV R3,DATA_KEY
CJNE R3,#40H,K2
JMP LED_0
K2:
MOV R3,DATA_KEY
CJNE R3,#41H,K3
JMP LED_1
K3:
MOV R3,DATA_KEY
CJNE R3,#42H,K4
JMP LED_2
K4:
MOV R3,DATA_KEY
CJNE R3,#43H,K5
JMP LED_3
K5:
MOV R3,DATA_KEY
CJNE R3,#48H,K6
JMP LED_4
K6:
MOV R3,DATA_KEY
CJNE R3,#49H,K7
JMP LED_5
K7:
MOV R3,DATA_KEY
CJNE R3,#4AH,K8
JMP LED_6
K8:
MOV R3,DATA_KEY
CJNE R3,#4BH,K9
JMP LED_7
K9:
MOV R3,DATA_KEY
CJNE R3,#50H,K10
JMP LED_8
K10:
MOV R3,DATA_KEY
CJNE R3,#51H,K11
JMP LED_9
K11:
MOV R3,DATA_KEY
CJNE R3,#52H,K12
JMP LED_A
K12:
MOV R3,DATA_KEY
CJNE R3,#53H,K13
JMP LED_B
K13:
MOV R3,DATA_KEY
CJNE R3,#58H,K14
JMP LED_C
K14:
MOV R3,DATA_KEY
CJNE R3,#59H,K15
JMP LED_D
K15:
MOV R3,DATA_KEY
CJNE R3,#5AH,K16
JMP LED_E
K16:
MOV R3,DATA_KEY
CJNE R3,#5BH,K17
JMP LED_F
K17:
POP ACC
POP PSW
CLR IE1
RETI
NOP
LJMP START
LED_A:
MOV B,#08H
MOV A,#077H
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_B:
MOV B,#08H
MOV A,#07CH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_C:
MOV B,#08H
MOV A,#039H
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_D:
MOV B,#08H
MOV A,#05EH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_E:
MOV B,#08H
MOV A,#079H
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_F:
MOV B,#08H
MOV A,#071H
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_0:
MOV B,#08H
MOV A,#03FH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_1:
MOV B,#08H
MOV A,#06H
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_2:
MOV B,#08H
MOV A,#05BH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_3:
MOV B,#08H
MOV A,#04FH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_4:
MOV B,#08H
MOV A,#066H
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_5:
MOV B,#08H
MOV A,#06DH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_6:
MOV B,#08H
MOV A,#07DH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_7:
MOV B,#08H
MOV A,#007H
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_8:
MOV B,#08H
MOV A,#07FH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
LED_9:
MOV B,#08H
MOV A,#06FH
LCALL WRITE
JMP DELAY1
NOP
LJMP START
DELAY1:
CLR IT1 ;置外部信号为低电平触发
CLR IE1 ;清中断标志
SETB PX1
SETB EX1 ;允许键盘中断
SETB EA
LCALL DELAY_1S
LCALL DELAY_1S
LCALL DELAY_1S
LCALL DELAY_1S
POP B
POP ACC
POP PSW
RETI
NOP
LJMP START
;**********************************
WRITE:
PUSH ACC
CLR EX0
CLR LOAD
MOV R7,#08H
WRITE_1:
RRC A
CLR DCLK
MOV DIN,C
SETB DCLK
DJNZ R7,WRITE_1
MOV A,B
MOV R7,#004H
WRITE_2:
RRC A
CLR DCLK
MOV DIN,C
SETB DCLK
DJNZ R7,WRITE_2
SETB LOAD
SETB EX1
POP ACC
RET
;*********************************
INTER:
PUSH PSW ;现场保护
PUSH ACC
CLR EX1
CLR LOAD ;命令开始
MOV A,#0F7H ;读键值命令,忽略12位命令的低8位,高4位用作结束标志
INTER_4:
SETB C ;在高位添0以检测位数据结束
RRC A ;低位在前,高位在后
CLR DCLK
MOV DIN,C ;送出一位数据
SETB DCLK ;产生时钟上升沿锁通知CH451输入位数据
CJNE A,#0FFH,INTER_4 ;位数据未完继续,共4位,完成后为0FFH
SETB LOAD ;产生加载上升沿通知CH451处理命令数据
MOV A,#0FCH ;该数据用以检测位数据结束
INTER_7:
MOV C,DOUT ;读入一位数据
CLR DCLK ;产生时钟下升沿通知CH451输出下一位
RLC A ;数据移入ACC,高位在前,低位在后
SETB DCLK
JC INTER_7 ;位数据未完继续,共7位,完成后才移出0
MOV DATA_KEY,A ;保存键值
INC DATA_F
POP ACC
POP PSW
SETB EX1
CLR IE1 ;清中断标志,该指令需根据实际情况作修改
RET
;**********************************
DELAY_1S:
MOV TIMER1,#1
TEST_DYA: MOV TIMER2,#255
TEST_DYA1: MOV TIMER3,#255
TEST_DYA2: NOP
NOP
DJNZ TIMER3,TEST_DYA2
DJNZ TIMER2,TEST_DYA1
DJNZ TIMER1,TEST_DYA
RET
;*************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -