找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4550|回复: 4
收起左侧

求大神指导,写的一个51单片机用定时器0方式一60倒计时程序跑不了

[复制链接]
ID:183466 发表于 2017-7-14 09:34 | 显示全部楼层 |阅读模式
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,num,second;
unsigned char code Tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

void delay1ms(uint i)
        {
        uchar j;
        while(i--)
        for(j=0;j<115;j++)
                {
                ;
                }
        }

void display(uchar k)
        {
        P2=0xfe;
        P0=Tab[k/10];
        delay1ms(5);

        P2=0xfd;
        P0=Tab[k%10];
        delay1ms(5);

        P2=0xff;
        P0=0xff;
        delay1ms(5);



        }
       
       

               

        void main(void)
                {
                  
                   TMOD=0x01;
            TH0=(65536-50000)/256;
                TL0=(65536-50000)%256;
                EA=1;
                ET0=0;
                TR0=0;
                num=0;
                second=60;
                while(1)
                        {
                        display(second);
                }
                       
               
               
                         
                }

                void timer0(void) interrupt 1
                {
                   TR0=0;
                   num++;
                                  if(num==20)
                        {
               
                                num=0;
                               
                             second--;
                       
                       
                                if(second==0)
                          
                          second=60;
               

                          }

                        TH0=(65536-50000)/256;
                        TL0=(65536-50000)%256;
                        TR0=1;
                       
                       

                       
                }

回复

使用道具 举报

ID:219592 发表于 2017-7-14 10:16 | 显示全部楼层
看着没什么错误

回复

使用道具 举报

ID:213173 发表于 2017-7-14 10:51 | 显示全部楼层
初始化定时器中 ET0=1;  TR0=1;,中断程序中取消对TR0的操作

评分

参与人数 1黑币 +1 收起 理由
zlc哈哈哈 + 1 很给力!

查看全部评分

回复

使用道具 举报

ID:218170 发表于 2017-7-14 16:53 | 显示全部楼层
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,second,tab1[2],TOH = 0,TOL = 0;
bit flag = 0;
unsigned char code Tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

void display( )
        {
                  static uchar i = 0;
    P0 = 0xff;
    P2 = ~(0x01 << i);
    P0 = Tab[tab1[i]];
    if ( i< 1)
        i++;
    else
        i = 0;
        }

//定时函数
void Timer( uchar t)
{
    unsigned long temp;
    temp = 11059200 / 12;          
    temp = (temp * t) / 1000;
    temp = 65536 - temp;
    TOH = (uchar)(temp >> 8);
    TOL = (uchar)temp;
    TH0 = TOH;
    TL0 = TOL;
    TMOD &= 0XF0;
    TMOD |= 0X01;
    TR0 = 1;
    ET0 = 1;
    EA = 1;
   
}      
void main(void)
{                 
                    Timer(1); //定时一毫秒
                second=60;
                                tab1[0] = second / 10;
                                tab1[1] = second % 10;
                while(1)
                {
                   if(flag)                //一秒钟就减一次
                                   {
                                         flag = 0;
                                         second--;
                                         tab1[0] = second / 10;
                                        tab1[1] = second % 10;
                                         if (second == 0)
                                         second = 60;
                                   }
                }                                 
                }
void timer0(void) interrupt 1
                {
                                  static unsigned int num = 0;
                                  TH0 = TOH;
                                  TL0 = TOL;
                                   display();
                   num++;
                  if(num>= 1000)   //一秒钟就减一次
                   {
                                       num = 0;
                       flag = 1;        
                   }

                        
                                               
                }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表