毕设程序.docx

上传人:b****5 文档编号:7874377 上传时间:2023-01-26 格式:DOCX 页数:14 大小:17.43KB
下载 相关 举报
毕设程序.docx_第1页
第1页 / 共14页
毕设程序.docx_第2页
第2页 / 共14页
毕设程序.docx_第3页
第3页 / 共14页
毕设程序.docx_第4页
第4页 / 共14页
毕设程序.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

毕设程序.docx

《毕设程序.docx》由会员分享,可在线阅读,更多相关《毕设程序.docx(14页珍藏版)》请在冰豆网上搜索。

毕设程序.docx

毕设程序

//上电显示【灭10】,初始抢答时间10S,回答时间60S

#include

#include"main.h"

#definehahaTR0=TR1=0;buf[0]=buf[1]=11;alarm=1;flag4=0;flag3=1;while(k>0){scan_smg();k--;}TR0=1

#defineheiheibuf[0]=buf[1]=11;flag4=flag3=0;alarm=0;TR1=1

//==========================================ms级延时函数==================================================

voiddelay1m(uintx)

{

uinti,j;

for(i=0;i

for(j=0;j<120;j++);//数120次,约1ms

}

//=======================================主函数============================================================

voidmain()

{

uchark=100;//循环用变量

time_init();//定时器初始化

temp1=time1;temp2=time2;//time1=10,time2=60

while

(1)

{

if(flag4==1){convert_data(temp1);}//响应选手,显示抢答倒计时

elseif(flag3==1){convert_data(temp2);}//有人抢答,显示回答倒计时

scan_smg();//数码管扫描显示

if(s10==0){delay1m(3);if(s10==0){flag4=1;flag3=flag1=0;TR0=TR1=0;alarm=1;temp1=time1;temp2=time2;}}

while(flag4)//响应选手按键

{

if(flag4==1){convert_data(temp1);}//时间转换,响应选手时显示的是抢答倒计时

elseif(flag3==1){convert_data(temp2);}//有人抢答,显示回答倒计时

if(flag1==0){key_time1();key_time2();}

if(s9==0){delay1m(3);if(s9==0){flag1=flag4=1;flag3=0;TR0=1;TR1=0;alarm=1;temp1=time1;}}

if(s10==0){delay1m(3);if(s10==0){flag4=1;flag1=flag3=0;TR0=TR1=0;alarm=1;temp1=time1;temp2=time2;}}

scan_smg();//数码管扫描显示

if(flag1==1)//正常抢答

{

if(!

s1)

{

delay1m(3);

if(!

s1)//1号按下,定时器停止,显示【灭灭1],关蜂鸣器,不再响应选手号,回答倒计时标记,显示选手号后立马进入答题倒计时,开定时器0

{

buf[2]=1;TR0=TR1=0;buf[0]=buf[1]=11;alarm=1;flag4=0;flag3=1;while(k>0){scan_smg();k--;}TR0=1;

}

}

elseif(!

s2)

{

delay1m(3);

if(!

s2)//2号按下,定时器停止,显示【灭灭2】

{

buf[2]=2;haha;

}

}

elseif(!

s3)

{

delay1m(3);

if(!

s3)//2号按下,定时器停止,显示【灭灭2】

{

buf[2]=3;haha;

}

}

elseif(!

s4)

{

delay1m(3);

if(!

s4)//2号按下,定时器停止,显示【灭灭2】

{

buf[2]=4;haha;

}

}

elseif(!

s5)

{

delay1m(3);

if(!

s5)//2号按下,定时器停止,显示【灭灭2】

{

buf[2]=5;haha;

}

}

elseif(!

s6)

{

delay1m(3);

if(!

s6)//2号按下,定时器停止,显示【灭灭2】

{

buf[2]=6;haha;

}

}

elseif(!

s7)

{

delay1m(3);

if(!

s7)//2号按下,定时器停止,显示【灭灭2】

{

buf[2]=7;haha;

}

}

elseif(!

s8)

{

delay1m(3);

if(!

s8)//2号按下,定时器停止,显示【灭灭2】

{

buf[2]=8;haha;

}

}

k=100;//重新赋值

}

elseif(flag1==0)//犯规抢答

{

if(!

s1)

{

delay1m(3);

if(!

s1)//1号按下显示【灭灭1】

{

buf[2]=1;buf[0]=buf[1]=11;flag4=flag3=0;alarm=0;TR1=1;//开定时器1,蜂鸣器快速鸣响

}

}

elseif(!

s2)

{

delay1m(3);

if(!

s2)//2号按下显示【灭灭2】,

{

buf[2]=2;heihei;

}

}

elseif(!

s3)

{

delay1m(3);

if(!

s3)//3号按下显示【灭灭3】,

{

buf[2]=3;heihei;

}

}

elseif(!

s4)

{

delay1m(3);

if(!

s4)//3号按下显示【灭灭3】,

{

buf[2]=4;heihei;

}

}

elseif(!

s5)

{

delay1m(3);

if(!

s5)//3号按下显示【灭灭3】,

{

buf[2]=5;heihei;

}

}

elseif(!

s6)

{

delay1m(3);

if(!

s6)//3号按下显示【灭灭3】,

{

buf[2]=6;heihei;

}

}

elseif(!

s7)

{

delay1m(3);

if(!

s7)//3号按下显示【灭灭3】,

{

buf[2]=7;heihei;

}

}

elseif(!

s8)

{

delay1m(3);

if(!

s8)//3号按下显示【灭灭3】,

{

buf[2]=8;heihei;

}

}

}

}

}

}

//========================================抢答时间调整函数============================================

voidkey_time1()

{

EA=0;//关闭总中断

if(s14==0)//进入抢答时间调整

{

delay1m(3);

if(s14==0)

{

convert_data(time1);//将10s转换成方便数码管显示的数据

do

{

scan_smg();//扫描数码管

if(s12==0)//时间+

{

delay1m(3);

if(s12==0)

{

time1++;

if(time1>60){time1=10;}

while(!

s12);//等待按键弹起

convert_data(time1);

}

}

if(s11==0)//时间-

{

delay1m(3);

if(s11==0)

{

time1--;

if(time1<10){time1=60;}

while(!

s11);

convert_data(time1);

}

}

}while(s10);//按下停止键(确定)程序往下执行

temp1=time1;alarm=0;delay1m(500);alarm=1;

}

}

EA=1;//开总中断

}

//========================================回答时间调整函数============================================

voidkey_time2()

{

EA=0;//关闭总中断

if(s13==0)//进入回答时间调整

{

delay1m(3);

if(s13==0)

{

convert_data(time2);//将60s转换成方便数码管显示的数据

do

{

scan_smg();

if(s12==0)

{

delay1m(3);

if(s12==0)

{

time2++;

if(time2>250){time2=60;}

while(!

s12);

convert_data(time2);

}

}

if(s11==0)

{

delay1m(3);

if(s11==0)

{

time2--;

if(time2<60){time2=250;}

while(!

s11);

convert_data(time2);

}

}

}while(s10);//按下停止键(确定)程序往下执行

temp2=time2;alarm=0;delay1m(500);alarm=1;

}

}

EA=1;//开总中断

}

//==============================================数码管扫描显示函数========================================

voidscan_smg()

{

if(buf[0]==0){buf[0]=11;}//屏蔽不需要显示的0

if((buf[0]==11)&&(buf[1]==0)){buf[1]=11;}//屏蔽不需要显示的0

wei3=wei2=1;wei1=0;//低位

led=display[buf[2]];

delay1m(4);led=0xff;

wei3=wei1=1;wei2=0;//中位

led=display[buf[1]];

delay1m(4);led=0xff;

wei1=wei2=1;wei3=0;//高位

led=display[buf[0]];

delay1m(4);led=0xff;

}

//=============================================数据转换函数================================================

voidconvert_data(uchardat)

{

buf[0]=dat/100;//高位

buf[1]=dat/10%10;//中位

buf[2]=dat%10;//低位

}

//================================================定时器初始化函数=========================================

voidtime_init()

{

TMOD=0x11;//定时器0,1工作于方式1,16位

TH0=(65535-50000)/256;//50ms定时

TL0=(65535-50000)%256;

TH1=(65535-25000)/256;//25ms定时

TL1=(65535-25000)%256;

TR0=TR1=0;

ET0=ET1=EA=1;//允许定时器0/1中断,开总中断

}

//=================================================定时器中断函数===========================================

voidtime0_interrupt()interrupt1

{

TH0=(65535-50000)/256;//50ms定时

TL0=(65535-50000)%256;

counter++;

if(counter==20)//1s定时

{

counter=0;

if(flag3==0)//抢答倒计时

{

temp1--;

if(temp1==5){TR1=1;alarm=0;}//5s倒计时,开定时器1,蜂鸣器响

elseif(temp1==0)//抢答倒计时结束

{

alarm=1;//关蜂鸣器

TR0=TR1=0;

flag1=0;//抢答时间到,置于犯规抢答状态

delay1m(500);

temp1=time1;//抢答时间结束,显示抢答倒计时time1

}

}

elseif(flag3==1)//回答倒计时

{

temp2--;

if(temp2==5){TR1=1;alarm=0;}//5s倒计时,开定时器1,蜂鸣器响

elseif(temp2==0)//回答倒计时结束

{

alarm=1;//关蜂鸣器

TR0=TR1=0;

flag4=1;

flag3=0;//切换到抢答倒计时

flag1=0;

delay1m(500);

temp1=time1;//回答时间结束,显示抢答倒计时time1

temp2=time2;//还原回答倒计时

}

}

}

}

//=========================================================

voidtime1_interrupt()interrupt3

{

TH1=(65535-25000)/256;//25ms定时

TL1=(65535-25000)%256;

counter1++;counter2++;

if(flag1==0)//犯规抢答时,蜂鸣器快速鸣响

{

if(counter2>3)

{

counter2=0;

alarm=~alarm;

}

}

elseif((flag1==1)&&(counter1>19))//倒计时5S鸣响

{

counter1=0;

alarm=~alarm;

}

}

#ifndef_MAIN_H_

#define_MAIN_H

#defineucharunsignedchar

#defineuintunsignedint

#defineledP0//10111111

ucharcodedisplay[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//共阳数码管驱动信号0---9,-,灭,

sbitwei3=P2^7;sbitwei2=P2^6;sbitwei1=P2^5;//数码管位选(高wei3----低wei1)

sbits1=P1^0;sbits2=P1^1;sbits3=P1^2;sbits4=P1^3;//选手1---4号

sbits5=P1^4;sbits6=P1^5;sbits7=P1^6;sbits8=P1^7;//选手5---8号

sbits9=P3^2;sbits10=P3^3;//开始,停止/确定

sbits11=P2^0;sbits12=P2^1;//时间减,时间加

sbits13=P2^2;sbits14=P2^3;//回答时间设置键,抢答时间设置键

sbitalarm=P2^4;//蜂鸣器控制端

uchartime1=10;//抢答时间

uchartime2=60;//回答时间

uchartemp1=0;//抢答时间缓存

uchartemp2=0;//回答时间缓存

ucharbuf[3]={10,10,10};//显示数据缓存,初始显示---,高----低

bitflag1=0;/*开始键是否按下标记,初始状态:

【没按下】*/

bitflag3=0;/*抢答/回答倒计时,切换标记,初始状态:

【抢答】*/

bitflag4=1;/*是否需要响应选手按键,初始状态:

【响应】*/

ucharcounter=0;//1s计数器

ucharcounter1=0;//250ms计数器

ucharcounter2=0;//100ms计数器

//========================================函数声明======================================================

voidconvert_data(uchardat);//数据转换

voidkey_time1();//抢答时间调整

voidkey_time2();//回答时间调整

voidscan_smg();//数码管扫描

voidtime_init();//定时器初始化

#endif

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1