课程设计题一:八人抢答器

要求:

1、八人抢答逻辑:只有一个最先抢答有效。

2、在主持人控制下,10秒内抢答有效。

3、采用数码管显示抢答10秒倒计时,若有抢答直接结束,显示结果。

4、抢答结束后用数码管显示抢答结果:抢答有效人编号;若有异常(提前抢答,犯规),显示抢答人编号和E,本次抢答结束 。

5、设主持人控制键、复位键。

           控制键:启动抢答

           复位键:系统复位

6、开始、正常结束、抢答结束、违规抢答采用声音提示。

7、最后5S开始倒计时的时候有滴滴滴的计时音。

获取该程序的方式:

1、CSDN下载:

https://download.csdn.net/download/qq_38351824/11267213

2、关注微信公众号下载:

     ① 关注微信公众号:Tech云  

     ②

3、可以关注点赞并在下方评论,我给你邮箱发过去。

一、Protues仿真图:

二、程序源码:

因为注释非常的全,这里就不再进行讲解了。

/*******************************************************************************
================================================================================
【平    台】STC89C51_sumjess平台
【编    写】sumjess
【E-mail  】1371129880@qq.com
【软件版本】V2.0
【最后更新】2019年06月10日
【相关信息参考下列地址】
【网    站】
           https://blog.csdn.net/qq_38351824
           http://www.51hei.com/bbs/mcu-2-1.html
---------------------------------------------------------------------------------
【dev.env.】MDK4.02及以上版本
【Target  】STC89C51
第一次修订:2019/05/09
第二次修订:2019/05/21
第三次修订:2019/06/10
【problem 】							   
    (1)库内补充的不全面;
    (2)库内解释部分不全面;
    (3)库内还存在一定的bug;
【direction】
      下一步的目标就是把库继续集成!
【explain 】
      为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!
【warning】
      目前程序中暂无错误 !   
---------------------------------------------------------------------------------
没有完美的代码,只有不断的奉献,大家一起努力;
赠人玫瑰手留余香,欢迎大家反馈bug!
================================================================================
********************************************************************************/	

#include<reg51.h>
#include<intrins.h>


sbit smg1=P2^4;		//定义数码管第一位
sbit smg2=P2^6;		//定义数码管第二位
sbit smg3=P2^7;		//定义数码管第三位
sbit smg4=P2^5;

sbit keyks=P2^2;	//定义开始按键
sbit keytz=P2^1;	//定义停止按键
sbit keyqc=P2^0;	//定义清除按键

sbit key1=P1^4;		//定义1号抢答选手		 
sbit key2=P1^5;		//定义2号抢答选手
sbit key3=P1^6;		//定义3号抢答选手
sbit key4=P1^7;		//定义4号抢答选手
sbit key5=P3^4;		//定义5号抢答选手
sbit key6=P3^5;		//定义6号抢答选手
sbit key7=P3^6;		//定义7号抢答选手
sbit key8=P3^7;		//定义8号抢答选手
sbit spk=P1^0;		//定义蜂鸣器
int djs,js=0;    	//djs和bt是初始倒计时时间

unsigned char flag=0;

int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80,0x9b};

void delayms(uint z)	 //毫秒
{
	uint x,y;
    for(x=z;x>0;x--)
      for(y=110;y>0;y--);   
}
 
void Timer0_init()			//定时器0初始化
{
    js=0;
	TMOD=0x01;					//设置定时器0为工作方式1(M1M0为01)
	TH0=(65536-45872)/256;		//装初值11.0592M晶振定时50ms数为45872
	TL0=(65536-45872)%256;		
	ET0=1;						//开定时器0中断
	EA=1;						//开总中断
}

void timer0() interrupt 1 using 1	//定时器0中断服务函数
{
	TH0=(65536-45872)/256;		//装初值11.0592M晶振定时50ms数为45872
	TL0=(65536-45872)%256;	
	js++;						//叠加20次
	if(flag==1)					//
	{							
	 if(js<8)  spk=0;			//蜂鸣器响
	 else spk=1;				//蜂鸣器停
	  }
	if(js==20) 
	{ 
	  js=0;						//清空
	  djs--;					//产生1s的倒计时
	 }
}

void djsxs()   //显示倒计时函数
 {	int b1,b2;
 	b1=djs/10;
	b2=djs%10;				  //将倒计时时间分成高低位
	P0=table[b1];			  
    smg2=0;
    delayms(3);
    smg2=1;					 //显示十位数字

	P0=table[b2];
	smg3=0;
	delayms(3);				 //显示个位数字
	smg3=1;
}
void djsxse() //第二位数码管显示 E
     {
	P0=0x9b;			//第三位数码管显示E
    smg2=0;
    delayms(3);			   
    smg2=1;
	 }
void djsxs30() //第三位数码管显示 -
     {
	P0=0x80;			//第三位数码管显示-
    smg4=0;
    delayms(3);			   
    smg4=1;
	 }
