×
单片机 > 其他资讯 > 详情

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

发布时间:2020-06-19 发布时间:
|

要求:


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


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


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


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


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


           控制键:启动表决


           复位键:系统复位


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


一、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

#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

 

}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
详解漏电保护器的工作原理