智能仪表综合课程设计
{
if(P1_0==0) 检测到暂停按键按下时候,令EA=0关闭中断 {
delay(1); 同通过死循环程序while(1),不断刷新数码管 if(P1_0==0) 当暂停键再次按下时候,开中断,以使比赛时间 { 继续倒计时,由于在暂停的时候,程序处于死循 while(P1_0==0);
EA=0; 无法回到主程序,暂停时,除了暂停键 while(1) 其他按键按下均无效
{
display(m,n,x,y); if(P1_0==0)
{ 当暂停键再次按下时候,EA=1开中断,计时数码管 delay(1); 继续倒计时,同时通过break语句,跳出死循环 if(P1_0==0) {
while(P1_0==0); EA=1; break; } } } } } }
4.2.9 中场指示灯程序 void over() {
if((m==0)&&(n==0)) 当m,n均为0的时候,通过变量jie的值判断比赛是否结束
21
智能仪表综合课程设计
{ if(jie>1)
如果jie>1,说明半场到了,比赛没有结束,
{ 令m=2,n=0,关中断,再次按下暂停键时候继续倒计时
m=2; 同是T1=1;delay(400) ;delay(400);,是蜂鸣器 n=0; 发声报警 EA=0;
T1=1; delay(400); T1=0;
while(1)
if(P1_0==0)
{
display(m,n,x,y); 刷新数码管,等待暂停减再次按下,跳出暂停
{
delay(1); if(P1_0==0) {
while(P1_0==0); EA=1; break; } }
} jie--;
}
if(jie==1&&bujin==2) 如果jie==1&&bujin==2,说明比赛结束了,
{ 关闭中断,比赛秒表不再走动,同时不短刷新数码管, EA=0;
22
智能仪表综合课程设计
m=0;
n=0;
T1=1; 全场比赛结束蜂鸣器开始报警
delay(400); T1=0;
P1=0x3f; P1=0x3f上下半场指示灯同时点亮,比赛结束 while(1) }
4.2.10 主程序 void main()
display(m,n,x,y); 同时应当不断刷新数码管 } }
{ TMOD=0x01; 首先设置定时器工作方式 EA=1; ET0=1;
TH0=0xb1; 定时器送计数初值,EA=1,开中断,P3口电平拉高 TL0=0x10; P1=0x7f, 上半场指示灯点亮 TR0=1; TR0=1启动定时器 P3=0xff; P1=0x7f;
T1=0;
while(1) 主程序通过 while(1),反复调用循环体内的子程序 { 来执行相应的功能
keyjiafen1();
keyjianfen1();
key2();
if(zidong==1) zidong==1为key3()执行条件
23
智能仪表综合课程设计
key3(); key3()半场交换场地时自动交换双方 if(n==18&&bujin==0) 比赛分数子程序,所以仅当中场时调用 {
bujin=2; 修改变量bujin的值,目的是设定over() } 中第二个if语句的执行条件
shijian();
key4();
over();
}
} 4.3控制源程序
#include
code unsigned seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}
//分别对应数码管显示的字形0到9
int m=1,n=60,x=0,y=0,i=0,jie=2,zidong=1,bujin=1,zanting=0,chuzanting=0;
//定义全局变量
jie,zidong,bujin,zanting,chuzanting
//并初始化,其中m,n分别表示分钟与秒计时,x,y分别表示甲乙//两队的分数,其余中间变量
void delay(int t) // 延时子程序 通过参数t,可以调整暂停时间 {
while(t--) {
unsigned int i; for(i=0;i<200;i++);
m,n,x,y,i,
24