单片机课程设计报告书
课题名称 投票统计器设计
姓 名 王文祺 学 号 20117299 院、系、部 电气工程系 专 业 电气工程及其自动化
指导教师
李磊
2014年6月26日
※※※※※※※※※ ※※ ※※ ※※ ※
※※※※※※※※
2011级
单片机课程设计
投票统计器设计
一、设计目的
(1)以单片机为基础设计投票统计器。
(2) 熟练掌握各个接口芯片(如STC89C52、74HC573)的功能特性及接口方法。
(3) 熟练掌握C语言汇编过程及keil C汇编环境。
(4)熟练掌握protel 99 se绘图,并熟练掌握各引脚焊接技术。
二、设计要求
(1)每个人有同意、不同意、弃权三个按键,单片机分别统计三种键的人数,并用动态显示方式显示投票结果。
(2)每人仅能投一次票,再投则无效。
(3)可显示同意、不同意、弃权的数量。
(4)设有复位键。
(5)要求做出实物。
三、硬件电路设计
3.1系统结构框图
投票统计器主要由按键、89C52单片机、数码管等组成,系统由按键来确定同意、否决,89C52单片机处理数据并将要显示数据发送,数码管显示数据。
系统结构图如图3-1。
按键输入
(同意)
89C52单片机数码管
按键输入
(否决)
图3-1 系统结构图
3.2 STC89C52单片机介绍
图3-2 STC89C52控制电路图
其工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz。
用户应用程序空间4K ROM。
片上集成512字节RAM。
它利用ISP技术写入程序,开发方便。
内部RSM用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;ROM用以存放程序、一些原始数据和表格;I/O口为四个8位并行I/O口,既可以做输入,也可以做输出。
复位电路的原理是单片机RST引脚接收2us以上的电平信号只要保证电容充放电时间大于2us,即可实现复位。
按键按下系统复位,是当按键按下使电容处于短路电路中,电阻两端电压增加,使单片机又接收一个高电平,实现复位。
89C52单片机总共40个引脚,电源用2个(VCC和GND),晶振用2个晶振频率为12Mhz,复位1个,EA/Vpp用1个,29引脚PSEN和30引脚ALE位外扩数据/程序存储器时才有特定用处,还有四个P端口,每个端口各有8个引脚。
其控制电路如图3-2所示。
3.3按键扫描电路
本实验设计6个独立按键,两个按键为一组,分为同意、否决两按键,当两键都不按时为弃权,按键一端常接低电平,当按键按下时为低电平。
按键电路如图3-3所示。
图3-3 按键电路
3.4数码管显示电路
数码管显示电路如图3-4所示。
图3-4 数码管显示电路
4位一体数码管要正常显示,就要通过驱动电路来驱动各个段码及位码,从而准确显示数字及数字位置,本设计通过两个74HC573锁存器来实现控制,一个控制数码管位码一个控制数码管段码,从而来实现数码管的准确显示。
3.5系统电路图设计
硬件如下:80C51主芯片一个、数码管锁存器573两个、4位显示的数码管一个、6独立键盘、晶振电路、复位电路。
电路图如图3-5。
使用说明:
首先接通电源,按下开关键,电源指示灯亮方可使用。
本实验设计6个独立按键,两个按键为一组,分为同意、否决两按键,当两键都不按时为弃权,每当有人投票时,4位数码管的显示会同时刷新,从左到右依次显示弃权人数、否决人数、同意人数。
每人只能投票一次,再投则无效。
按下复位键后可重新投票统计,循环使用。
接通电源后,如果没有按键,则数码管显示弃权人数即投票总人数,显示为300。
当投票结束后,最左端数码管显示投弃权票的人数,第二个数码管显示投反对票的人数,最右端数码管显示投同意票的人数,三个数字之和等于投票总人数3。
如果某组有两个键按下时,先按下的有效。
按下复位键后,数码管重新显示为300,即可以重新投票。
系统电路图如图3-5所示:
图3-5 系统电路图
四、程序流程图设计
程序流程图如图4-1所示,其设计流程分析为,通过判断按键是否为低电平来确定按键是否按下。
以按键1(同意)按键2(否决)为例,判断按键1是否按下,当按键1按下后,判断按键1标志num4是否为0,如果为0,则同意人数num1加1,同时标志位num4加1,弃权人数num3减1。
然后单片机送出相应显示数据,同理当按键2按下时,判断按键2标志位num4是否为0,如果为0,则否决人数num2加1,标志位num4加1,弃权人数num3减1。
单片机送出相应显示数据。
按键1,、按键2为同一标志位num4,则为一组当按下其中一个时即投票后标志位num4加1,则按键1、按键2锁定再按无效。
图4-1 程序流程图
五、程序设计
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit whel=P2^0; //设定各引脚
sbit wudl=P2^1;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;
sbit key6=P3^5;
unsigned char const
table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567
unsigned char code seg[]={0xfe,0xfd,0xfb}; //显示位码值
uchar num1=0;uchar num2=0;uchar num3=3;uchar num4=0;uchar num5=0;uchar num6=0; //定义各变量
void delay(uint z)
for (x=z; x>0; x--)
for (y=110; y>0; y--);
}
void main() //主函数
{while(1)
{
if (key1==0) //判断按键1是否按下
{if(num4==0) //判断按键1标志位是否为0 {
{ num1++;
num4++;
num3--;
}
}
}
if (key3==0)
{if (num5==0)
{ num1++;
num5++;
num3--;
}
}
if(key5==0)
{if (num6==0)
{num1++;
num6++;
num3--;
}
}
if(key2==0)
{if (num4==0)
{num2++;
num4++;
num3--;
}
}
if(key4==0)
{ if (num5==0)
{num2++;
num5++;
num3--;
}
}
{ if (num6==0)
{num2++;
num6++;
num3--;
}
}
delay(5);
whel=1; //开放位码锁存器
wudl=0; //锁闭段码锁存器
P1=seg[0]; //送位码
whel=0; //锁闭位码锁存器
wudl=1; //开放段码锁存器
P1=table[num1]; //送段码
delay(10);
whel=1;
wudl=0;
P1=seg[1];
whel=0;
wudl=1;
P1=table[num2];
delay(10);
whel=1;
wudl=0;
P1=seg[2];
whel=0;
wudl=1;
P1=table[num3];
}
}
end;
六、设计总结
通过本次课程设计,实现了投票统计器的基本功能,本投票统计器通过6个独立按键,两个按键为一组一共3人投票,实现每人只能投票一次,同时数码管显示同意人数,否决人数,弃权人数。
当投票结束时,通过复位键来重新复位循环使用。
在焊接过程中要极为注意芯片引脚之间不要串联,在焊接74HC573过程中应注意不要将芯片插于底座上焊接。
在焊接数码管过程中要注意分清数码管引脚功能千万不可焊接错误。
在焊接4脚开关过程中应注意分清常开常闭引脚千万不可焊接错误,焊接过程中注意分清主板正反。
通过C语言汇编掌握了keil
C软件及下载软件的使用方法。
通过本次课程设计实现了投票统计器,在设计过程中遇到了许多困难难,但是通过询问老师和同学的帮助和自己的努力,克服了困难,通过这次课程设计使我不仅对单片机有了更深的了解而且在焊接技术方面有了较大的提高。
七、参考文献
[1] 高峰.单片微型计算机原理与接口技术.科学出版社,2007
[2] 潘永雄.电子线路CAD实用教程.西安电子科技大学社,2001
[3] 朱定华.单片微机原理与应用.北京交通大学出版社,2007
[4] 彭介华.电子技术课程设计指导.高等教育出版社,1997。