微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 大神进来搭救下小弟吧!

大神进来搭救下小弟吧!

时间:10-02 整理:3721RD 点击:

小弟最近学单片机,刚好一天家里的风扇定时器坏了,所以想DIY个可以显示时分的定时器,画了原理图,按照思路编了个程序,可是用的时候发现数码管没有任何显示,小弟觉得按照电路图焊的,电路应该没有焊错,不知道是不是程序错了,再次恳求大神们帮小弟看看这个程序有没有问题,跪谢了!附上原理图,小弟用的是四位共阳极数码管,两位显示时,两位显示分,




还有程序:#include <reg52.h>#define uchar unsigned char
#define uint unsigned  int
sbit key_jia=P3^0;
sbit key_jian=P3^1;
sbit key=P3^2;
sbit relay=P1^0;

uchar hour=0,miu=0;
uchar flag=3;//
uint  count=0;
//unsigned char code table[]={0XC0,0XF9,0XA4,0XB0,0X99,        //共阳
//                            0X92,0X82,0XF8,0X80,0X90};
//unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,  //共阴
                            //0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code table1[]={0X40,0X79,0X24,0X30,0X19, //共阳带点
                           0X12,0X02,0X78,0X00,0X10};
//unsigned char code table1[]={0XBF,0X86,0XDB,0XCF,0XE6,        //共阴带点
                            // 0XED,0XFD,0X87,0XFF,0XEF};
void delayms(uint xms);
void keyscan();
void key_hour();
void key_miu();
void display();
/********************************
***********延时函数*************/
void delayms(uint xms)
{
  uint i,j;
   for(i=0;i<xms;i++)
    for(j=0;j<121;j++);
}
/*******************************/
void keyscan()
{
if(key==0)
{
  delayms(2);
  if(key==0)
  {
   flag++;
   while(!key);
   if(flag==4)
    {
        flag=0;
        }
  }
}
   switch(flag)
   {
           case 1:
         TR0=0;
          if(key_jia==0)
          {
           hour++;
           while(!key_jia);
           if(hour==24)
                   hour=0;
          }       
           if(key_jian==0)
           {
                    hour--;
                 while(!key_jian);
                 if(hour==0)
                   hour=23;
           }
          break;
        case 2:
         if(key_jia==0)
         {
          miu++;
          while(!key_jia);
          if(miu==60)
           miu=0;
         }       
          if(key_jian==0)
           {
                    miu--;
                 while(!key_jian);
                 if(miu==0)
                   miu=59;
           }
         break;
        case 3:
         TR0=1;
         relay=0;
         break;
   }
}
/******************************/
void display()
{
    P2=0xff;
        P0=table[miu/10];
        P2=0xdf;
        delayms(2);
        P2=0xff;
        P0=table[miu%10];
        P2=0xef;
        delayms(2);
        P2=0xff;
        P0=table[hour/10];
        P2=0x7f;
        delayms(2);
        P2=0xff;
        P0=table1[hour%10];
        P2=0xbf;
        delayms(2);
}
void main()
{
  TMOD=0x01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=0;       
  while(1)
  {
    display();
          keyscan();
        if(miu==0&&hour==0)
         relay=1;
  }
}
/***********************************/       
void what0(void) interrupt 1 using 1
{
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
   count++;
    if(count==20)
        {
         count=0;
          miu--;
          if(hour!=0)
       {
                    if(miu==0)
                  {
                          miu=59;
                         hour=hour-1;
                  }
           }
              else
                  {
                          if(miu==0)
                          hour=0;
                          miu=0;
                  }
         }
}






2ms太短了 增大每个数码管显示时间

void display()
{
    P2=0xff;
        P0=table[miu/10];
        P2=0xdf;
        delayms(2);
        P2=0xff;//可以不要
        P0=table[miu%10];
        P2=0xef;
        delayms(2);
        P2=0xff;//可以不要
        P0=table[hour/10];
        P2=0x7f;
        delayms(2);
        P2=0xff;//可以不要
        P0=table1[hour%10];
        P2=0xbf;
        delayms(2);
}

我根据你的建议吧延时增加到5ms,把P0=0XFF都去掉了,可还是数码管还是没有显示啊~~

p2=0x00试试

你的意思是在主函数进来时加P2=0X00吗?我试过不行啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top