毕设程序.docx
- 文档编号:7874377
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:14
- 大小:17.43KB
毕设程序.docx
《毕设程序.docx》由会员分享,可在线阅读,更多相关《毕设程序.docx(14页珍藏版)》请在冰豆网上搜索。
毕设程序
//上电显示【灭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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序