微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 程序哪里写错而导致时钟显示不行(6位数码管 ),

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

时间:10-02 整理:3721RD 点击:
#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);
}
}


你好,程序应该没问题。问题在电路,电阻应该如图接在三极管右端。


期待高指点   叩谢

建议是描述一下出现问题是怎样一个现象,显示不行具体是计时不对还是显示什么。

既然运行没错,应该不是程序问题,那就是延时不对

我也感觉是延时不对(~_~;)

三极管换非门更好,不用电阻

谢谢  我马上试试

乱码 不全, 很多中间的G段 不显示等 等

非常感谢 你 朋友 ,  一点不错, 电阻移动到三极管后面的集电极上, 真的显示OK 了! !

谢谢你的关注,  我的程序正常, 的确是是电路问题。 你建议的非门方案 我还没有试

赞一个哈

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

网站地图

Top