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

單片機(jī)10秒倒計(jì)時(shí)c語(yǔ)言匯編語(yǔ)言程序

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

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

  ①匯編語(yǔ)言:

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 更方便,只不過(guò)R3的初始值

;要設(shè)置為0AH,同時(shí)取消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語(yǔ)言

#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秒計(jì)時(shí)設(shè)置

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

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

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

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

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

       EA=1;//開(kāi)總中斷

       ET0=1;//定時(shí)器0中斷

       TR0=1;//啟動(dòng)定時(shí)器0

       while(1)

       {

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

          {

              c=0;

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

          }

          if(i<10)

          {

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

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

           }

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

          {

                i=0;

          }

       }

}

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

{

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

   TL0=(65536-46080)%256;

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

}

 
關(guān)閉窗口

相關(guān)文章