程序如下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit ENA=P1^3;
sbit key=P3^4;
sbit stop=P3^5;
int num=0,num1=0,m1=0,m2=0,s1=0,s2=0,i=0,n=0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0x40在数码管上显示“-”
void delay(uint a) //延时语句
{
uint p,q;
for(p=0;p<a;p++)
for(q=0;q<110;q++);
}
void keyscan()//键盘输入语句
{
if(key==0)
{
delay(10);
if(key==0)
TR0=1;
}
if(stop==0)
{
delay(10) ;
if(stop==0)
EA=~EA;
}
}
void display(uchar m1,uchar m2, uchar s1,uchar s2)//数码管显示语句
{
dula=1;
P0=table[m2];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[m1];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[10];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[s2];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[s1];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
}
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
while(1)
{
keyscan();
display(m1,m2,s1,s2);
}
for(n=0;n<50;n++) //驱动电机正反转动,以及以后加速转动等等。。。暂时不知道怎么用
{
IN1=1;
IN2=0;
for(i=0;i<100;i++)
{
delay(10);
ENA=~ENA;
}
ENA=0;
delay(1000);
IN1=0;
IN2=1;
for(i=0;i<100;i++)
{
delay(10);
ENA=~ENA;
}
ENA=0;
delay(1000);
}
while(1);
}
void T0_time() interrupt 1//中断
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num++;
m2=(num/60)/10;
m1=(num/60)%10;
s2=(num%60)/10;
s1=(num%60)%10;
}
}
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit IN1=P1^1;
sbit IN2=P1^2;
sbit ENA=P1^3;
sbit key=P3^4;
sbit stop=P3^5;
int num=0,num1=0,m1=0,m2=0,s1=0,s2=0,i=0,n=0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0x40在数码管上显示“-”
void delay(uint a) //延时语句
{
uint p,q;
for(p=0;p<a;p++)
for(q=0;q<110;q++);
}
void keyscan()//键盘输入语句
{
if(key==0)
{
delay(10);
if(key==0)
TR0=1;
}
if(stop==0)
{
delay(10) ;
if(stop==0)
EA=~EA;
}
}
void display(uchar m1,uchar m2, uchar s1,uchar s2)//数码管显示语句
{
dula=1;
P0=table[m2];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);
dula=1;
P0=table[m1];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
dula=1;
P0=table[10];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
dula=1;
P0=table[s2];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(1);
dula=1;
P0=table[s1];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(1);
}
void main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
while(1)
{
keyscan();
display(m1,m2,s1,s2);
}
for(n=0;n<50;n++) //驱动电机正反转动,以及以后加速转动等等。。。暂时不知道怎么用
{
IN1=1;
IN2=0;
for(i=0;i<100;i++)
{
delay(10);
ENA=~ENA;
}
ENA=0;
delay(1000);
IN1=0;
IN2=1;
for(i=0;i<100;i++)
{
delay(10);
ENA=~ENA;
}
ENA=0;
delay(1000);
}
while(1);
}
void T0_time() interrupt 1//中断
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
num++;
m2=(num/60)/10;
m1=(num/60)%10;
s2=(num%60)/10;
s1=(num%60)%10;
}
}
