• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的7人表决器设计

04/28 08:51
981
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

单片机仿真设计合集资料获取.pdf

共1个文件

资料清单:C程序+仿真+设计报告+使用说明+元件清单+操作视频

仿真版本:Proteus8.6及以上版本

程序编译:Keil5 C51

编程语言:C语言

设计编号:【X04】

1.? 简介

? 本文提出了一种基于51单片机的7人表决器设计。本系统由AT89C51单片机为控制核心,要求其具有指示表决开始、指示表决结束、显示表决人数、显示表决结果、显示表决倒计时时间、结束指示等功能。

2.? 主要功能

a.支持数码管显示表决结果,表决通过显示“1”,不通过显示“0”。

b.支持按键实现开始、暂停、复位等操作。

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

d.支持表决的人,对应的LED灯发光。

3.? 源程序(Keil5)

本设计采用keil5 C51软件(内附安装包)实现程序设计。如需用keil4打开程序,可自行通过.c和.h文件新建工程即可。

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^0;		//定义1号表决人	 
sbit key2=P1^1;		//定义2号表决人
sbit key3=P1^2;		//定义3号表决人
sbit key4=P1^3;		//定义4号表决人
sbit key5=P1^4;		//定义5号表决人
sbit key6=P1^5;		//定义6号表决人
sbit key7=P1^6;		//定义7号表决人

sbit l1=P3^0;		//定义第1灯
sbit l2=P3^1;		//定义第2灯
sbit l3=P3^2;		//定义第3灯
sbit l4=P3^3;		//定义第4灯
sbit l5=P3^4;		//定义第5灯
sbit l6=P3^5;		//定义第6灯
sbit l7=P3^6;		//定义第7灯

sbit zt=P2^1;   //定义暂停
sbit spk=P1^7;		//定义蜂鸣器

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(unsigned z)	 
{
	unsigned 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

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

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

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

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

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

4.? 仿真proteus8.6

? 本设计采用proteus8.6软件(内附安装包)实现仿真设计,如下图所示。proteus软件一般存在高低版本兼容问题,该仿真是通过proteus8.6导出的,所以请尽量使用proteus8.6打开文件,低于proteus8.6的版本不能够正常使用,高于proteus8.6的版本除了proteus8.8/8.9理论上可以正常使用。

表决通过:

表决失败:

5.? 设计报告

设计报告主要包括硬件电路、软件设计、仿真调试等等,仅供参考

6.? 资料清单

设计资料主要包括C程序+仿真+设计报告+使用说明+元件清单+操作视频等。

7.? 资料获取链接

百度网盘下载链接:【X04】百度网盘下载链接

更多单片机仿真设计合集:单片机仿真设计合集

  • 单片机仿真设计合集资料获取.pdf
    下载

相关推荐