📄 l7.dt
字号:
/***********************************************
利用计时器TCC实现扫描显示七划管。预置数256
使用按钮输入矩阵, PB0,PB1作为输出端接行线,
PB2,PB3作为输入端接列线
按下按钮S11~S22,输入4位二进制码,控制LED2显示1~F.用S0(接Portc的bit3)
按下能够使LED2复位。
程序使用PortA为七划管输出端口,PD7,PD6控制LED1,LED2供电
使对应LED点亮,用查表方法把BCD数字码转换为七划管的显示码。
************************************************/
INCLUDE "ET44M210_REG.H"
ORG 0X0000
JMP INIT
org 0x0018 ;按键中断入口地址
call del
clr 0xa0
BC INTF,EINT0F
nop
RETI
org 0x0020 ;FRC溢出中断入口地址
call display
mov a,#0
mov HFRC,a
mov LFRCB,a
CALL DEL
BC INTF,FRCOF
RETI
ORG 0X0100
INIT:
MOV A,#0X00
MOV IOCA,A ;设定PORTA为输出端口
MOV IOCD,A ;设定PORTD为输出端口
CLR PORTA
COM PORTA ;PORTA置1
clr portd
mov a,#0b00001100
mov iocb,a
MOV PUCB,A ;设定提升电阻
mov a,#0xff
mov IOCC,A ;设定PortC为输入端口
mov PUCC,A ;设定PortC的提升电阻
CLR INTE ;清除所有中断功能
CLR INTF ;清除所有中断标志
BS INTE,EINT0E ;致能(开通)EINT0中断
BC EINTED,EINT0ED ;设定EINT0负跳变触发
mov HFRC,a
mov LFRCB,a ;设置FRC初值
MOV A,#0X0
MOV FRCC,A ;选用内部时钟
BS PRIE,FRCE ;开通外围电路TCC
BS INTE,FRCOE ;致能TCC中断
ENI ;开通总中断
mov A,#0
mov 0xa0,a ;个位
mov 0xa1,a ;十位
call display
;============================================================
START:
mov a,#0b11111110
mov portb,a
NOP
NOP
jbs portb,2,$+4
mov a,#0x08
or 0xa0,a
jbs portb,3,$+4
mov a,#0x04
or 0xa0,a
mov a,#0b11111101
mov portb,a
NOP
NOP
jbs portb,2,$+4
mov a,#0x02
or 0xa0,a
jbs portb,3,$+4
mov a,#1
or 0xa0,a
jmp start
display:
clr portd
com portd
inca 0xa0 ;R+1--A
CALL table
mov porta,a ;返回个位的显示码
mov a,#0B10111111
mov portd,a
call del
clr portd
com portd
inca 0xa1
CALL table
mov porta,a ;返回十位的显示码
mov a,#0B01111111
mov portd,a
call del
clr portd
com portd
ret
TABLE: TBL
RETL 0B11000000 ;0
RETL 0B11111001 ;1
RETL 0B10100100 ;2
RETL 0B10110000 ;3
RETL 0B10011001 ;4
RETL 0B10010010 ;5
RETL 0B10000010 ;6
RETL 0B11111000 ;7
RETL 0B10000000 ;8
RETL 0B10010000 ;9
RETL 0B10001000 ;A
RETL 0B10000011 ;b
RETL 0B11000110 ;C
RETL 0B10100001 ;d
RETL 0B10000110 ;E
RETL 0B10001110 ;F
;DEL子程序
DEL:
MOV A,#3 ;依次给3个计数器置初值
MOV 0X40,A
;============================================================
DEL_LOOP1:
MOV A,#1
MOV 0X41,A
;============================================================
DEL_LOOP2:
MOV A,#0
MOV 0X42,A
;============================================================
DEL_LOOP3:
DJZ 0X42,$+3 ;寄存器0X42减1,若为0,PC+3运行
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -