历史上的今天
今天是:2024年09月29日(星期日)
2019年09月29日 | 课程设计题二:7人多数表决器
2019-09-29 来源:eefocus
要求:
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 }
上一篇:课程设计题三:日历和数字钟
史海拾趣
|
1)高频三极管V1和电容C3、C5、C6组成一个电容三点式的振荡器 2)C4、L组成一个谐振器:谐振频率就是调频话筒的发射频率,根据图中元件的参数发射频率可以在88~108MHZ之间,正好覆盖调频收音机的接收频率,通过调整L的数值(拉伸或者压缩线 ...… 查看全部问答> |
|
写一个用RAS拨号连接的程序,连接成功了,但是中间状态显示有问题, LRESULT CGPRSDlg::WindowProc(UINT mesaage,WPARAM wParam,LPARAM lParam) { if (mesaage==WM_RASDIALEVENT) {   ...… 查看全部问答> |
|
对ADS不是很熟悉,以前用Keil的时候可以软件仿真直接查看设定频率下延时函数的延时时间,但不知道ADS下是怎么看的,比如主频是60M,那下面这段延时函数的延时时间是多少呢?太菜了,还问这么低级的问题。取t=1情况计算。谢谢了!ARM7内核 void Del ...… 查看全部问答> |
|
我在驱动里面hook了NTSTATUS NtTerminateProcess( IN HANDLE ProcessHandle OPTIONAL, IN NTSTATUS ExitStatus)这个函数 我用下面代码能够打印出来进程名, char output[15]; ResultStatus = ObReferenceObjectBy ...… 查看全部问答> |
|
为更丰富本次DIY数控电源的活动,又恰逢站方推出430铁电实验板的团购,为让更多的网友能够参与到本次活动中,现征集DIY数控实验电源的显示面板设计,本面板独立于电源本身,只是一个显示操控装置,与电源板通过串口互联,用协议和指令控制电源板的 ...… 查看全部问答> |
|
013 8050 8550三极管作开关用时频率可达到多大0分 如题,我要用单片机io产生的pwm控制一个大功率led的亮度,用三极管做一个简单的驱动电路,大家有什么好建议… 查看全部问答> |




