哥们给个两位显示的给你瞧瞧吧!!!
/*数码管的显示,动态显示,数码管显示两位精确秒计时,从这个例子可以学习定时器的使用,也可从这个例子扩展一个时钟程序*/
/*效果:精确的秒计时,数码管显示两位计数,可扩展成时钟*/
;----------------定义数据RAM空间------------------------------- LDB EQU 36H ;定义一个变量存放显示值 LCC EQU 37H ;定义一个变量存放计数值 ;-----------数据存放---------------------- ORG 0100H TABLE: DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh ;表:共阳数码管 0-9 ORG 0000H LJMP MAIN ORG 000BH ;定时器中断入口 LJMP TIMER ORG 0200H MAIN: MOV TMOD,#01H ;设置定时器1为1模式,即16位计算模式 MOV TH0,#3CH ;给计数寄存器复值,50毫秒时间 MOV TL0,#0B0H MOV IE,#82H ;开总中断和T0中断 SETB TR0 ;启动定时器0 MOV LDB,#0 ;显示缓冲清0 MOV LCC,#0 ;计数缓冲清0 M1: MOV A,LCC CJNE A,#20,M2 ;计数20次50毫秒即为1秒 MOV LCC,#0 INC LDB ;显示缓存加1 MOV A,LDB ; CJNE A,#100,M2 ;如果加到100,则清0 MOV LDB,#0 M2: MOV A,LDB ;用A来传递数据显示 LCALL DISPLAY LJMP M1 TIMER: INC LCC ;定时中断产生,计数加1 MOV TH0,#3CH ;重新装入定时器值50毫秒 MOV TL0,#0B0H RETI DISPLAY:MOV DPTR,#TABLE ;数码管显示子程序 MOV B,#10 DIV AB CLR P1.0 ;选择十位数码管,即第二位数码管,当然也可以选择其它位 SETB P1.1 SETB P1.2 MOVC A,@A+DPTR ;查表输出定义好的数码管段值与P0口,显示相应的0-9 MOV P2,A LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度 MOV P2,#0 ;清除数码管显示 SETB P1.0 ;选择个位数码管,即第一位数码管,当然也可以选择其它位 SETB P1.1 SETB P1.2 MOV A,B ;个位显示 MOVC A,@A+DPTR ;查表输出定义好的数码管段值与P0口,显示相应的0-9 MOV P2,A LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度 MOV P2,#0 ;清除数码管显示 RET DELAY: MOV R7,#10 ;延时子程序 DJNZ R7,$ RET END
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |