#include <REGX52.H>
#include "exti.h"
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char Track_time[]={0,0,0,0,0,0};
unsigned int Time_count[]={0,0,0,0,0,0};
unsigned int Track_Sta[]={0,0,0,0,0,0};
int count=1;
int key;
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Timer0Init(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xF0; //设置定时初值
TH0 = 0xD8; //设置定时初值
TF0 = 0; //清除TF0标志
// TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}
void keyacqiue()
{
int i;
if(P3_1==0)//k2启动
{
Delay(20);
while(P3_1==0);
Delay(20);
for(i=0;i<6;i++)
{
Track_Sta[i]=1;
}
TR0=1;
key=0;
}
}
void cancel()
{
int i;
if(P3_0==0)//k4停止清屏
{
Delay(20);
while(P3_0==0);
Delay(20);
key=1;
}
}
void processing(int count)
{
int i;
switch(count)
{
case 1:
if(Track_Sta[1]==0)
{
Track_time[1]=Time_count[1]/10000;
Track_time[2]=Time_count[1]/1000%10;
Track_time[3]=Time_count[1]/100%10;
Track_time[4]=Time_count[1]/10%10;
Track_time[5]=Time_count[1]%10;
}
else
{
Track_time[1]=Time_count[0]/10000;
Track_time[2]=Time_count[0]/1000%10;
Track_time[3]=Time_count[0]/100%10;
Track_time[4]=Time_count[0]/10%10;
Track_time[5]=Time_count[0]%10;
}
if(key)//k4停止清屏
{
TR0=0;
for(i=0;i<6;i++)
{
Track_time[i]=0;
}
Time_count[0]=0;
}
break;
case 2:
if(Track_Sta[2]==0)
{
Track_time[1]=Time_count[2]/10000;
Track_time[2]=Time_count[2]/1000%10;
Track_time[3]=Time_count[2]/100%10;
Track_time[4]=Time_count[2]/10%10;
Track_time[5]=Time_count[2]%10;
}
else
{
Track_time[1]=Time_count[0]/10000;
Track_time[2]=Time_count[0]/1000%10;
Track_time[3]=Time_count[0]/100%10;
Track_time[4]=Time_count[0]/10%10;
Track_time[5]=Time_count[0]%10;
}
if(key)//k4停止清屏
{
TR0=0;
for(i=0;i<6;i++)
{
Track_time[i]=0;
}
Time_count[0]=0;
}
break;
case 3:
if(Track_Sta[3]==0)
{
Track_time[1]=Time_count[3]/10000;
Track_time[2]=Time_count[3]/1000%10;
Track_time[3]=Time_count[3]/100%10;
Track_time[4]=Time_count[3]/10%10;
Track_time[5]=Time_count[3]%10;
}
else
{
Track_time[1]=Time_count[0]/10000;
Track_time[2]=Time_count[0]/1000%10;
Track_time[3]=Time_count[0]/100%10;
Track_time[4]=Time_count[0]/10%10;
Track_time[5]=Time_count[0]%10;
}
if(key)//k4停止清屏
{
TR0=0;
for(i=0;i<6;i++)
{
Track_time[i]=0;
}
Time_count[0]=0;
}
break;
case 4:
if(Track_Sta[4]==0)
{
Track_time[1]=Time_count[4]/10000;
Track_time[2]=Time_count[4]/1000%10;
Track_time[3]=Time_count[4]/100%10;
Track_time[4]=Time_count[4]/10%10;
Track_time[5]=Time_count[4]%10;
}
else
{
Track_time[1]=Time_count[0]/10000;
Track_time[2]=Time_count[0]/1000%10;
Track_time[3]=Time_count[0]/100%10;
Track_time[4]=Time_count[0]/10%10;
Track_time[5]=Time_count[0]%10;
}
if(key)//k4停止清屏
{
TR0=0;
for(i=0;i<6;i++)
{
Track_time[i]=0;
}
Time_count[0]=0;
}
break;
case 5:
if(Track_Sta[5]==0)
{
Track_time[1]=Time_count[5]/10000;
Track_time[2]=Time_count[5]/1000%10;
Track_time[3]=Time_count[5]/100%10;
Track_time[4]=Time_count[5]/10%10;
Track_time[5]=Time_count[5]%10;
}
else
{
Track_time[1]=Time_count[0]/10000;
Track_time[2]=Time_count[0]/1000%10;
Track_time[3]=Time_count[0]/100%10;
Track_time[4]=Time_count[0]/10%10;
Track_time[5]=Time_count[0]%10;
}
if(key)//k4停止清屏
{
TR0=0;
for(i=0;i<6;i++)
{
Track_time[i]=0;
}
Time_count[0]=0;
}
break;
}
}
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void Nixie22(unsigned char dat[])
{
int i;
for(i=2;i<8;i++)
{
switch(i)
{
case 2:LSA=0;LSB=1;LSC=0;break;
case 3:LSA=1;LSB=1;LSC=0;break;
case 4:LSA=0;LSB=0;LSC=1;break;
case 5:LSA=1;LSB=0;LSC=1;break;
case 6:LSA=0;LSB=1;LSC=1;break;
case 7:LSA=1;LSB=1;LSC=1;break;
}
if(i!=5)
{
P0=NixieTable[dat[i-2]];
}
else
{
P0=NixieTable[dat[i-2]]|0x80;
}
Delay(1);
P0=0x00;
}
}
void Nixie(unsigned int dat)
{
int i;
for(i=0;i<2;i++)
{
switch(i)
{
case 0:LSA=0;LSB=0;LSC=0;break;
case 1:LSA=1;LSB=0;LSC=0;break;
}
if(i==0)
P0=NixieTable[0];
else
P0=NixieTable[dat];
Delay(1);
P0=0x00;
}
}
void main()
{
Timer0Init();
IT0_Init();
IT1_Init();
while(1)
{
keyacqiue();
processing(count);
cancel();
Nixie22(Track_time);
Nixie(count);
}
}
void Timer0_Routine() interrupt 1
{
int i;
TL0 = 0xF0; //设置定时初值
TH0 = 0xD8; //设置定时初值
Time_count[0]++;
// keyacqiue();
if(Time_count[0]>=50000)
{
for(i=0;i<=5;i++)
{
Track_Sta[i]=0;
}
}
if(Track_Sta[1]==1)
{
Time_count[1]=Time_count[0];
}
if(Track_Sta[2]==1)
{
Time_count[2]=Time_count[0];
}
if(Track_Sta[3]==1)
{
Time_count[3]=Time_count[0];
}
if(Track_Sta[4]==1)
{
Time_count[4]=Time_count[0];
}
if(Track_Sta[5]==1)
{
Time_count[5]=Time_count[0];
}
}
void Int0() interrupt 0
{
Delay(20);
while(P3_2==0);
Delay(20);
count++;
if(count>5)
count=1;
// Track_Sta[count]=1;
}
void Int1() interrupt 2
{
Delay(20);
while(P3_3==0);
Delay(20);
if(Track_Sta[count]==0)
Track_Sta[count]=1;
else
Track_Sta[count]=0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
赛车跑道自动触发计时系统-程序+仿真.rar (28个子文件)
赛车跑道自动触发计时系统-程序+仿真
程序
Project.uvopt 6KB
Project.uvgui.21272 87KB
exti.c 147B
Objects
Timer0.obj 4KB
Project.build_log.htm 1KB
key.__i 104B
Timer0.__i 113B
Project.hex 6KB
exti.__i 107B
Project 16KB
exti.obj 3KB
main.obj 17KB
key.obj 3KB
Project.lnp 118B
Project.uvgui.Admin 86KB
Listings
Project.m51 20KB
main.lst 17KB
Timer0.lst 2KB
key.lst 2KB
exti.lst 1KB
Project.uvgui.WZ 89KB
Project.uvgui.Administrator 70KB
main.c 6KB
Project.uvproj 14KB
exti.h 150B
仿真
New Project.pdsprj.DESKTOP-TME1AVA.21272.workspace 2KB
New Project.pdsprj 24KB
Last Loaded New Project.pdsbak 24KB
共 28 条
- 1
资源评论
@愉快的决定%
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功