电路如图所示,功能事要根据数码管的数字进行倒计时,红灯亮代表调的是电机速度PWM,数码管的小数点亮表示这个数码管被选择,上面的数字可以加减。目前的问题是,开始按钮按下后,不可以再次进行数字和速度的设定。
#include <reg51.h>
#define gewei P0
#define shiwei P3
#define baiwei P1
sbit add=P2^0; //增加
sbit dec=P2^1; //减小
sbit start=P2^2; //开始
sbit move=P2^3; //移位
sbit dj1=P2^7;
sbit dj2=P2^5;
sbit led0=P2^4;
sbit led1=P2^6;
sbit dot1=P0^7;
sbit dot2=P3^7;
sbit dot3=P1^7;
long dw=0; //档位
long gw=0; //个位
long gw1=0;
long sw=0; //十位 要有正负
long sw1=0;
long bw=0;
long bw1=0;
unsigned char code
time[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void delay(unsigned int a);
void int1();
void main()
{
int m=0,n=0,q=0,a=0,i=0,c=0; //延时消抖参数
dj1=0;
dj2=0;
gewei=time[0]; shiwei=time[0]; baiwei=time[0];
led0=0;led1=0;
while(1)
{ //此按键按下机器开始工作,开关控制电机旋转,(定时器开始运行,PWM波形开始输出)
if(start==0)
{
delay(10);
if(start==0)
{
m=1;
dj1=1;
int1();
}
}
if(move==0) //此按键按下开始选择需要设定的数码管
{
delay(10);
if(move==0)
{
m++;
delay(100);
if(m>4) m=1;
}
}
if(m==1)
{
led0=1;
dot1=0;dot2=0;dot3=0;
if(add==0) // 档位按键加dw
{
delay(3);
if(add==0)
{
dw++;
delay(100);
if(dw>=5)
dw=5;
}
}
if(dec==0) //档位按键减 dw
{
delay(10);
if(dec==0)
{
dw--;
delay(100);
if(dw<=0)
dw=0;
}
}
}
if(m==2)
{
dot1=1;dot2=0;dot3=0;
led0=0;
if(add==0) // 个位时间加 gw
{
delay(10);
if(add==0)
{
gw1=gw;
gw++;gw1++;
if(gw>9) gw=0;
if(gw1>9) gw1=0;
delay(100);
gewei=time[gw];
}
}
if(dec==0) //个位时间减
{
delay(10);
if(dec==0)
{
gw1=gw;
gw--;gw1--;
if(gw<0) gw=9;
if(gw1<0) gw1=9;
delay(100);
gewei=time[gw];
}
}
}
if(m==3)
{
dot1=0;dot2=1;dot3=0;
led0=0;
if(add==0) // 十位时间加
{
delay(10);
if(add==0)
{
sw1=sw;
sw++;sw1++;
if(sw>9) sw=0;
if(sw1>9) sw1=0;
delay(100);
shiwei=time[sw];
}
}
if(dec==0) //十位时间减
{
delay(10);
if(dec==0)
{
sw1=sw;
sw--;sw1--;
if(sw<0) sw=9;
if(sw1<0) sw1=9;
delay(100);
shiwei=time[sw];
}
}
}
if(m==4)
{
dot1=0;dot2=0;dot3=1;
led0=0;
if(add==0) // 百位时间加
{
delay(10);
if(add==0)
{
bw1=bw;
bw++;bw1++;
if(bw>9) bw=0;
if(bw1>9) bw1=0;
delay(100);
baiwei=time[bw];
}
}
if(dec==0) //百位时间减
{
delay(10);
if(dec==0)
{
bw1=bw;
bw--;bw1++;
if(bw<0) bw=9;
if(bw1<0) bw1=9;
delay(100);
baiwei=time[bw];
}
}
}
}
}
void delay(unsigned int a) // 1ms
{
unsigned int b,c;
for(;a>0;a--)
for(b=120;b>0;b--)
for(c=2;c>0;c--);
}
void int1()
{
TMOD=0x10; // 1ms PWM波形
TH1=0xfc;
TL1=0x18;
EA=1;
ET1=1;
TR1=1;
}
void time1() interrupt 3
{
static int m=0;
static long n=0;
unsigned long int i=0;
unsigned long q;
q=100*bw1+10*sw1+gw1;
TR1=0; // 1ms PWM波形
TH1=0xff;
TL1=0x38;
TR1=1;
if(m<=dw)
dj2=1;
else
if(m>dw)
dj2=0;
m++;
if(m>5)
m=0;
n++;
if(n%2000==0)
{
led1=~led1;
}
if(n>=12000)
{
i++;
n=0;
gw--;
gewei=time[gw];
if(gw<0)
{
gw=9;
gewei=time[gw];
sw--;
shiwei=time[sw];
if(sw<0)
{
gw=9;
gewei=time[gw];
sw=9;
shiwei=time[sw];
bw--;
baiwei=time[bw];
}
}
}
if(i==q) //1min=120000*?
{
TR1=0;
ET1=0;
dj1=0;
dj2=dj2&&0x00;
m=0;
i=0;
}
}
-
对的,可以实时设定参数
一周热门 更多>