专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机10秒倒计时c语言汇编语言程序

作者:佚名   来源:本站原创   点击数:  更新时间:2013年01月01日   【字体:

(2)数码管动态显示(循环显示0~9,时间间隔为1秒,1秒的时间间隔用定时器T0实现)

  ①汇编语言:

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的初始值

;要设置为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;//数码管位选端定义

uchar c,i;

//数码管译码表

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秒计时设置

       c=0;//中断次数计数

       p27=1;//数码管位选端关闭

       TMOD=1;//设置定时器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++;//倒计时总数每秒减1

          }

          if(i<10)

          {

              p27=0;//数码管位选选通

              P0=NumDecode[i];//显示数据

           }

          else  //循环计时设置

          {

                i=0;

          }

       }

}

void timer0() interrupt 1//定时器0中断入口

{

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

   TL0=(65536-46080)%256;

   c++;//中断次数

}

 
关闭窗口

相关文章