程序哪里写错而导致时钟显示不行(6位数码管 ),

2019-07-15 14:45发布

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp,aa,miao,fen,shi;
sbit key1=P3^0;
sbit key2=P3^1;
uchar code table[]={ //数码管编码表
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90};        //共阳极数码表
void display(uchar miao,uchar fen,uchar shi);
void delay(uint z);
void tiaoshi_key();
void init();
//-----------主函数-------------------
void main()
{
init();//初始化子程序
miao=0;
shi=0;
fen=0;
while(1)
{
   display(miao,fen,shi);
   tiaoshi_key();
}
}
//--- 延时函数-----------
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
//-----------显示函数----------------------------------------------
void display(uchar miao,uchar fen,uchar shi)  //  显示子函数
{
P0=0xff;
  P2=0xfe  ;
  P0=table[miao%10];
  delay(1) ;   // 延时5MS


  P0=0xff;
  P2=0xfd  ;
  P0=table[miao/10];
  delay(1);// 延时5MS


  P0=0xff;
  P2=0xfb;
  P0=table[fen%10];
  delay(1);// 延时5MS

  P0=0xff ;
   P2=0xf7;
   P0=table[fen/10];
   delay(1);         // 延时5MS

  P0=0xff;
  P2=0xef;
  P0=table[shi%10];
  delay(1); // 延时5MS

  P2=0xff;
  P2=0xdf;
  P0=table[shi/10];
  delay(1);          // 延时5MS


}
//----------初始化-----------------------------
void init()   // 初始化子函数
{
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //定时器初值,定时50ms(12M晶振),由于考虑MCU指令处理时间,此处赋初值位45872
EA=1;
ET0=1;
TR0=1;
}
//----------中断函数计时转换-----------------------------
void timer0() interrupt 1 //定时计数器中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;  
aa++;
if(aa==20) //中断2次位1S,秒加1     
{
  miao++;
  aa=0;
  if(miao==60)
   {
    fen++;  //  满60S, 分加1,秒清0
    miao=0;
    if(fen==60)
     {
      shi++; // 小时加1
      fen=0;
      if(shi==24) shi=0; //小时满
     }
   }
  }
}
//----------------
void tiaoshi_key()
{   
if(key1==0)  //  调分
{
  delay(2);
  if(key1==0)  fen++;
  if(fen==60) fen=0;
  delay(2);
  while(!key1);
}
if(key2==0)   // 调小时
{
  delay(2);
  if(key2==0)  shi++;
  if(shi==24) shi=0;
  delay(2);
  while(!key2);
}
}



01.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。