#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define t 1
uchar code seg_data[ ] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//0~9的段码表,0x00为熄灭符
uchar data disp_buf[7] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};//显示缓冲区
sbit IN1=P1^0;
sbit IN2=P1^1;
sbit IN3=P1^4;
sbit IN4=P1^5;
sbit IN33=P3^3;
sbit IN31=P3^1;
sbit IN35=P3^5;
sbit LED1=P2^6;
sbit LED2=P2^7;
sbit S1=P1^6;
uchar count=0;
//uchar turn_90_time=0;
/********以下是延时函数********/
void Delay_ms(uint xms) //延时程序,xms是形式参数
{
uint i, j;
for(i=xms;i>0;i--) // i=xms,即延时xms, xms由实际参数传入一个值
for(j=115;j>0;j--); //此处分号不可少
}
/********以下是显示函数********/
display()
{
P0=seg_data[0]; //显示毫秒十位
P2=0xfe; //开个位显示(开第1只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[1]; //显示毫秒百位
P2=0xfd; //开十位显示(开第2只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[2]; //显示秒个位
P2=0xfb; //开百位显示(开第3只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[3]; //显示秒十位
P2=0xf7; //开个位显示(开第4只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[4]; //显示分个位
P2=0xef; //开十位显示(开第5只数码管)
Delay_ms(t); //延时10ms
P0=seg_data[5]; //显示分十位
P2=0xdf; //开个位显示(开第6只数码管)
Delay_ms(t); //延时10ms
P2=0xff;
}
stop()
{
IN1=0;
IN2=0;
IN3=0;
IN4=0;
LED1=0;
LED2=0;
Delay_ms(50);
}
qianjin()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
LED1=1;
LED2=1;
Delay_ms(170);
}
qianjin2()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
LED1=1;
LED2=1;
Delay_ms(60);
}
qianjin3()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
LED1=1;
LED2=1;
Delay_ms(30);
}
zuozhuan()
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
LED1=1;
LED2=0;
Delay_ms(50);
}
youzhuan()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
LED1=0;
LED2=1;
Delay_ms(60);
}
youzhuan2()
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
LED1=0;
LED2=1;
Delay_ms(18);
}
houtui()
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
LED1=1;
LED2=1;
Delay_ms(130);
}
//****************主程序******************//
void main()
{
display();
while(1)
{LED1=0;
LED2=0;
if(count<=10)
{
if(IN33==1&&IN31==1&&IN35==1)
{qianjin();count++;}
if(IN33==1&&IN31==1&&IN35==0)
{stop();
youzhuan();
count++;
}
if(IN33==1&&IN31==0&&IN35==1)
{stop();qianjin();count++; }
if(IN33==1&&IN31==0&&IN35==0)
{stop();
qianjin3();
youzhuan();
qianjin2();
count++;}
if(IN33==0&&IN31==1&&IN35==1)
{stop();qianjin();count++;}
if(IN33==0&&IN31==1&&IN35==0)
{stop();
zuozhuan();
count++;}
if(IN33==0&&IN31==0&&IN35==1)
{stop();
qianjin();
count++;}
if(IN33==0&&IN31==0&&IN35==0)
{stop();houtui();
youzhuan();
count++;}
}
else
{houtui();
youzhuan2();
count=0;}
}
}