用天微公司的TM1637......
下面是我常用的TM1637来驱动6位共阳数码管子程序
;**********TM1637驱动数码管********
;**********************************
IC_TM1637_driver_man: ;start信号----dio先从高电平拉低,接着clk从高电平拉低
clr dioac
set dio
nop
set clk
nop
nop
nop
nop
nop
clr dio
nop
nop
nop
nop
nop
clr clk
;--------------------------------
nop
nop
mov a,01000000b ;写数据命令设置指令(command1),自动+1模式
mov temp1,a
call out_out_data ;将temp1值送出,下同
set dioac ;将dio脚设为输入状态,等待ack信号(低电平),下同
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low1:
sz dio ;读出ack信号
jmp $+2
jmp write_ret1
siz pcs_com
jmp waiting_ack_low1
write_ret1:
nop
nop
clr clk
nop
nop
clr dio
clr dioac ;将dio脚设为输出状态
nop
nop ;clk和dio各发出1个脉冲
set clk
nop
set dio
nop
clr dio
nop
clr clk
;----------------------------------
nop
nop
mov a,11000000b
mov temp1,a
call out_out_data ;写地址命令设置指令(command2),起始地址00H
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low2:
sz dio ;读出ack信号
jmp $+2
jmp write_ret2
siz pcs_com
jmp waiting_ack_low2
write_ret2:
nop
nop
clr clk
;--------------------------------
nop
nop
clr clk
clr dioac ;dio脚改为输出状态(下同)
mov a,disp_ram1
mov temp1,a
call out_out_data ;写入数码管第1位的显示内容disram1
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low3:
sz dio ;读出ack信号
jmp $+2
jmp write_ret3
siz pcs_com
jmp waiting_ack_low3
write_ret3:
nop
nop
clr clk
;--------------------------------
nop
nop
clr clk
clr dioac
mov a,disp_ram2
mov temp1,a
call out_out_data ;写入数码管第2位的显示内容disram2
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low4:
sz dio ;读出ack信号
jmp $+2
jmp write_ret4
siz pcs_com
jmp waiting_ack_low4
write_ret4:
nop
nop
clr clk
;---------------------------------
nop
nop
clr clk
clr dioac
mov a,disp_ram3
mov temp1,a
call out_out_data ;写入数码管第3位的显示内容disram3
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low5:
sz dio ;读出ack信号
jmp $+2
jmp write_ret5
siz pcs_com
jmp waiting_ack_low5
write_ret5:
nop
nop
clr clk
;-------------------------------
nop
nop
clr clk
clr dioac
mov a,disp_ram4
mov temp1,a
call out_out_data ;写入数码管第4位的显示内容disram4
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low6:
sz dio ;读出ack信号
jmp $+2
jmp write_ret6
siz pcs_com
jmp waiting_ack_low6
write_ret6:
nop
nop
clr clk
;----------------------------------
nop
nop
clr clk
clr dioac
mov a,disp_ram5
mov temp1,a
call out_out_data ;写入数码管第5位的显示内容disram5
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low7:
sz dio ;读出ack信号
jmp $+2
jmp write_ret7
siz pcs_com
jmp waiting_ack_low7
write_ret7:
nop
nop
clr clk
;-----------------------------------
nop
nop
clr clk
clr dioac
mov a,disp_ram6
mov temp1,a
call out_out_data ;写入数码管第6位的显示内容disram6
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low8:
sz dio ;读出ack信号
jmp $+2
jmp write_ret8
siz pcs_com
jmp waiting_ack_low8
write_ret8:
nop
nop
clr clk
nop
nop
clr clk
clr dio
clr dioac
nop
nop ;clk和dio各发出1个脉冲
set clk
nop
nop
set dio
nop
clr dio
nop
clr clk
;----------------------------------
nop
nop
clr dioac
mov a,10001010b
mov temp1,a
;写显示控制设置指令(command3),显示开
call out_out_data
set dioac
nop
nop
set clk
nop
nop
clr pcs_com
waiting_ack_low9:
sz dio ;读出ack信号
jmp $+2
jmp write_ret9
siz pcs_com
jmp waiting_ack_low9
write_ret9:
nop
nop
clr clk
;-----------------------------------------
nop ;stop信号----clk先从低电平拉高,接者dio也从低电平拉高
nop
clr clk
clr dioac
clr dio
nop
nop
set clk
nop
nop
set dio
nop
nop
clr dio
clr clk
ret
;----------------------------------
out_out_data: ;将temp1中的码串行输出到TM1637子程序
mov a,8d
mov temp0,a
out_out_data000a:
clr clk
clr dio
nop
nop
sz temp1.0
set dio
nop
nop
set clk ;脉冲上升沿写入数据
rr temp1
sdz temp0
jmp out_out_data000a
clr clk
set dio
ret
|