原创 11.00-59秒计时器(利用软件延时)

2008-10-18 19:40 4284 5 5 分类: MCU/ 嵌入式

1.  实验任务<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


  如下图所示,在AT89S51单片机的P0P2端口分别接有两个共阴数码管,P0口驱动显示秒时间的十位,而P2口驱动显示秒时间的个位。


2.  实现程序


 


1.  汇编源程序


Second                 EQU 30H


                            ORG 0


START:               MOV Second,#00H


NEXT:                MOV A,Second


                           MOV B,#10


                            DIV AB


                            MOV DPTR,#TABLE


                           MOVC A,@A+DPTR


                            MOV P0,A


                            MOV A,B


                           MOVC A,@A+DPTR


                            MOV P2,A


                            LCALL DELY1S


                           INC Second


                            MOV A,Second


                            CJNE A,#60,NEXT


                           LJMP START


DELY1S:             MOV R5,#100


D2:                      MOV R6,#20


D1:                     MOV R7,#248


                            DJNZ R7,$


                            DJNZ R6,D1


                           DJNZ R5,D2


                            RET


TABLE:              DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH


                            END


2.  C语言源程序


#include <AT89X51.H>


unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,


                            0x6d,0x7d,0x07,0x7f,0x6f};


unsigned char Second;


 


void delay1s(void)


{


  unsigned char i,j,k;


  for(k=100;k>0;k--)


  for(i=20;i>0;i--)


  for(j=248;j>0;j--);


}


 


 


void main(void)


{


  Second=0;


  P0=table[Second/10];


  P2=table[Second%10];


  while(1)


    {


      delay1s();


      Second++;


      if(Second==60)


        {


          Second=0;


        }


      P0=table[Second/10];


      P2=table[Second%10];


    }


}


点击看大图


 


4、总结


 


     软件延时1秒钟并试用数码管显示


 


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /1 下一条