基于51单片机的三人表决器设计.docx
《基于51单片机的三人表决器设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机的三人表决器设计.docx(29页珍藏版)》请在冰豆网上搜索。
![基于51单片机的三人表决器设计.docx](https://file1.bdocx.com/fileroot1/2023-2/1/cdd8f84a-b31a-4327-9140-fdc0c2308dc5/cdd8f84a-b31a-4327-9140-fdc0c2308dc51.gif)
基于51单片机的三人表决器设计
课程设计
学院:
电气工程学院
题目:
基于51单片机的表决器设计
起止时间:
2015年10月10日至2015年12月20日
2015年10月10日
课程设计任务书
学院:
电气工程学院
题目:
基于51单片机的表决器设计
起止时间:
2015年10月10日至2015年12月20日
2015年10月10日
一.课程设计内容
课程设计内容如下:
基于51单片机的表决器设计
1.功能要求
2.方案论证
3.系统硬件电路的设计
3.1单片机系统及外围电路
3.2液晶显示电路设计
3.3键盘电路设计
4.系统程序的设计
4.1液晶LCD屏的驱动程序
4.2主程序流程图
5.调试及性能分析
5.1调试
5.2性能指标
6.源程序清单
二.课程设计要求
1.课程设计报告写作请参考“课程设计报告写作的内容、要求与应注意的一些问题”。
所有的文档和表格必须采用Word形式,格式按照“课程设计报告写作的内容、要求与应注意的一些问题”要求。
2.设计报告中的电原理图,PCB图、元器件布局图必须采用自己画的图。
不能够抄袭别人的应用电路、程序、PCB图,必须自己完成,抄袭者和被抄袭者都不及格。
3.设计资料中的有关的公式可以直接采用。
设计资料中有关的曲线图可以直接采用,成文时根据需要选用(可放大300倍后裁剪到Word文档中),以图文清晰为标准。
4.英文资料中的图可以直接采用(可放大300倍后裁剪到Word文档中),图中的英文可以采用英文(中文)方式翻译在图下或者文章中。
5.英文资料中的一些词,如果翻译拿不准,可以采用英文(中文)方式标注。
6.课程设计报告需要写自己的收获和体会。
不能够抄袭别人的收获和体会,雷同者不及格。
7.每个人需要交文字稿和电子稿,采用2003Word(或者更高版本)文档形式。
三.课程设计进度(时间)安排
课程设计进度(时间)安排如下:
1.2015年10月10日—2015年10月15日理解课程设计题目的设计要求,查阅相关资料;
2.2015年10月16日—2015年11月15日完成各部分电路设计及系统调试;
3.2015年11月16日—2015年11月22日完成课程设计初稿;
4.2015年11月23日—2015年11月28日完成完整的课程设计报告;
5.2015年11月29日—2015年11月30日课程设计作品答辩。
四.参考文献
(1)黄智伟.凌阳单片机课程设计指导.北京:
北京航空航天大学出版社,2007
(2)周航慈.单片机程序设计基础.北京:
北京航空航天大学出版社,1997
(3)求实科技.单片机典型模块设计实例导航.北京:
人民邮电出版社,2004
(4)余永权.89系列(MCS-51)Flash单片机原理及应用.北京:
电子工业出版社,2003
(5)王幸之.单片机应用系统电磁干扰与抗干扰技术.北京:
北京航空航天大学出版社,2006
(6)黄智伟.全国大学生电子设计竞赛技能训练.北京:
北京航空航天大学出版社,2007
(7)黄智伟.印制电路板(PCB)设计技术与实践(第二版).北京:
电子工业出版社,2012
指导老师:
黄智伟
2015年10月10日
摘要:
表决器,是投票系统中的客户端,是一种代表投票或举手表决的表决装置。
表决时,与会的有关人员只要按动各自表决器上“赞成”、“反对”、“弃权”的某一按钮,荧光屏上即显示出表决结果。
目前,表决器可分为有线表决器和无线表决器两大类,其中有线表决器已经退出此项市场,而无线投票表决器无需安装,会议之前准备快捷,携带方便,适合各种固定或移动会场。
已成为市场主流。
本次设计的三人表决器,是投票系统中的客户端,是一种代表投票或举手表决的表决装置。
表决时,与会的有关人员只要按动各自表决器上“赞成”“反对”“弃权”的某一按钮,荧光屏上即显示出表决结果。
在三人表决器中三个人分别用按下K1、K2按键来表示自己的意愿,如果对某决议同意,各人就按下K1的一列按键,不同意就K2一列的按键。
表决结果用LCD屏幕显示,如果决议通过那么LCD屏幕显示“yes”;如果不通过那么显示“no”。
关键词:
AT89C51单片机;LCD1602屏幕;表决器;投票系统
Abstract:
Voting,thevotingsystemisaclient,arepresentativeofashowofhandsvoteorvotingdevices.Vote,aslongasthepersonconcernedispressedontherespectiveparticipatingvoting"yes","no","abstention"ofabutton,thescreenwillshowthevotingresults.Atpresent,thevotingcanbedividedintowiredandwirelessvotingvotingtwocategories,wherevotingisalreadywiredtoexitfromthismarket,andwirelessvotingdevicewithouthavingtoinstall,quicktopreparepriortothemeeting,andeasytocarry,suitableforavarietyoffixedormobilevenue.Ithasbecomethemarketmainstream.
Thedesignofthethreevoting,thevotingsystemisaclient,arepresentativeofashowofhandsvoteorvotingdevices.Vote,aslongasthepersonconcernedparticipantspressedoneachvoting"yes,""no""abstention"ofabutton,thescreenwillshowthevotingresults.InthreeofthevotingmachineinthreeindividualswereusingpressK1,K2buttontoexpresstheirwishes,ifyouagreetoaresolution,eachonacolumnofbuttonsispressedK1,K2doesnotagreeonalistofkeys.VotingresultsusingtheLCDscreendisplay,ifadoptedbythentheLCDscreendisplays"yes";ifnotbythenshow"no".
Keywords:
AT89C51MCULCD1602screenvotingmachinevotingsystem
1.绪论1
2.系统硬件电路的设计2
2.1单片机系统及外围电路2
2.21602字符液晶4
2.3键盘电路设计6
2.4液晶显示电路设计7
2.5系统电路图8
3.系统程序的设计8
3.1初始化显示程序9
4.调试及性能分析9
4.1开发环境介绍9
4.2设计流程图10
4.3系统调试10
5.总结11
参考文献12
附录13
1.绪论
电子表决系统是专门针对人大、政协、政府、企事业单位各类议案表决、民主评议、人事选举、测评打分、现场互动等需求而研制发布,系统采用无线通信技术,功能齐全,安全可靠,保密性强,操作简单,具有硬件设计高度可靠、按键投票保密性强、用户操作直观明了、产品功能多种多样等优点。
电子表决方式解决了以往举手表决所带来的弊端,使参会人员的意愿更加真实独立,即是对参会人员职权的尊重,又是对民主和法制的尊重。
同时,电子表决结果自动生成,节省了会议时间和人力,提高了会议效率。
与有线表决相比,无线电子表决系统在可靠性、安全性、以及易用性上更有优势,而且大幅度降低了会议成本,适合普及推广。
投票选择
若有选择问题的会议,某一问题有多个选项供大家选择,与会人员可按手持表决器的数字“1”至“9”,选择所支持的选项。
与会人员选择后,计算机可统计出各选项的得票数及百分数。
数字评分
用于人员工作成绩评定、投标评表、项目最终成果评定、干部考核评定选拔、招聘人员评定、知识竞赛等。
利用题库功能,根据具体要求首先输入相应需评定内容,然后与会人员对评定内容,进行打分评定。
对评分结果有多种计算方式,客户可设定,例如:
是否去掉最高分、最低分等。
民主评议
对工作人员的表现划分为:
“优秀”,“好”,“一般”,“差”,“很差”,利用题库功能,首先输入评定内容,可对某人的多项表现分别进行评定,无线手持表决器有对应“优秀”,“好”,“一般”,“差”,“很差”,按键。
本方案采用单片机设计一个三人表决器,具体要求满足以下条件:
1.要求采用51单片机作为微控制器;
2.通过一个1602LCD显示屏进行文字显示;
3.支持两键常规表决方式:
“赞成”、“反对”。
2.系统硬件电路的设计
硬件电路大致上可以分成单片机系统及外围电路、显示模块电路、系统控制电路三部分。
2.1单片机系统及外围电路
单片机采用MSC-51或其兼容系列芯片,采用24MHZ或更高频率晶振,以获得较高的刷新频率,时期显示更稳定。
单片机的串口与列驱动器相连,用来显示数据。
P1口低4位与行驱动器相连,送出行选信号;P1.5~P1.7口则用来发送控制信号。
P0口和P2口空着,在有必要的时候可以扩展系统的ROM和RAM。
图2-1AT89C51单片机最小系统
AT89C51单片机管脚说明如下:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.21602字符液晶
1602是字符型液晶,它是16*2的显示的。
工业字符型液晶,能够同时显示16x02即32个字符。
通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线,VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
图2-1是1602的16进制ASCII码表。
图2-21602的16进制ASCII码表
图2-31062字符液晶显示屏引脚说明
2.3键盘电路设计
在单片机应用系统中,一般都会设置键盘,主要为了控制运行状态,输入一些命令或数据,以完成特定的人机交互。
键盘是与单片机进行人机交互的最基本的途径,其以按键的形式来设置控制功能或输入数据,按键的输入状态本质上是一个开关量。
对于简单的开关量的输入可以采用独立式按键,这种方法接口简单,但占用单片机I/O端口资源较多。
对于输入参数较多、功能复杂的系统,需要采用矩阵式键盘进行输入控制。
本系统采用4*3矩阵式键盘,键盘连接方式如图5所示:
图5键盘电路
2.4液晶显示电路设计
液晶显示器(LCD)是一种功耗很低的显示器,它的使用非常广泛,比如电子表、计算器、数码相机、计算机的显示器和液晶电视等。
电子密码锁中需要显示的信息比较多,为了能直观的看到结果,并且为了设计显的美观,使用总线和排阻进行简化连接方式,本设计采用液晶显示屏LCD进行显示,具体连接方式如图6所示。
图6液晶显示电路
2.5系统电路图
图2-4整个电路系统硬件原理图
3.系统程序的设计
初始化模块:
对系统进行初始化,由于程序中有中断源,因此打开相应的中断也放在程序的初始化模块中;
检测开始按键:
检测开始按键是否被按下,按下则开始执行循环检测同意与反对按键,为消除按键抖动,此处需调用延时程序;
循环检测同意/反对按键:
循环检测同意与反对按键是否被按下,同时统计同意总数与反对总数,然后等待中断到来;
延时程序:
用于消除按键的机械抖动,调用0.5s的延时程序;
中断处理:
当中断源到来,将同意总数与反对总数进行比较,点亮对应的显示灯,并把数据传送到显示屏中;
从有利于实现较复杂的算法(显示效果处理)和有利于程序结构化考虑,显示驱动程序采用C语言编写。
3.1显示初始化程序
■voidLCD_Init(void)
■{
■LCD_Write_Com(0x38);/*显示模式设置*/
■DelayMs(5);
■LCD_Write_Com(0x38);
■DelayMs(5);
■LCD_Write_Com(0x38);
■DelayMs(5);
■LCD_Write_Com(0x38);
■LCD_Write_Com(0x08);/*显示关闭*/
■LCD_Write_Com(0x01);/*显示清屏*/
■LCD_Write_Com(0x06);/*显示光标移动设置*/
■DelayMs(5);
■LCD_Write_Com(0x0C);/*显示开及光标设置*/
■}
4.调试及性能分析
4.1开发环境介绍
程序编写采用KeilC51环境下调试,KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
4.2设计流程图
4.3系统调试
程序的编写过程:
1.根据软件的流程图中的各个模块的基本要求,先编写出模块程序,使其实现模块功能;然后根据流程图中各个模块之间的箭头方向将各个模块联系在一起,最后对对整体程序进行调节,直至调试运行后没有逻辑错误与警告;
2.将运行没有错误的程序导入模拟软件中进行仿真调试,首先发现不能实现预期的功能,于是对程序进行修改,直至调试成功,通过仿真能够实现预期的功能,则程序编写成功,可进行硬件电路的调试。
调试过程中出现的问题:
1、将所编程的的程序烧写在单片机8051芯片中,然后将其加入硬件电路中,然后进行调试,发现不能实现其功能。
2、调整后继续进行调试,结果还是不能实现预期的功能,当按下的同意键大于反对建时,液晶显示屏出来“YES”;但当按下的反对建大于同意键时,仍然出现“YES”;进一步对程序进行调试,后来发现是代码的算法有错误,修正算法之后,终于出现如期的性能。
5.总结
这次实训,主要实习任务是根据以前所学知识,设计单片机硬件电路,制作电路,自己编写汇编程序;并通过调试硬件电路和程序使其实现预期的功能。
这次实训让我真正的了解了单片机设计的基本设计理念,以及设计所需要掌握的一些基本概念。
同时更加巩固了我们所学习的知识,并将所学习的理论知识真正的应用于实践中。
我认为此次的实习对我是受益匪浅的,让我更加有了学习的动力。
当我所设计的电路经调试能够实现预期效果时,我的内心是无比的愉悦,虽然此次在调试过程中遇到了很多的问题,最终的结果页并不是那么理想,但我还是感觉很欣慰,因为这次实训让我了解到了平时学习中的不足,让我更谦虚的学习更多的知识。
虽然有很多地方是借鉴别人的,但我能够在调试过程中学到很多以前没有弄明白的问题以及相关知识点。
在这实训的二周里,说紧张却稍带着愉快的气氛,整个过程应该是充实的,时而惊喜,时而烦闷特别是最后调试阶段有一块调通了都会让我们高兴不已,当卡在某处时也确实是让人抓狂。
总之通过这次单片机实训,我们不但复习了过去所学,并且学到了一些新东西。
更重要的是通过这一次切身实践,才使我们真正将理论与实际结合起来,并且遇到了很多实实在在的需要我们亲自解决的问题。
通过解决这些问题,我们处理实际问题的能力有了很大提高,积累了我们的实践经验,以便为以后打下牢固的基础。
而这些才是我们作为一名工科学生最宝贵的财富。
参考文献
[1]郭建江.单片机技术与应用.东南大学出版社.
[2]张志良主编:
《单片机原理及控制技术》.北京:
机械工业出版社,2005
[3]李光飞编著:
《单片机课程设计实例指导》.北京:
北京航空航天出版社,
[4]吴金戍,沈庆阳,郭庭吉编著.8051单片机实践与应用.北京:
清华大学出版社.
[5]吉雷主编:
《Protel99从入门到精通》.西安:
西安电子科技大学出版社,2004.
[6]PaulF.Lister:
Single-chipmicrocomputers.Austin,Tex.:
MotorolaSemiconductorProducts,c1984
附录
程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitrs=P1^0;
sbitrw=P1^1;
sbitbeep=P2^3;
sbitlcden=P2^5;
sbitled3=P1^2;
sbitled4=P1^3;
sbitled5=P1^4;
sbitled6=P1^5;
sbitled7=P1^6;
sbitled8=P1^7;
bitok1,ok2,ok3,clear;
ucharpass,nopass,temp;
uchartable[]="yes";
uchartable1[]="no";
uchartable2[]="agree";
uchartable3[]="disagree";
uchartable4[]="";
uchartable5[]="";
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
rs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchardate)
{
rs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()
{
rw=0;
//uchara;
dula=0;
wela=0;
write_com(0x38);
delay(20);
write_com(0x0c);
delay(20);
write_com(0x06);
delay(20);
write_com(0x01);
delay(20);
}
voidyes()
{
uchara;
write_com(0x80+12);
delay(20);
for(a=0;a<3;a++)
{
write_date(table[a]);
delay(20);
}
}
voidno()
{
uchara;
write_com(0x80+0x40+12);
delay(20)