|
- ;===============================================================
- ;程序编写人:张培、兰建文
- ;编写地点:51hei单片机培训机构
- ;时间:2009年6月19日下午 星期四
- ;功能:本程序实现工业控制数字钟功能。
- ;P3口实现对数码管的片选功能
- ;==========================开始初始化===========================
- PIANXUAN EQU P3
- SHUCHU EQU P2
- MIAO EQU 30H
- FEN EQU 31H
- SHI EQU 32H
- SHUZI EQU 33H
- C_0 BIT 20H.0
- ORG 0000H
- JMP START
- ORG 000BH
- JMP T0_1
- ORG 0030H
- START:
- CALL INIT
- MOV MIAO,#00
- MOV FEN,#59
- MOV SHI,#23
- MOV DPTR,#TAB
- MOV R2,#5
- MAIN:
- JNB C_0,$
- CLR C_0
- LL: CALL DISPLAY
- CALL SHIJIAN
- JMP MAIN
- ;========================时间子程序=============================
- ;输入:"30H、31H、32H"
- ;输出:无
- ;实现的功能:时分秒的计算。
- ;===============================================================
- SHIJIAN:
- DJNZ R2,TIAOCHU
- MOV R2,#50
- CPL P3.6
- INC MIAO
- MOV R3,MIAO
- CJNE R3,#60,TIAOCHU
- MOV MIAO,#00
- INC FEN
- MOV R3,FEN
- CJNE R3,#60,TIAOCHU
- MOV FEN,#00
- INC SHI
- MOV R3,SHI
- CJNE R3,#24,TIAOCHU
- MOV SHI,#00
- TIAOCHU:RET
- ;========================显示子程序=============================
- ;输入:"A"
- ;输出:"P0口"
- ;实现的功能:把A的数输出到P0口显示,十位和个位分开显示
- ;===============================================================
- DISPLAY:MOV SHUZI,MIAO
- CALL JISUAN
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示十位
- MOV PIANXUAN,#10H ;片选
- CALL DELAY
- MOV PIANXUAN,#00
-
- MOV A,B
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示个位
- MOV PIANXUAN,#20H ;片选
- CALL DELAY ;延时
- MOV PIANXUAN,#00
-
- MOV SHUZI,FEN
- CALL JISUAN
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示十位
- MOV PIANXUAN,#04H ;片选
- CALL DELAY
- MOV PIANXUAN,#00
-
- MOV A,B
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示个位
- MOV PIANXUAN,#08H ;片选
- CALL DELAY ;延时
- MOV PIANXUAN,#00
-
- MOV SHUZI,SHI
- CALL JISUAN
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示十位
- MOV PIANXUAN,#01H ;片选
- CALL DELAY
- MOV PIANXUAN,#00
-
- MOV A,B
- MOVC A,@A+DPTR
- MOV SHUCHU,A ;显示个位
- MOV PIANXUAN,#02H ;片选
- CALL DELAY ;延时
- MOV PIANXUAN,#00
- RET
- ;========================计算子程序=============================
- ;输入:30H
- ;输出:"A和B"
- ;实现的功能:把30H的数据的十位和个位分离出来
- ;===============================================================
- JISUAN:MOV A,SHUZI ;数据放在A中
- MOV B,#10 ;除数放在B中
- DIV AB ;商放在A中,余数放在B中
- RET
- ;====================定时中断0服务子程序========================
- ;输入:无
- ;输出:无
- ;实现的功能:实现定时20MS,影响标中断志位BIT
- ;===============================================================
- T0_1:MOV TL0,50H ;设置定时初值
- MOV TH0,51H
- SETB C_0 ;定时标志位清0
- RETI
- ;========================中断设置子程序=========================
- ;输入:无
- ;输出:无
- ;实现的功能:初始化设置定时器,设置初值
- ;===============================================================
- INIT:MOV TMOD,#01H ;定时器0工作方式1
- MOV DPTR,#65536-20000
- MOV 50H,DPL
- MOV 51H,DPH
- MOV TL0,50H ;设置定时初值
- MOV TH0,51H
- MOV IE,#82H ;开定时器中断0
- SETB TR0 ;开定时器0
- RET
- ;========================延时程序===============================
- ;输入;无
- ;输出: 无
- ;实现的功能:延时一段时间
- ;===============================================================
- DELAY:
- MOV R6,#80
- LL7:MOV R7,#60
- DJNZ R7,$
- DJNZ R6,LL7
- RET
- ;=====================共阳查表数据==============================
- TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
- ;=======================程序结束================================
- END
复制代码
|
|