单片机课程设计说明书课题:班级投票显示器专业:测控技术与仪器班级:机122-1:许铎学号:201256502116指导老师:王东兴组员:贺茂森、段亚东、王向东大学机电汽车工程学院目录第一章设计任务和容 (3)1.1 设计任务 (3)1.2 设计要求 (3)1.3 设计容 (3)第二章电路设计 (4)2.1 总体设计 (4)2.2 详细设计 (5)2.2.1 单片机引脚功能 (5)2.2.3时钟电路 (6)2.2.4复位电路 (7)2.2.5 数码管显示电路 (8)第三章程序设计与仿真 (10)3.1 投票显示系统总体功能实现 (10)2.2 系统流程图 (11)3.3 程序编写 (13)3.4 仿真与调试 (15)第四章总结和未来改进构想 (21)第一章设计任务和容1.1 设计任务分组按照选定题目的设计任务,设计各种单片机应用系统,设计工作量至少要包含:(1)用MCS-51单片机,12MHz时钟,常规的上电和手动复位电路;(2)3个以上的按键;(3)LED或/和数码管或/和LCD显示及其接口;(4)至少2路输入信号,可以是模拟量或数字量。
1.2 设计要求(1)设计一个投票系统,具有计票显示功能;(2)可实现6人同时进行投票,累计票数在显示器上显示;(3)主持人使用一个按键开关控制开始投票,终止投票和清零;(4)投票开始后每人能且仅能投一次票,多投无效;1.3 设计容(1)编写项目功能说明书,确定应用系统的功能和具体参数;(2)设计电路原理图;(3)编写C语言源程序,程序中加注必要的注解说明;(4)实物制作与调试;(5)编写设计说明书。
第二章电路设计2.1 总体设计整个设计以AT89C51单片机为核心,点触开关控制信号通过单片机I/O口,单片机处理信号并将结果通过LED数码管显示,最终按键复位单片机。
总体设计如下图。
2.2 详细设计2.2.1 单片机引脚功能·P0口 8位、漏极开路的双向I/O 口。
当使用片外存储器及外扩I/O 口时,P0口作为低字节地址/数据复用线。
在编程时,P0口可用于接收指令代码字节;程序校验时,可输出指令字节。
P0口也可做通用I/O 口使用,但需加上拉电阻。
作为普通输入时,应输出锁存器配置1。
·P1口 8位、准双向I/O 口,具有部上拉电阻。
P1口是为用户准备的I/O双向口。
在编程和校验时,可用作输入低8位地址。
用作输入时,应先将输出锁存器置1。
·P2口8位、准双向I/O口,具有部上拉电阻。
当使用外存储器或外扩I/O口时,P2口输出高8位地址。
在编程和校验时,P2口接收高字节地址和某些控制信号。
·P3口8位、准双向I/O口,具有部上拉电阻。
P3口可作为普通I/O口。
用作输入时,应先将输出锁存器置1。
在编程/校验时,P3口接收某些控制信号。
·RST 复位输入信号,高电平有效。
·EA/VPP外部程序存储器访问允许信号EA.当EA信号接地时,对ROM的读操作限定在外部程序存储器,地址为0000H-FFFFH;当EA接VCC时,对ROM 的读操作从部程序存储器开始,并可延续至外部程序存储器。
·PSEN 片外程序存储器读选通信号PSEN,低电平有效。
在片外程序存储器取指期间,当PSEN有效时,程序存储器的容被送至P0口;在访问外部RAM 时,PSEN 无效。
·ALE/PROG低字节锁存信号ALE.在系统扩展时,ALE的下降沿将P0口输出的低8位地址锁存在外接的地址锁存器中,以实现低字节地址和数据的分时传送。
·XTAL1 片振荡器反向放大器和时钟发生线路的输入端。
·XTAL2 片振荡器反相放大器和时钟发生线路的输出端。
2.2.3时钟电路51系列单片机的时钟信号产生通常有两种方式,部时钟方式和外部时钟方式我们采用部时钟方式,如图,引脚XTAL是片振荡器反向放大器和时钟发生线路的输入端。
XTAL2是片振荡器反相放大器的输出端。
当使用片振荡器时,外接石英晶体和微调电容。
2.2.4复位电路51系列单片机通常有上电复位和按键复位两种方式。
我们采用了最简单的一种上电复位及按键复位电路如图所示,上电后,由于电容充电,使RESET持续一段时间的高电平,完成复位操作;当单片机处于运行中或死锁时,按下“复位”按钮,也可使单片机进入复位状态。
通常选择C=10~30uF, R=100~1000Ω。
1、数码管显示方式数码管有静态显示方式和动态显示方式,我们采用的共阴极七段数码管静态显示方式,如上图所示。
就是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。
2、驱动电路74LS245芯片用作驱动的电路,用来驱动七段数码管,它是8路同相三态双向总线收发器,可双向传输数据,8051单片机的P0口总线负载达到或超过P最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平时有效,AB接高电平时A→B,低电平时B→A第三章程序设计与仿真3.1 投票显示系统总体功能实现利用单片机设计投票显示系统,应先掌握单片机的结构与功能,在设计中充分利用好单片机各管脚,并配合外部电路,坚持简单易懂,节约成本的原则来设计电路。
2.2 系统流程图为了简化程序的复杂度,使设计过程简单易懂,该系统将分成主程序和子程序设计,具体流程如下图。
3.3 程序编写按照上面流程图进行源程序编写,源程序如下:(1)主程序部分#include "reg51.h"#include"stdio.h"sfr p2=0xa0;sfr p1=0x90;sfr p0=0x80;sbit P11=P1^1; /*位定义*/ sbit P12=P1^2;sbit P13=P1^3;sbit P14=P1^4;sbit P15=P1^5;sbit P16=P1^6;sbit P17=P1^7;Unsigned; chardis[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00};/*定义字型表*/ unsigned char num,num2,num3,num4,num5,num6,num7;char nu=0;void scan();void disp() /*显示子程序*/{ num=num2+num3+num4+num5+num6+num7;p0=dis[num];p2=dis[nu];}void main(){ P1=0xff; /*对P1口进行初始化*/while(1) /*进入无限循环*/ {if(!P11) /*判断总控开关,按下则执行以下程序*/{num=0;nu++;scan();} /*扫描按键,执行scan()子程序*/else{num2=0;num3=0;num4=0;num5=0;num6=0;num7=0;}/*无按键输入则显示0*/}}void scan(){while(!P11) /*判断总控开关是否一直保持接通状态,接通则进行投票过程循环,否则不执行程序,即投票按键无效*/{ if(!P12){ num2=1;while(!P12);} /*对投票按键P1进行判断,按下则累加1并维持不变*/if(!P13){ num3=1;while(!P13);}if(!P14){ num4=1;while(!P14);}if(!P15){ num5=1;while(!P15);}if(!P16){ num6=1;while(!P16);}if(!P17){ num7=1;while(!P17);}disp();}} 子程序部分完成投票判断、票数累加工作。
3.4 仿真与调试将源程序输入进Keil软件中,保存为.hex文件并编译,无误后可以再烧进仿真软件Proteus ISIS文件中的单片机AT89C51中,方可运行仿真电路。
单击仿真运行开始按钮,我们能清楚地观察到每一个引脚的电频变化,红色代表高电频,蓝色代表低电频。
仿真过程如下1、接通总控开关,此时所有人投票有效,并可看见票数显示器显示“0”,轮次显示器显示“1”投票第一轮开始,进入投票阶段,如图2、任意按下一个投票按键如P3,此时票数显示器示数字变成“1”,轮次显示器“1”不变,如图3、按另一个P5,票数LED灯变成“2”,如图4、此时再次按下第一次按过的按键P3,显示器仍保持数字“2”,即完成每个按键只能投票一次的功能。
如图5、最后将总控开关断开,可看到显示器没有变化,可以继续显示投票结果,再次接通总控,可发现票数显示器又回到初始阶段“0”,轮次显示器显示“2”,即进入第二轮投票,如图6、若此后有4人投票,则票数显示器显示“4”,而轮次显示器“2”不变。
即票数完成清零并进入新一轮投票阶段,如图7、所有投票结束后按下轮次复位按钮,则所有显示器回复初始状态,仿真成功。
第四章总结和未来改进构想总结:通过本次课程设计不仅加强了对我们所学的单片机知识的认识,还掌握了Proteus电路图仿真软件和Keil编程软件等专业软件的应用。
通过实物制作,还很好的锻炼了我们的动手能力和团队合作的能力,在课设过程中,我们遇到了一些问题,比如仿真时P0口接的数码管不亮,经过我们的讨论和几次试验,我发现是上拉电阻阻值过大,我们及时改正,解决了这个问题。
还有在中期答辩时,我们忽略了驱动电路的问题,导致数码管显示电路出现错误,亮度不够,后来在老师的指导和我们对课本上的知识深入学习后修改了电路,解决了这一问题。
我觉得我们要扎实的掌握所学的知识的同时还要学会查资料,同时还要及时与老师交流,注重团队合作,这样才能把事情做得更好。
未来改进构想:我们在课程设计的过程中也做了创新,增加LED显示器显示投票轮数;我们觉得还可以在每个投票环节上增加投票状态(可以发光用二极管)确认是否投票成功,以及是否可以投票。
还可以设计上计时功能,以保证在规定时间完成投票。