void djsxs22() //4位数码管显示- - - -			 
 {	
 	P0=0x80;			//第一位数码管显示-
    smg1=0;
    delayms(3);
    smg1=1;
						
    P0=0x80;			//第二位数码管显示-
	smg4=0;
	delayms(3);
	smg4=1;
		
	P0=0x80;			//第三位数码管显示-
    smg2=0;
    delayms(3);			   
    smg2=1;

	P0=0x80;		    //第四位数码管显示-
	smg3=0;
	delayms(3);
	smg3=1;				  
}

void djsxs1()  //第一位数码管显示1
 {
	P0=table[1];	    //第一位数码管显示1
    smg1=0;
    delayms(3);
    smg1=1;				  

}
void djsxs2()  //第一位数码管显示2
 {
	P0=table[2];
    smg1=0;
    delayms(3);
    smg1=1;				//第一位数码管显示2

}
void djsxs3()  //第一位数码管显示3
 {
	P0=table[3];
    smg1=0;
    delayms(3);
    smg1=1;			  //第一位数码管显示3

}
void djsxs4()  //第一位数码管显示4
 {
	P0=table[4];
    smg1=0;
    delayms(3);
    smg1=1;			 //第一位数码管显示4

}
void djsxs5()  //第一位数码管显示5
 {
	P0=table[5];
    smg1=0;
    delayms(3);
    smg1=1;		   //第一位数码管显示5

}
void djsxs6()  //第一位数码管显示6
 {
	P0=table[6];
    smg1=0;
    delayms(3);
    smg1=1;			//第一位数码管显示6

}
void djsxs7()  //第一位数码管显示7
 {
	P0=table[7];
    smg1=0;
    delayms(3);
    smg1=1;		  //第一位数码管显示7
}
void djsxs8()  //第一位数码管显示8
 {
	P0=table[8];
    smg1=0;
    delayms(3);
    smg1=1;		 //第一位数码管显示8

}
void main()
{
	int djs1=10;			   //修改倒计时第一处,共两处
	Timer0_init();             //初始化定时器中断
	spk=0;delayms(500);spk=1; //蜂鸣器不响
	djs=10;		               //修改倒计时第二处,共两处



之后的请下载进行查看,注释非常的全

 

 

 

发布了364 篇原创文章 · 获赞 836 · 访问量 46万+
展开阅读全文

普中科技的51开发版00课程设计 抢答器

06-11

得不出结果 #include<reg52.h>#define uchar unsigned char #define uint unsigned int uchar num=0; //定义中断变量,num计满20表示1秒时间到 uchar num1; //十秒倒计时显示初始值 uchar flag1,flag2; //清零键及开始键按下标志位 uchar flag3,flag4; //定义键盘按下标志位 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管编码sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit sp=P1^5; //定义蜂鸣器端口 sbit start=P3^0; sbit clear=P3^1;sbit key3=P3^2;sbit key4=P3^3; //key1到key4为选手按键 void delay1(uint i){ while(i--); }void delay(uint z) { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); } void beep() { sp=~sp;delay1(10); //延时大约100us 通过修改此延时时间达到不同的发声效果}void display(uint i) { while(1){ LSA=0; LSB=0; LSC=0; P0=table[i]; delay(5); P0=0x00; }}void clr() //清零函数(主持人按下清零键后数码管显示0){ LSA=0; LSB=0; LSC=0; P0=table[0]; delay(5); LSA=1; LSB=1; LSC=1; P0=table[0]; delay(5); LSA=0; LSB=1; LSC=1; P0=table[0]; delay(5);}void dis30s() //十秒倒计时显示函数{ uchar shi,ge; shi=num1/30; ge=num1%30; while(1) { LSA=1; LSB=1; LSC=1; P0=table[shi]; delay(5); LSA=0; LSB=1; LSC=1; P0=table[ge]; delay(5); }}void player() //选手按键检测函数{ if(key3==0&&flag4==0) { delay(10); if(key3==0&&flag4==0) { display(3); TR0=0; flag1=flag2=0; flag4=1; beep(); while(!key3); } } if(key4==0&&flag4==0) { delay(10); if(key4==0&&flag4==0) { display(4); TR0=0; flag1=flag2=0; flag4=1; beep(); while(!key4); } }}void keyscan() //检测按键{ P3=P3|0x0f; if(clear==0&&flag2==0) //判断清零键,判断语句的作用是按下开始键清零键失效 { delay(10); if(clear==0&&flag2==0) { flag1=0; flag2=0; flag3=0; flag4=0; num=0; num1=10; clr(); //清零 flag1=1; //按下清零键标志位 } while(!clear); } if(flag1==1) //如果按下清零键 { if(start==0&&flag3==0) //判断开始键,判断语句的作用是按下开始键后开始键失效 { delay(10); if(start==0&&flag3==0) { flag2=1; flag3=1; while(!start); } } } if(flag2==1) //按下开始键 { TR0=1; //启动定时器0 dis30s(); player(); }}void main(){ TMOD=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。 TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1;//打开定时器0中断允许 EA=1;//打开总中断 while(1) //一直检测按键 { keyscan(); }}void T0_ser() interrupt 1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num==20) { num=0; num1--; } if(num1==0) { TR0=0; flag1=0; flag2=0; num=0; num1=30; clr(); beep(); }} 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览