单片机上电后P3.5口应该是高电平,但是现在是低电平,硬件电路没问题,程序如下。求大佬帮我看看程序哪里出问题了。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void displaym();
void displayj();
sbit en=P2^0;
sbit rs=P2^1;
sbit rw=P2^2;
sbit num1=P1^0;
sbit num2=P1^1;
sbit num3=P1^2;
sbit num4=P1^3;
sbit num5=P1^4;
sbit num6=P1^5;
sbit num7=P1^6;
sbit num8=P1^7;
sbit num9=P3^7;
sbit out0=P2^3;
sbit out1=P2^4;
sbit out2=P2^6;
sbit out3=P3^0;
sbit out4=P3^3;
sbit out5=P3^4;
sbit out6=P3^5;
sbit out7=P3^6;
uint zhuansu,flag1,flag2,flag3,flag4,z1,z2,m1,m2,m3,m4,
flag_1,flag_2,flag_3,flag_4,AZ,BZ,CZ,DZ,kai,j,su;
void delay(uint z)
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void write_com(uchar com)
{
rs=0;
P0=com;
delay(5);
en=1;
delay(10);
en=0;
}
void write_data(uchar date)
{
rs=1;
P0=date;
delay(5);
en=1;
delay(5);
en=0;
}
void init()
{
en=0;
rw=0;
write_com(0x38);
write_com(0x0c);
write_com(0x01);
TMOD=0x11;
TH0=0xdc;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
EX1=1;
IT1=1;
TH1=0xfc;
TL1=0x66;
ET1=1;
TR1=1;
write_com(0x80);
write_data('V');
write_data(':');
write_com(0x87);
write_data('m');
write_data('/');
write_data('m');
write_data('i');
write_data('n');
write_com(0xc0);
write_data('z');
write_data('k');
write_data('b');
write_data(':');
displaym();
write_com(0xc8);
write_data('s');
write_data('d');
write_data(':');
displayj();
}
void keyscan()
{
if(num1==0)
{
delay(5);
if(num1==0)
{
if(m1<=100)
m1++;
displaym();
}
}
if(num2==0)
{
delay(5);
if(num2==0)
{
if(m1>=1)
m1--;
displaym();
}
}
if(num3==0)
{
delay(5);
if(num3==0)
{
if(m2<=100)
m2++;
displaym();
}
}
if(num4==0)
{
delay(5);
if(num4==0)
{
if(m2>=1)
m2--;
displaym();
}
}
if(num5==0)
{
delay(5);
if(num5==0)
{
if(m3<=100)
m3++;
displaym();
}
}
if(num6==0)
{
delay(5);
if(num6==0)
{
if(m3>=1)
m3--;
displaym();
}
}
if(num7==0)
{
delay(5);
if(num7==0)
{
if(m4<=100)
m4++;
displaym();
}
}
if(num8==0)
{
delay(5);
if(num8==0)
{
if(m4>=1)
m4--;
displaym();
}
}
if(num9==0)
{
delay(5);
if(num9==0)
{
while(num9==0) ;
kai=1-kai;
}
}
}
void display()
{
write_com(0x82);
zhuansu=zhuansu*30;
su=zhuansu*0.01*2*3.14/2;
write_com(0xd0);
}
void displaym()
{
write_com(0xc4);
if(m1/200%10!=0)
write_data(m1/200%10+0x30);
else
write_data(' ');
if(m1/200%10==0&&m1/20%10==0)
write_data(' ');
else
write_data(m1/20%10+0x30);
write_data(m1/2%10+0x30);
}
void displayj()
{
write_com(0xcb);
if(j/100%10!=0)
write_data(m1/100%10+0x30);
else
write_data(' ');
if(j/100%10==0&&j/10%10==0)
write_data(' ');
else
write_data(j/10%10+0x30);
write_data(j/1%10+0x30);
write_com(0xd0);
}
void main()
{
flag_1=0;
flag_2=0;
flag_3=0;
flag_4=0;
m1=10;
m2=10;
m3=10;
m4=10;
zhuansu=0;
flag1=0;
flag2=0;
flag3=0;
flag4=0;
AZ=1;
BZ=1;
CZ=1;
DZ=1;
j=67;
init();
while(1)
{
keyscan();
if(su>j*10)
{
kai=0;
delay(500);
kai=1;
}
}
}
void int1()interrupt 2
{
zhuansu++;
}
void int2()interrupt 1
{
TH0=0xdc;
TL0=0x00;
flag1++;
flag2++;
flag3++;
flag4++;
if(flag1==200)
{
display();
zhuansu=0;
flag1=0;
}
if(flag2==200)
{
display();
zhuansu=0;
flag2=0;
}
if(flag3==200)
{
display();
zhuansu=0;
flag3=0;
}
if(flag4==200)
{
display();
zhuansu=0;
flag4=0;
}
}
void int3() interrupt 3
{
TH1=0xff;
TL1=0x10;
flag_1++;
flag_2++;
flag_3++;
flag_4++;
if(flag_1>100)
flag_1=1;
if(flag_2>100)
flag_2=1;
if(flag_3>100)
flag_3=1;
if(flag_4>100)
flag_4=1;
if(kai==1)
{
if(AZ==1)
{
if(flag_1<m1)
{
out0=0;
out1=1;
}
else
{
out0=1;
out1=1;
}
}
if(BZ==1)
{
if(flag_2<m2)
{
out2=0;
out3=1;
}
else
{
out2=1;
out3=1;
}
}
if(CZ==1)
{
if(flag_3<m3)
{
out4=0;
out5=1;
}
else
{
out4=1;
out5=1;
}
}
if(DZ==1)
{
if(flag_4<m4)
{
out6=0;
out7=1;
}
else
{
out6=1;
out7=1;
}
}
}
if(kai==0)
{
out0=1;
out1=1;
out2=1;
out3=1;
out4=1;
out5=1;
out6=1;
out7=1;
}
}
|