Protues中用AT89C51驱动6个7段数码管
7SEG-MPX6-CA-BLUE的使用
如图所示ABCDEFG为7段LED的输入端口,DP为小数点,123456为片先信号,当1为高电平时则选中第一个数码管,2为高电平时则选中第二个数码管,以此类推。
ATC89C51组成最小系统驱动数码管电路
本电路中用AT89C51构成一最小系统,然后用P1.0到P1.5的6个引脚输出片选信号,P2.0到P2.6的7个引脚输出数据,硬件电路就是这么简单了。
LEDBUF EQU 30H ; 为显示数据开辟内存单元
ORG 0000H LJMP MAIN ORG 000BH LJMP TIME0 ORG 0030H
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H, 82H, 0F8H ,80H, 90H ;7段数码管译码表
MAIN: MOV SP,#70H MOV LEDBUF,#5
MOV LEDBUF+1,#2 MOV LEDBUF+2,#0 MOV LEDBUF+3,#1 MOV LEDBUF+4,#3 MOV LEDBUF+5,#1
;初始化堆栈
MOV LEDBUF+6,#4
;写入要显示的数字 ;将ledbuf的首地址给R0
MOV R0,#LEDBUF
MOV DPTR,#TABLE MOV R2,#06H
MOV R1,#01H
MOV TMOD, #01H MOV TH0, #0DFH MOV TL0,#0B0H SETB TR0 SETB EA SETB ET0
SJMP $
TIME0: DJNZ R2, LOOP1 MOV R2,#06H
MOV R1,#01H
MOV R0,#LEDBUF
LOOP1:
MOV TH0,#0DFH MOV TL0,#0B0H
MOV A,R1 MOV P1,A RL A
MOV R1,A
MOV A,@R0
MOVC A,@A+DPTR MOV P2,A INC R0
RETI
END
;将TABLE的首是址给DPTR ;R2作为循环次数寄存器 ;R1中放片选信号
;定时器0工作在方式1
;初始代定时器0 ;开定时器0 ;开总中断 ;开定时器0中断
;动态停机
;循环6次后回到初始值继续循环,小于6次跳到LOOP1
;初始化数据
;初始化定时器0
;将R1中片选信号输入P1并且使其数据左移一位
;通过查表将ledbuf中数据送往P2
改动ledbuf中的数字则可显示想要显示的数据,改动如下
LEDBUF EQU 30H ; 为显示数据开辟内存单元
ORG 0000H LJMP MAIN ORG 000BH LJMP TIME0
ORG 0030H
TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H, 82H, 0F8H ,80H, 90H ;7段数码管译码表
MAIN: MOV SP,#70H
;初始化堆栈
MOV LEDBUF,#1
MOV LEDBUF+1,#2 MOV LEDBUF+2,#3 MOV LEDBUF+3,#4 MOV LEDBUF+4,#5
MOV LEDBUF+5,#6 MOV LEDBUF+6,#7 MOV R0,#LEDBUF
MOV DPTR,#TABLE MOV R2,#06H
MOV R1,#01H
MOV TMOD, #01H MOV TH0, #0DFH MOV TL0,#0B0H SETB TR0 SETB EA SETB ET0
SJMP $
TIME0: DJNZ R2, LOOP1
环,小于6次跳到LOOP1 MOV R2,#06H
MOV R1,#01H
MOV R0,#LEDBUF
LOOP1:
MOV TH0,#0DFH MOV TL0,#0B0H
MOV A,R1
MOV P1,A
RL A MOV R1,A
据左移一位 MOV A,@R0
MOVC A,@A+DPTR MOV P2,A INC R0
RETI
END
结果下如:
;写入要显示的数字
;将ledbuf的首地址给R0
;将TABLE的首是址给DPTR
;R2作为循环次数寄存器 ;R1中放片选信号
;定时器0工作在方式1
;初始代定时器0 ;开定时器0 ;开总中断
;开定时器0中断 ;动态停机
;循环6次后回到初始值继续循
;初始化数据
;初始化定时器0
;将R1中片选信号输入P1并且使其数
;通过查表将ledbuf中数据送往P2
百度搜索“70edu”或“70教育网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,70教育网,提供经典综合文库Protues中用AT89C51驱动6个7段数码管在线全文阅读。
相关推荐: