基于单片机的班级投票器(4)

2019-04-14 23:13

本设计是基于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

void led_init(void) {

unsigned char n; for(n=0;n<=9;n++) beixuan[n]=0; LED=1; ok=0;

}

/*********************************************************************************** ****************************进行数据转换******************************************** ************************************************************************************/ void change_led(unsigned char xuan,unsigned char value) {

unsigned char x,change; x=xuan;

change=x/100; x=xuan;

ledout[3]=x/10-change*10;

x=xuan;

ledout[2]=(unsigned char)(x-change*100-ledout[3]*10); x=value;

change=x/100; x=value;

ledout[1]=x/10-change*10; x=value;

ledout[0]=(unsigned char)(x-change*100-ledout[1]*10); }

/*********************************************************************************** ************外部中断1的入口********************************************************* ************************************************************************************/ int1_in() interrupt 2 using 3

17

{

LED=0;

}

/*********************************************************************************** **************************外部中断0的入口****************************************** ************************************************************************************/ int0_in() interrupt 0 using 3 { key=0; if(P2_0==1) {

key=key+1; }

if(P2_1==1) {

key= key+2; }

if(P2_2 ==1) {

key= key+4; }

if(P2_3==1) {

key= key+8; }

key=key+1; intbit=1; }

/*************************************************************************************** *****************************定时1的入口********************************************** ***************************************************************************************/ Time1() interrupt 3 using 3 {

unsigned char bb; flash_cs++;

if( flash_cs==10)//每隔10个定时中断换一个数据 { if(cs==0) P0=0xff-8; if(cs==1) P0=0xff-4; if(cs==2) P0=0xfd; if(cs==3) P0=0xfe; flash_cs=0;

18

bb=ledout[cs]; P1=led1[bb]; if(cs!=3) cs++; else cs = 0; } }

/*********************************************************************************** **********************************主函数******************************************** ************************************************************************************/ void main() { EX0=1; IT0=1; EX1=1; IT1=1;

ET1=1;

TMOD=0x20;//采用定时器1的第二种工作方式 TL1=0x00; TH1=0x11; TR1=1; EA=1; led_init();

change_led(0,0);

for(;;)//整个系统进入死循环 {

if(intbit) {

if(key>0 && key<=10 && ok==0 && LED==0) {

change_led(xuanmin,key);

beixuan[key]++;//被投的那个人选票+1 xuanmin++; LED=1;

key=0; if(xuanmin == max_xuanmin+1)

{

xuanmin=1; ok=1;

} }

//进行上翻 if( key ==11) {

key=0;

19

if(present!= 10) {

present++;

change_led(present,beixuan[present]); } }

//进行下翻

if( key ==12) { key=0; if(present!= 1) {

present--;

change_led(present,beixuan[present]); } } intbit=0; } } }

MM74C922 16键编码器

整体介绍

MM74C922 CMOS键盘编码器提供所有必要的逻辑来将所有SPST按键编码成一个矩阵。 键盘扫描可以由外部时钟或者外部电容器来实现。这些编码器也拥有片上上拉装置,它最大允许上拉50 k?的电阻按键。按键矩阵中没有二极管,它需要消除按键的抖动。内部去抖动电路仅仅需要一个外部的电容器,若缺失这个电容器就无法完成消抖。当一个按键有效按下时,就会有一个相应的数据有效输出一个高电平。当这个按键放开时,相应的数据有效输出返回到低电平,即使这个时候有另一个按键按下。经过一个正常的的削抖周期,有新的按键有效按下时,数据有效输出重新返回高电平。一个内部寄存器将记忆最后一个按键按下,甚至在这个按键释放了之后。这种三态输出可用做简单的扩展和总线的操作,并且与LPTTL兼容。

特性

·最大的开关电阻为50 k? ·开关时钟芯片 ·片上有上拉装置 ·二键锁定

·一个电容消除按键抖动 ·输出保留最后一个按键按下 ·三态输出并与LPTTL兼容 ·工作电压范围:3—15V ·低功耗

20


基于单片机的班级投票器(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新研究发现特定受体可影响脂肪代谢

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: