基于51单片机的投票统计器
立即下载
资源介绍:
基于51单片机的投票统计器是一个实用且有趣的项目,它可以应用于各种场合,比如会议中的快速投票或课堂上的即时反馈系统。以下是一些关键点,可以快速构建系统:
软件编写:
定时器配置:配置定时器工作模式和中断。
按键检测:编写函数来检测按键是否被按下。
结果显示:编写函数更新显示屏的内容。
测试调试:先单独测试每个部分,然后整体测试。
#include "reg52.h"
#include "lcd.h"
// 1#投票
sbit ty_1=P3^1;
sbit qq_1=P3^0;
sbit bty_1=P3^2;
// 2#投票
sbit ty_2=P3^3;
sbit qq_2=P1^0;
sbit bty_2=P1^1;
// 3#投票
sbit ty_3=P1^2;
sbit qq_3=P1^3;
sbit bty_3=P1^4;
sbit beep=P1^5;
unsigned int ty=0,bty=0,qq=0; //同意/不同/意弃权人数
unsigned int tp_1=0,tp_2=0,tp_3=0;
void delay_us(unsigned long us) //延时子程序 us
{
while(us--);
}
void lcd_display()
{
LCD_Write_String(0,1,"TY");
LCD_Write_Char(2,1,ty%10+'0');
LCD_Write_String(4,1,"BTY");
LCD_Write_Char(7,1,bty%10+'0');
LCD_Write_String(9,1,"QQ");
LCD_Write_Char(11,1,qq%10+'0');
}
void key()
{
if(tp_1==0) //1#
{
if(ty_1==0&&qq_1==1&&bty_1==1) //1#同意
{
delay_us(2);
if(ty_1==0&&qq_1==1&&bty_1==1)
{
ty=ty+1;
}
tp_1=1;
}
if(ty_1==1&&qq_1==0&&bty_1==1) //1#弃权
{
delay_us(2);
if(ty_1==1&&qq_1==0&&bty_1==1)
{
qq=qq+1;
}
tp_1=1;
}
if(ty_1==1&&qq_1==1&&bty_1==0) //1#不同意
{
delay_us(2);
if(ty_1==1&&qq_1==1&&bty_1==0)
{
bty=bty+1;
}
tp_1=1;
}
}
if(tp_2==0) //2#
{
if(ty_2==0&&qq_2==1&&bty_2==1) //1#同意
{
delay_us(2);
if(ty_2==0&&qq_2==1&&bty_2==1)
{
ty=ty+1;
}
tp_2=1;
}
if(ty_2==1&&qq_2==0&&bty_2==1) //1#弃权
{
delay_us(2);
if(ty_2==1&&qq_2==0&&bty_2==1)
{
qq=qq+1;
}
tp_2=1;
}
if(ty_2==1&&qq_2==1&&bty_2==0) //1#不同意
{
delay_us(2);
if(ty_2==1&&qq_2==1&&bty_2==0)
{
bty=bty+1;
}
tp_2=1;
}
}
if(tp_3==0) //1#
{
if(ty_3==0&&qq_3==1&&bty_3==1) //1#同意
{
delay_us(2);
if(ty_3==0&&qq_3==1&&bty_3==1)
{
ty=ty+1;
}
tp_3=1;
}
if(ty_3==1&&qq_3==0&&bty_3==1) //1#弃权
{
delay_us(2);
if(ty_3==1&&qq_3==0&&bty_3==1)
{
qq=qq+1;
}
tp_3=1;
}
if(ty_3==1&&qq_3==1&&bty_3==0) //1#不同意
{
delay_us(2);
if(ty_3==1&&qq_3==1&&bty_3==0)
{
bty=bty+1;
}
tp_3=1;
}
}
}
void ql()
{
if(qq_1==0&&bty_1==0)
{
delay_us(2);
if(qq_1==0&&bty_1==0)
{
ty=bty=qq=tp_1=tp_2=tp_3=0;
}
while(qq_1==0||bty_1==0);
}
}
void main()
{
LCD_Init(); //显示器初始化
LCD_Clear();//清屏
LCD_Write_String(0,0,"Voting Statistician");
while(1)
{
lcd_display();
key();
ql();
beep=0;
}
}