小弟最近学单片机,刚好一天家里的风扇定时器坏了,所以想DIY个可以显示时分的定时器,画了原理图,按照思路编了个程序,可是用的时候发现数码管没有任何显示,小弟觉得按照电路图焊的,电路应该没有焊错,不知道是不是程序错了,再次恳求大神们帮小弟看看这个程序有没有问题,跪谢了!!!附上原理图,小弟用的是四位共阳极数码管,两位显示时,两位显示分,
还有程序:#include #define uchar unsigned char
#define uint unsigned int
***it key_jia=P3^0;
***it key_jian=P3^1;
***it key=P3^2;
***it 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
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;
}
}
}
|