这两天刚做的基于51 单片机的调速、测速与显示,我也是刚学,边借鉴边做, 仿真没仿出来,知道肯定有问题,但感觉方向应该是对的,具体问题求大触挑几个有代表性的指点一二,下面附 电路图、仿真程序与软件部分代码,感谢!!
**************************************
**************************************
#include
typedef unsigned int uint;
typedef unsigned char uchar;
uint num;
uchar code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
***it LSA=P2^0;
***it LSB=P2^1;
***it LSC=P2^2;
***it shujia=P3^3;
***it shujian=P3^4;
void start()
{
TMOD=0X15;
IT0=1;
TH0=0x00;
TL0=0X00;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void display(uchar shu)
{
uchar ge,shi,bai,qian,i,a;
qian=shu/1000;
bai=(shu%1000)/100;
shi=(shu%100)/10;
ge=shu%10;
for(i=0;i<4;i++)
{
switch(i)
{
case 0:
LSA=0,LSB=0,LSC=0;
P1=smg[ge];
break;
case 1:
LSA=1,LSB=0,LSC=0;
P1=smg[shi];
break;
case 2:
LSA=0,LSB=1,LSC=0;
P1=smg[bai];
break;
case 3:
LSA=1,LSB=1,LSC=0;
P1=smg[qian];
break;
}
a=10;
while(a--);
P1=0x00;
}
}
void delay10ms()
{
uchar i,j;
for(i=10;i>0;i--)
for(j=110;j>0;j--);
}
uchar jianpan()
{
while(1)
{
P2=0xe0;
if(P2!=0xe0)
{
delay10ms();
if(P2!=0xe0)
{
switch(P2)
{
case 0xc0:
while(P2==0xc0);
delay10ms();
return 1;
break;
case 0xa0:
while(P2==0xa0);
delay10ms();
return 2;
break;
case 0x60:
while(P2==0x60);
delay10ms();
return 3;
break;
}
}
}
P2=0xd0;
if(P2!=0xd0)
{
delay10ms();
if(P2!=0xd0)
{
switch(P2)
{
case 0xc0:
while(P2==0xc0);
delay10ms();
return 4;
break;
case 0x90:
while(P2==0x90);
delay10ms();
return 5;
break;
case 0x50:
while(P2==0x50);
delay10ms();
return 6;
break;
}
}
}
P2=0xb0;
if(P2!=0xb0)
{
delay10ms();
if(P2!=0xb0)
{
switch(P2)
{
case 0xa0:
while(P2==0xa0);
delay10ms();
return 7;
break;
case 0x90:
while(P2==0x90);
delay10ms();
return 8;
break;
case 0x30:
while(P2==0x30);
delay10ms();
return 9;
break;
}
}
}
P2=0x70;
if(P2!=0x70)
{
delay10ms();
if(P2!=0x70)
{
switch(P2)
{
case 0x60:
while(P2==0x60);
delay10ms();
return 0;
break;
}
}
}
}
}
void delay50ms()
{
uchar i,j;
for(i=50;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
uchar shu,pge,pshi,pbai,aa;
pbai=jianpan();
pshi=jianpan();
pge=jianpan();
aa=pbai*100+pshi*10+pge;
P0=aa;
start();
while(1)
{
if(num==20)
{
num=0;
shu=TH0;
TH0=0;
}
display(shu);
if(shujia==0)
{
delay10ms();
while(shujia==0)
{
if(aa!=255)
{
delay50ms();
aa++;
}
P0=aa;
}
}
if(shujian==0)
{
delay10ms();
while(shujian==0)
{
if(aa!=0)
{
delay50ms();
aa--;
}
P0=aa;
}
}
}
}
void ser() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
num++;
}
0
|
|
|
|