51单片机七人多数表决器仿真设计( proteus仿真+程序+报告+讲解视频)

仿真图proteus 7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0033

1.主要功能:

设计要求

采用51单片机作为核心控制器

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

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

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

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

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

​ 控制键:启动表决

​ 复位键:系统复位

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

资料下载链接(可点击):

【腾讯文档】S0033 网盘链接

https://docs.qq.com/doc/DS0hIRUl3T1B2bHNR

以下为本设计资料展示图:

2.仿真

开始仿真

点击开始按键后,蜂鸣器嘟一声,开始10秒倒计时。期间选手按下同意按键,对应选手的LED灯亮。

img

倒计时结束后数码管显示结果:通过、不通过,同意人数。

img

3.程序

img

部分代码

/********************************************************************

*********************************************************************/
#include <reg52.h>             //头文件
#define uchar unsigned char	   //宏定义无符号字符型
#define uint  unsigned  int	   //宏定义无符号整型
code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
sbit ST=P3^0;   //A/D启动转换信号
sbit OE=P3^1;   //数据输出允许信号
sbit EOC=P3^2;  //A/D转换结束信号
sbit CLK=P3^3;  //时钟脉冲  
sbit KEY=P2^7;
uint z,x,AD0809, date;	//定义数据类型
/******************************************************************
延时函数
******************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
   	 for(j=13;j>0;j--);
	 { ;
	 }
   }
}
/**********************************************************************
                数码管动态扫描
*********************************************************************/
void xianshi() //显示函数
 { 
    uint z,x;
    z=date%100/10;			 //求千位
    x=date%10;		 //求百位
    P3&=0x0f;
	  P0=seg7code[z]&0x7f;
	  P3|=0X10;
	  delay(80);
   
	  P3&=0X0f;  
    P0=seg7code[x];
	  P3|=0X20;
	  //delay(80);
  }
unsigned char  GetVoltage(unsigned char  ch)
{
  float temp;
  unsigned char value=0;
  P2=0xf0;
  P2|=ch;
  delay(1);
  ST=0;				//使采集信号为低
  delay(1);
  ST=1;				//开始数据转换
  delay(1);
  ST=0;				//停止数据转换
  delay(1);
  while(!EOC);		//等待数据转换完毕
  OE=1;				//允许数据输出信号
  delay(1);
  AD0809=P1;		    //读取数据
  OE=0;				//关闭数据输出允许信号
  temp=AD0809;
  temp=temp*19.531f;  //计算出电压值(19.531=5000mv除以AD的位数值256=5000/256)
  value=temp/100;//为了方便显示 进行缩小 转换成整形 比如实际电压1.5V 1500mv/100=15 15在的十位显示的时候作为电压的整数位 个位作为小数位
  return value;
}
void Timer0Init(void)		//20毫秒@12.000MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0xE0;		//设置定时初值
	TH0 = 0xB1;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
  ET0=1;
  EA=1;
}
/*************************************************************************
                                主函数	
**************************************************************************/
  unsigned char count=0;
 void main()
{ 
  KEY=1;
  Timer0Init();
  while(1)			   //无限循环
  {
    if(KEY==0)
    {
      date=GetVoltage(0);		//数码管显示的数据值,其中20为采集数据的毫安值
    }
    else
    {
      date=GetVoltage(count);//采集第count路AD值
      
    }
    xianshi();			//数码管显示函数
  }
}	

4.设计报告

报告格式规范,字数6141,含各种框图。

img

一 绪论

电子表决系统是专门针对人大、政协、政府、企事业单位各类议案表决、民主评议、人事选举、测评打分、现场互动等需求而研制发布,系统采用无线通信技术,功能齐全,安全可靠,保密性强,操作简单,具有硬件设计高度可靠、按键投票保密性强、用户操作直观明了、产品功能多种多样等优点。电子表决方式解决了以往举手表决所带来的弊端,使参会人员的意愿更加真实独立,即是对参会人员职权的尊重,又是对民主和法制的尊重。同时,电子表决结果自动生成节省了会议时间和人力,提高了会议效率。

(1)投票选择

若有选择问题的会议,某一问题有多个选项供大家选择,与会人员可按手持表决器的数字 “1”至“9”,选择所支持的选项。 与会人员选择后, 计算机可统计出各选项的得票数及百分数。

(2)数字评分

用于人员工作成绩评定、投标评表、项目最终成果评定、干部考核评定选拔、招聘人员评定、知识竞赛等。利用题库功能,根据具体要求首先输入相应需评定内容,然后与会人员对评定内容,进行打分评定。对评分结果有多种计算方式,客户可设定,例如 :是否去掉最高分、最低分等。

(3)民主评议

对工作人员的表现划分为: “优秀”,“好”,“一般”,“差”,“很差”,利用题库功能,首先输入评定内容,可对某人的多项表现分别进行评定,无线手持表决器有对应 “优秀”,“好”,“一般”, “差”,“很差”,按键。

本方案采用单片机设计一个多路定时表决器,要求其具有指示表决开始、指示表决结束、显示表决人数、显示表决结果、显示表决倒计时时间、结束指示等功能,具体要求满足以下条件:

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

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

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

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

(5)设主持人控制键、暂停键、复位键。控制键:启动表决,暂停键:暂停表决,复位键:系统复位。

(6)支持表决的人,则其对的LED就发光

(7)表决开始采用声音提示。

二 方案论证

表决器的实现主要涉及开始表决的控制、表决的方案、状态的指示、倒计时时间和表决同意人数及表决是否通过的显示。首先,倒计时时间与表决同意人数及表决是否通过的显示,可使用液晶屏或者数码管来实现,倒计时时间为 10s,表决人数为7人,则一共需要显示4位数,使用数码管比较简便。一般选用七段数码管显示器,其应用简单、可靠性高、成本低,可用于显示输出。由于有4位数字需要显示,可以直接使用一个4位数码管。

数码管可使用静态或者动态显示,很明显,动态显示能够满足本设计的需求。段选与位选信号可由单片机的I/O口直接提供,或者可使用锁存器间接获得。只要单片机的驱动电流足够,便可以直接控制数码管,但这样会占用很多单片机的端口,也可以使用锁存器既能节约单片机端口,又能增加驱动电流,选择使用锁存器驱动数码管,这样也可简化软件编程。状态指示包括显示当前处于表决的哪个环节,以及哪位表决人成功等提示,可选用蜂鸣器、发光二极管等来指示,发光二极管更能持续、鲜明地指示当前状态,因此选择使用发光二极管来指示当前状态。抢答开始或结束的开关,以及表决人表决设备均可使用按键,这样比较简单方便。整个方案中使用了很多的I/O口,并且系统的逻辑比较复杂,整个系统的软件设计可采用查询的方式,由各函数完成各自的功能。

综上所述,本设计采用单片机最小系统,采用程序查询方式,采用动态显示组号。在应用场景中,由主持人控制表决开关模块,按下开始键之后开始表决。表决人使用表决按键进行表决,显示模块显示表决阶段倒计时时间和表决同意的数及表决的最终结果,在此过程中,状态指示模块的指示灯对表决的阶段以及表决成功的人进行指示。主持人按下复位键便可重新进入准备阶段。表决器的系统框图如图2-1所示。

img

5.资料清单(提供资料清单所有文件):

img

资料下载链接(可点击):

https://docs.qq.com/doc/DS0hIRUl3T1B2bHNR

更多资源 点击下方链接:

https://docs.qq.com/sheet/DS0xIa0llTmtNakRW

微信公众号:嘉盛单片机

img