课程设计题二:7人多数表决器

要求:

1、7人多数表决逻辑:多数通过。

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

3、采用数码管显示表决10秒倒计时。

4、表决结束后用发光二极管及数码管显示表决结果,数码管显示结果:通过、不通过,同意人数。

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

           控制键:启动表决

           复位键:系统复位

6、表决开始、结束采用声音提示。

获取该 程序+protues 的方式:

1、CSDN下载:

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

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

     ① 关注微信公众号:Tech云  

     ②

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

一、Protues仿真图:

课程设计题二:7人多数表决器_第1张图片

课程设计题二:7人多数表决器_第2张图片

课程设计题二:7人多数表决器_第3张图片

课程设计题二:7人多数表决器_第4张图片

二、程序源码:

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

/*******************************************************************************
================================================================================
【平    台】STC89C51_sumjess平台
【编    写】sumjess
【E-mail  】[email protected]
【软件版本】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
#include


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

sbit keyks=P2^2;	//定义开始按键
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 spk=P1^0;		//定义蜂鸣器

int djs,js=0;    	//djs和bt是初始倒计时时间	
//flag1~7用来保证在未开始表决之前误按   flagD用来控制是否显示倒计时  bjs表决计数
int flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,flag7=0,flagD=0,bjs=0;	 
int table[]={0x5f,0x44,0x9d,0xd5,0xc6,0xd3,0xdb,0x45,0xdf,0xd7,0x80,0x9b};
		  //   0    1   2    3    4    5    6     7	  8     9		  E
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(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 djsxs10() //第一位数码管显示 0
{
 	P0=0x5f;			//第一位数码管显示0
    smg1=0;
    delayms(3);
    smg1=1;
}
void djsxs11() //第一位数码管显示1
{
 	P0=0x44;			//第一位数码管显示1
    smg1=0;
    delayms(3);
    smg1=1;
}
void djsxs20() //第二位数码管显示 -
{
	P0=0x80;			//第二位数码管显示-
	smg4=0;
	delayms(3);			   
	smg4=1;
}
void djsxs30() //第三位数码管显示 -
{
	P0=0x80;			//第三位数码管显示-
	smg2=0;
	delayms(3);			   
	smg2=1;
}
void djsxs0()  //第四位数码管显示0
{
	P0=table[0];
    smg3=0;
    delayms(3);
    smg3=1;		 //第四位数码管显示0

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

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

}



----由于篇幅的问题,只显示一部分,请下载后自行观看,程序非常的全-----
-----关注公众号免费下载-----

 

 

你可能感兴趣的:(北京交通大学海滨学院单片机课设,STC51精通+项目,7人多数表决器,数码管显示,发光二极管,按键扫描,蜂鸣器)