驱动类型 | 优点 | 缺点 |
---|---|---|
动态显示驱动 | 可以控制多个数码管 占用资源少 节省电能 | 程序相对复杂 |
静态显示驱动 | 编写程序简单 显示亮度高 | 控制的数码管数量有限 占用资源过大 |
ORG 0000H
LJMP MAIN
ORG 30H
;..................................................
; 数码管DS0显示‘0’
;..................................................
MAIN: MOV P0,#0C0H ;段选数据0
CLR P1.0 ;选中U2为段选芯片,将U2的Ē写为低电平
CLR P1.2 ;时序引脚CKL为低电平,为接受数据做准备
SETB P1.2 ;时序为上升沿,即将数据传送给U2
SETB P1.0 ;关闭U2,使得U2不在接受数据
////////////////////
MOV P0,#0FEH ;位选数据由P0口给出,选择DS0数码显示
CLR P1.1 ;选中U3位选芯片,将U3的Ē写为低电平
CLR P1.2 ;时序引脚CKL为低电平,为接收数据做准备
SETB P1.2 ;时序为上升沿,即将数据传送给U3
SETB P1.1 ;关闭U3,使得U3不在接收数据
///////////////////
LCALL DELAY ;延时一段时间
MOV P0,#0FFH ;关闭数码管,为下一个数码管显示做准备
CLR P1.0 ;选中U3位选芯片,将U3的Ē写为低电平
CLR P1.2 ;时序引脚CKL为低电平,为接收数据做准备
SETB P1.2 ;时序为上升沿,即将数据传送给U3
SETB P1.1 ;关闭U3,使得U3不在接收数据
///////////////////
;..................................................
; 数码管DS1显示‘1’
;..................................................
MOV P0,#0F9H
CLR P1.0
CLR P1.2
SETB P1.2
SETB P1.0
////////////////////
MOV P0,#0FDH
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
///////////////////
LCALL DELAY
MOV P0,#0FFH
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
///////////////////
;..................................................
; 数码管DS1显示‘2’
;..................................................
MOV P0,#0A4H
CLR P1.0
CLR P1.2
SETB P1.2
SETB P1.0
////////////////////
MOV P0,#0FBH
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
///////////////////
LCALL DELAY
MOV P0,#0FFH
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
///////////////////
;..................................................
; 数码管DS1显示‘3’
;..................................................
MOV P0,#0B0H
CLR P1.0
CLR P1.2
SETB P1.2
SETB P1.0
////////////////////
MOV P0,#0F7H
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
///////////////////
LCALL DELAY
MOV P0,#0FFH
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
///////////////////
;..................................................
; 延时程序
;..................................................
DELAY: MOV R7,#200 ;延时子程序
DJNZ R7,$
RET ;返回主程序
END
;*****段选程序*********
CLR P1.0
CLR P1.2
MOV P0,#0B0H
SETB P1.2
SETB P1.0
;*****位选程序*********
CLR P1.1
CLR P1.2
MOV P0,#0F7H
SETB P1.2
SETB P1.1
;**************数码管动态显示‘0,1,2,3’*********************
ORG 0000H
LJMP MAIN
ORG 30H
;............................................................
; 初始化定义
;............................................................
MAIN: MOV R0,#0;段选数据指针
MOV R1,#0FEH ;段选数据初始化
MOV DPTR,#TAB ;“0~9”数据表
;............................................................
; 主程序
;............................................................
;****改变段码和位码****
LOOP: MOV A,R0 ;数据指针RO给累加器A
MOVC A,@ A+DPTR ;将数据表中指针所对应的数据传送给A
MOV P0,A ;数据传给数码管各段
CLR P1.0
CLR P1.2
SETB P1.2
SETB P1.0
////////////////////////
MOV P0,R1 ;将位选数据传送给P0口,点亮所需数码管
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
////////////////////////
LCALL DELAY ;延时一段时间
MOV P0,#0FFH ;关闭数码管,为下一个数码管显示做消
CLR P1.1
CLR P1.2
SETB P1.2
SETB P1.1
;****改变段码和位码****
INC R0 ;数据指针加1,指向下一个数据地址
MOV A,R1 ;位选数码管左移,准备得下一个数码管点亮
RL A
MOV R1,A
CJNE R1,#0EFH,LOOP ;判断DS3数码管是否点亮结束
LJMP MAIN ;循环本程序
;............................................................
; 延时程序
;............................................................
DELAY: MOV R7,#200 ;延时子程序
DJNZ R7,$
RET ;返回主程序指令
;............................................................
; 数码管数据表
;............................................................
TAB: DB 000H,0F9H,0A4H,0B0H,099H ;0-9数据表
DB 092H,082H,0F8H,080H,090H
END
时间:2018年10月19日13:28:43
-END-