标题: 单片机 数码管计时的显示问题 [打印本页]

作者: s3395719    时间: 2015-5-23 16:28
标题: 单片机 数码管计时的显示问题
我刚学定时器,想让数码管 自动计时,但是。。数码管的个位能正常显示,但十位不显示,求助!!!!!!!!

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
code char tab[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint i ,j ,count;
sbit tr1 = P0^5;                //个位
sbit tr2 = P0^4;                //十位

void delay()          //延时
{
        int a,b;
        for(a=0;a<20;a++)
                for(b=0;b<30;b++);;
}

void init()                //定时初始化
{
        TMOD=0x01;
        TH0= (65536 - 50000) / 255;
        TL0= (65536 - 50000) % 255;
        EA=1;
        ET0=1;
        TR0=1;
}

void func()               //执行
{
                tr1 = 0;
                tr2 = 1;
                P1 = tab[i];
                delay();
                 tr1 = 1;
                tr2 = 0;
                P1 = tab[j];
                 delay();
}
timer0()interrupt 1 using 1                   //定时器中断
{
        TH0= (65536 - 50000) / 255;
            TL0= (65536 - 50000) % 255;
        if(count == 20)
        {
           count = 0;
                i++;
           if(i==10)       
                {
                        i = 0; j++;
                        if(j == 6) j = 0;
                       
                }

}
        else
                count++;

}
main()
{
    P1 = 0x00;
        init();  //计时初始化
        while(1)
        {
                func();
        }
         
}

作者: 电子爱好者life    时间: 2015-5-24 08:45
你的延时函数延时时间是多少?TH0和TL0的计算用的是256,不是255 (2^8=256)
作者: 电子爱好者life    时间: 2015-5-24 08:50
  1. void timer0()interrupt 1
  2. {
  3.    TH0= (65536-50000)/256;
  4.    TL0 = (65536-50000)%256;
  5.    count++;
  6.    if(count ==20)
  7.    {
  8.         count = 0;
  9.         num ++;
  10.         shi = num/10;
  11.         ge = num%10;
  12.         if(num==60)
  13.              num = 0;
  14.    }
  15. }

  16. 你直接把个位和十位数送去显示就可以了
复制代码

作者: 电子爱好者life    时间: 2015-5-24 08:53
你的延时函数时间不要太长,也不能太短,用proteus仿真的延时比硬件仿真时间长点就行,一般硬件仿真就几个ms
作者: 电子爱好者life    时间: 2015-5-24 08:56
TH0 和TL0的计算用256(2^8 = 256),而不是8位二进制数的最大值255
作者: QWL410792    时间: 2016-8-10 16:04
你这程序问题太大
作者: QWL410792    时间: 2016-8-10 16:06
你这程序问题太大 你定时中断到底想要表达什么 呢 count都没赋值 怎么可能加到20
作者: QWL410792    时间: 2016-8-10 16:08
好好看看数码管显示函数




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1