專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

單片機10秒倒計時c語言匯編語言程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年01月01日   【字體:

(2)數(shù)碼管動態(tài)顯示(循環(huán)顯示0~9,時間間隔為1秒,1秒的時間間隔用定時器T0實現(xiàn))

  ①匯編語言:

ORG 0000H

     AJMP MAIN

     ORG 000BH

     AJMP INTT0

     ORG 0030H

MAIN:CLR P2.7

     MOV DPTR,#TAB

     CLR A

     MOV R2,#0H

     MOV R3,#0H

     MOV TMOD,#01H

     MOV TH0,#4CH

     MOV TL0,#00H

     SETB EA

     SETB ET0

     SETB TR0

HERE: CJNE R2,#14H,HERE

      MOV R2,#0H

      PUSH ACC

      MOVC A,@A+DPTR

      MOV P0,A

      POP ACC

      INC A

      INC R3    

      CJNE R3,#0AH,HERE

 MOV R3,#00H        ;此處用DJNZ 更方便,只不過R3的初始值

;要設(shè)置為0AH,同時取消INC R3指令(此行上面第二行)   

      CLR A

      AJMP HERE

      ORG 80H

INTT0:MOV TH0,#4CH

      MOV TL0,#00H

      INC R2

      RETI

TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

     END

②C語言

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit p27=P2^7;//數(shù)碼管位選端定義

uchar c,i;

//數(shù)碼管譯碼表

unsigned char code NumDecode[] =

{

                0XC0,//;0

                0XF9,//;1

                0XA4,//;2

                0XB0,//;3

                0X99,//;4

                0X92,//;5

                0X82,//;6

                0XF8,//;7

                0X80,//;8

                0X90,//;9

};

void main()

{

       i=0;//10秒計時設(shè)置

       c=0;//中斷次數(shù)計數(shù)

       p27=1;//數(shù)碼管位選端關(guān)閉

       TMOD=1;//設(shè)置定時器0為工作方式1

       TH0=(65536-46080)/256;//定時50ms高8位求模

       TL0=(65536-46080)%256;//定時50ms低8位求余

       EA=1;//開總中斷

       ET0=1;//定時器0中斷

       TR0=1;//啟動定時器0

       while(1)

       {

          if(c==20)//50ms中斷20次

          {

              c=0;

              i++;//倒計時總數(shù)每秒減1

          }

          if(i<10)

          {

              p27=0;//數(shù)碼管位選選通

              P0=NumDecode[i];//顯示數(shù)據(jù)

           }

          else  //循環(huán)計時設(shè)置

          {

                i=0;

          }

       }

}

void timer0() interrupt 1//定時器0中斷入口

{

   TH0=(65536-46080)/256;//定時器重新賦初值

   TL0=(65536-46080)%256;

   c++;//中斷次數(shù)

}

 
關(guān)閉窗口

相關(guān)文章