|
本帖最后由 wudawei 于 2014-12-31 14:46 编辑
;====================================================================*
;51单片机入门程序18
; 工程名称: 串入并出移位寄学习--时钟显示程序 *
; 功能描述: 时钟显示程序 *
; (并行输出串行移位寄存器74LS164扩展输出口学习) *
; 硬件连接:针对配合AT89S51精简开发板(第三版本)使用 *
; 编写日期:2009.7.4
; 编写者: 蓝柳柳 *
;
;====================================================================*
SDA BIT P0.2 ; 定义数据线引脚定义
SCL BIT P0.3 ; 定义时钟线引脚定义
LED0 EQU 30H ;定义显示码存储空间
LED1 EQU 31H
LED2 EQU 32H
LED3 EQU 33H
LED4 EQU 34H
LED5 EQU 35H
LED6 EQU 36H
LED7 EQU 37H
;---------------------------------------
ORG 0000H ;主程序入口
AJMP MAIN ;跳转到主程序
ORG 0100H ;主程序在ROM中存放位置
;===============主程序=====================
MAIN: MOV LED0,#00H ;对定义的显示码存储空间付初值
MOV LED1,#00H
MOV LED2,#0FFH
MOV LED3,#00H
MOV LED4,#00H
MOV LED5,#0FFH
MOV LED6,#00H
MOV LED7,#00H
ACALL DISPLAY ;调用显示程序
ACALL Delay_1s ;延时约一秒钟
NEXT:
INC LED0 ;LED0中的数值加一
MOV A,LED0
CJNE A,#10,NEXT0 ;判断LED0中的数值是否为10,如果不是则跳到NEXT0
MOV LED0,#00H ;如果是则向下执行,将LED0中的内容清零
INC LED1 ;LED1中的数值加一
MOV A,LED1
CJNE A,#6,NEXT0 ;判断LED1中的数值是否为6,如果不是则跳到NEXT0
MOV LED1,#00H ;如果是则向下执行,将LED1中的内容清零
INC LED3
MOV A,LED3
CJNE A,#10,NEXT0
MOV LED3,#00H
INC LED4
MOV A,LED4
CJNE A,#6,NEXT0
MOV LED4,#00H
INC LED6
MOV A,LED6
CJNE A,#10,NEXT0
MOV LED6,#00H
INC LED7
MOV A,LED7
CJNE A,#6,NEXT0
MOV LED7,#00H
AJMP MAIN
RET
NEXT0: ACALL DISPLAY
ACALL Delay_1s
AJMP NEXT
RET
;===================================================
; 子程序名: DISPLAY
; 功能描述: 将运算的数值都移位到数码管中显示
;===================================================
DISPLAY:
MOV DPTR,#TABLE
MOV A,LED0
MOVC A,@A+DPTR ;根据LED0中的数值取表中相应的数去显示
ACALL SHIFT
MOV A,LED1
MOVC A,@A+DPTR ;根据LED1中的数值取表中相应的数去显示
ACALL SHIFT
MOV A,LED2
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED3
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED4
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED5
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED6
MOVC A,@A+DPTR
ACALL SHIFT
MOV A,LED7
MOVC A,@A+DPTR
ACALL SHIFT
RET
;---------显示代码表---------
TABLE: DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D3H,10H,90H ;0,1,2,3,4,5,6,7,8,9,
DB 50H,1CH,39H,16H,38H,78H, 0FFH,0FEH,0EFH ;10,11,12,13,14,15,灭,-
;===================================================
; 子程序名: SHIFT
; 功能描述: 移位程序,将8位数据依次移进74LS164芯片中
;===================================================
SHIFT: PUSH A ; 进栈暂存A值
MOV R0,#8 ; 循环8次
CLR C ;清进位标志
CLR SCL ;时钟线,先钳位为0
LP2: RLC A
MOV SDA,C ;向数据线送数据
NOP
NOP
SETB SCL ;拉高时钟线
NOP
NOP
CLR SCL ;拉低时钟线
NOP
NOP
DJNZ R0,LP2
POP A ; 出栈恢复A值
RET
;===================================================
; 子程序名: Delay_1s
; 功能描述: 延时约一秒钟
;===================================================
Delay_1s:
MOV R1,#10
D: MOV R2,#200
T: MOV R3,#248
DJNZ R3,$
DJNZ R2,T
DJNZ R1,D
RET ;子程序返回指令,子程序的设计一般都是因为主程序要调用它,
;调用完是要返回到主程序继续运行下一个语句的
END
;补充说明:
;1.用外部中断0来编写程序时,硬件连接一定要考虑到单片机的第12引脚
;2.外部中断0和定时器/计数器0的中断入口地址分别是:0003H和000BH
;在应用到这两个内容时要在程序开始时标出
希望各位的指导与赐教!
|
|