在
仿真软件上可以实现99秒的定时设置,但是我下载到自己焊接的
电路上后,P1接的十位不能正常从9减到1,乱码,个位正常跳数,个位大神,这是什么原因?求解答
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
int choose=0; //模式选择
uchar bian; //设置时间
sbit k1=P3^7;
sbit k2=P3^6;
sbit input=P3^2;
sbit output=P3^4;
unsigned code table[10]={0xC0, 0xF9, 0xA4, 0xB0,0x99, 0x92, 0x82,0xF8, 0x80, 0x90};//0到9
uchar n,m;
int count=99;
bit flag=1;
int i;
void delayms(uint a) //延时程序
{
uint x,y;
for( x=a;x>0;x--)
for(y=113;y>0;y--);
}
void display()
{
P1=table[count%10];
P2=table[count/10];
}
void display1()
{
if(flag==1)
{
P1=table[count%10];
P2=table[count/10];
}
else
{
P1=0XFF;P2=0XFF;
}
}
void main()
{
TMOD=0x11;
TH1=(65536-50000)/256;//装入初值
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
ET0=1;
TH0=(65536-50000)/256;//装入初值
TL0=(65536-50000)%256;
TR0=1;
while(1)
{
// if(count>0){output=~input;}
// if(count==0){TR1=0;n=0;TR0=0;m=0;output=1;}
// delayms(10);
if(k1==0)
{
delayms(10);
if(k1==0)
{choose++;
if(choose>3)
{choose=0;
}
}
while(k1==0);
}
switch(choose)
{
case 0:TR1=0;n=0;TR0=0;count=99;display();
case 1:TR1=0;n=0;TR0=1;
if(k2==0){delayms(10);if(k2==0){count--;if(count<0){count=99;} display1();}while(k2==0);}
break;
case 2:TR1=0;n=0;TR0=1;
if(k2==0){delayms(10);if(k2==0){count=count-10;if((count%10)<0){count=count+90;} display1();}while(k2==0);}
break;
case 3:TR1=1;TR0=0;display();
break;
default: break;
}
if(0<choose<3){display1();}
if(choose==3){display();}
if(choose==0){display();}
}
}
void T1_
time() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
n++;
if(n==20)
{
n=0;
count--;
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
m++;
if(m==10)
{
m=0;
flag=~flag;
}
}
补充内容 (2016-7-21 14:31):
问题解决了,是电路短接了。不过由于没有限流电阻会发热厉害
-
一周热门 更多>