本设计是基于AT89C51设计的班级投票器。它可实现最多班级人数99个,最多职位候选人10个的投票选举。由键盘接口专用芯片74C922完成按键扫描编码工作,再通过AT89C51芯片来采集信息,完成票数统计任务,并有四联数码管显示相应的数字(投票期间显示选民编号和所选候选人的编号,查看结果时显示候选人的编号及其得票数)。同时有LED和允许投票按键来控制投票的有效性。可以在投票期间或投票结束时利用上下翻查键可以查看投票结果。而班级投票器主要用来满足平常班级职位等选举,它可以较大地提高班级职位选举的效率,同时更加突出了选举的公平,公开。
本设计需改进的地方,首先,可以增设一个弃权键和一个用于显示最后投票选举的结果的按键,使得投票系统更加的完善。其次,本次设计的投票器是基于班级设计,考虑到实际中班级投票的情况,设计时最多候选人人数为10人,以满足班级日常选举。可进一步增大候选人人数,来完善投票系统,使其更大范围的选举。再有,若显示时编号可配合人名等资料显示,会使得显示结果更加的直观;最后,可以进一步的改善,实现直接手动调节相关按键便可设置最大班级人数,而不需要通过软件修改来完成。
附录 1、PCB图
2、源程序
#include \sbit LED =P2^4; sbit P2_0 = P2^0; sbit P2_1 = P2^1; sbit P2_3 = P2^3; sbit P2_2 = P2^2;
sbit P3_3 = P3^3; unsigned char key=0;
#define max_xuanmin 45 //最多选民数量 unsigned char beixuan[11];//选手选票数
16
unsigned char xuanmin=1;//选民编号
unsigned char present=1;//目前这个被选者,用于显示整体选票 unsigned char ledout[4]; //显示数据
unsigned char code led1[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x27,0x7f,0x6f}; unsigned char cs=0;
unsigned char flash_cs=0; bit ok=0;//投票输入OK bit intbit=0;
void delay(unsigned int time) {
unsigned int mm; for(mm=0;mm