16人表决器设计_第1页
16人表决器设计_第2页
16人表决器设计_第3页
16人表决器设计_第4页
16人表决器设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2000ANHUIXINHUAUNIVERSITY单片机原理及应用》

课程大作业题目:16人投票表决器姓 名:王荣山学 号: 1732101137专 业:计算机应用技术院系:信息工程学院指导老师:史先桂设计地点:计算机应用实验室完成时间: 2019.5.26起止时间:2019年5月22日至2019年5月26目录TOC\o"1-5"\h\z1绪论 12硬件设计 22.1.1设计框架 22.1.2各元器件选择及功能介绍 32.2设计原理图 63软件设计 73.1程序段介绍 73.2主程序代码 84结论 174.1仿真结果图 17致谢 20\o"CurrentDocument"参考文献 21附录 22第一章概述设计内容:设计一个基于AT89C51系列单片机的16人投票表决器,利用按键来进行投票,通过1602进行票数的显示。可以投反对票,赞同票,不投票默认为弃权。(少数服从多数的原则,其中三人有一票否决)设计目的:本文设计的投票表决器,是基于单片机设计制作的电子式投票表决器。比传统的手动统计票数更为方便直观,通过程序来进行控制,有效避免了暗箱操作。制作的投票表决器小巧容易携带,特别方便。设计原理:主要由按键电路、复位电路、1602显示电路以及指示灯组成。使用两排按键控制赞同票与反对票,一个指示灯用来表示正在计算。待投票结束后按下统计按钮即可统计票数。可以从1602上直观的读出赞同票,反对票,弃权票。第二章硬件设计设计框架:系统结构以AT89C51单片机位控制核心,加上2排按键、1602显示电路、LED模块组成。单片机负责接收按键的输入,根据输入控制1602显示票数,以LED显示单片机正在计算票数的状态。系统组成框图如图2.1所示。图2.1系统组成框图各元器件选择及功能介绍AT89C51简介AT89C52是一种带4K字节闪存可编程可擦除只读存储器(FPER0M—FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C52是一种带4K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C051是它的一种精简版本。AT89C51单片机机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示。P1P1PtpipipipipiRST(RXD)P3.0P1P1PtpipipipipiRST(RXD)P3.0(TXD)P3.1(TNTC)P3.2(T?iTT)P3.3CHOP3.4(T】)P3.5(WP3.6Hn?)P3.7XTAL2XTAL1G'DAT89C51VCCP0.0/(ADO)P0.I/(ADI)P0.2/(AD2)P0.3/(ADJ)PO.4/(.UH)P0.5/(AD5)P0.6/(AD6)PO.7/(AU7)Ea/vppALE/舷F5PIP2.7/(A15>P2.6/(A14)P2.5/(A13)P2.4(A12)P2.3/(All)P2.2/(A10)P2.】/(A9)P2.0/(A8)图2.2AT89C51系列单片机VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写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口写入“后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INTO(外部中断0)P3.3/INT1(外部中断1)P3.4T0(计时器0外部输入)P3.5T1(计时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。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) 1602显示电路设计与原理1602是字符型液晶,它是16*2的显示的。工业字符型液晶,能够同时显示16x02即32个字符。通过1602进行票数的显示。

(3) 时钟振荡电路AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。如果使用石英晶体,我们推荐电容使用30PF士10PF,而如果使用陶瓷振荡器建议选择40PF士10PF。用户也可以采用外部时钟。采用外部时钟的电路如图示。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。振荡器电路图如下:X7AL1图2.3单片机内部、外部振荡电路EXTERNALOSCILLATORSIGNALXTAL2X7AL1图2.3单片机内部、外部振荡电路EXTERNALOSCILLATORSIGNALXTAL2X1AL1GND设计原理图:总体硬件电路实现功能如下,如图2.4所示电路中用P0、部分设计原理图:总体硬件电路实现功能如下,如图2.4所示电路中用P0、部分P1口进行赞同票读取。电路中用P2、部分P3口进行反对票读取。P1.6作为统计票数的开关。P1.7控制正在计算票数的显示灯。5)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。2图2.4硬件电路图第三章软件设计1.程序段介绍:使用中断来扫描统计票数的按键,更精确。先对定时器进行初始化,选择定时器工作方式。定时时间为没50000us进入一次中断。再对1602液晶进行初始化,编写显示作者姓名学号的函数disp_myname();a延时2s后将1602的指针指向第二行,将学号替换为投票表决器的英文‘vtingmachine'。在while(1)的循环中一直等待P1.6口的按键,若按键未被按下,则在中断中继续统计票数,直到P1.6被按下,关闭定时器中断,使之后的投票无效化统计当前的赞同,反对,弃权票数,显示到1602中。之后开启定时器中断等待下一次投票统计的到来。主程序流程图3-5所示:图3-5主程序流程图2.主程序代码:#include<reg52.h>unsignedintyes=0,no=0,qiquan=0,i=0,j=0;unsignedintsum2,sum1,sum,temp,succeed=0;unsignedinty,com,date;unsignedintge,shi,bai,a=0;chary1[8],n1[8],y2[8],n2[8];sbitK1二P「6;//开关sbitK2=P「7;//指示灯sbitDO二PO^O;sbitD1=P0^1;sbitD2=P0^2;sbitD3=P0^3;sbitD4=P0^4;sbitD5=P0^5;sbitD6二PO飞;sbitD7=P0^7;sbitDB1二P「0;sbitDB2二P「l;sbitDB3二P「2;sbitDB4二P「3;sbitDB5二P「4;sbitDB6二P「5;sbitDB7=P2^0;sbitrd二P3“7;//*****************反对**************////sbitA0=P2"0;////sbitA1=P2「;////sbitA2=P2"2;//sbitA3=P2^3;sbitA4=P2^4;sbitA5=P2^5;sbitA6=P2^6;sbitA7=P2^7;sbitrx=P3^0;sbittx=P3^1;sbitcsda二P3"2;sbitinti二P3"3;sbitlcden二P3"4;sbitrs=P3^5;sbitwr=P3^6;sbitA0=P2^1;voiddelay(unsignedinty)//延迟{unsignedinta,b;for(a=y;a>0;a--)for(b=110;b>0;b--);}voidwrite_com(unsignedintcom)//写指令{rs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}voidwrite_date(unsignedintdate)//写数据{rs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;}intchange(unsignedinta) //把票数转化为字符型{switch(a){case0:a=0x30;break;case1:a=0x31;break;case2:a=0x32;break;case3:a=0x33;break;case4:a=0x34;break;case5:a=0x35;break;case6:a=0x36;break;case7:a=0x37;break;case8:a=0x38;break;case9:a=0x39;break;}returna;}/***********************************1602显示**/voidxianshi(unsignedintd){//init();bai=d/100;shi=(d-100*bai)/10;ge=d%10;bai=change(bai);shi=change(shi);ge=change(ge);write_date(bai);delay(5);write_date(shi);delay(5);write_date(ge);delay(5);}voidxianshi2(){write_date('y');delay(5);write_date('e');delay(5);write_date('s');delay(5);write_date(':');delay(5);}voidxianshi3() //*****显示赞同****//{write_date('n');delay(5);write_date('o');delay(5);write_date(':');delay(5);}voidxianshi4() //******显示反对*****//{write_date('a');delay(5);write_date('b');delay(5);write_date('s');delay(5);write_date('t');delay(5);write_date('e');delay(5);write_date('n');delay(5);write_date('t');delay(5);write_date('i');delay(5);write_date('o');delay(5);write_date('n');delay(5);write_date(':');delay(5);}voidpanduan_yes(){if(D0==0){y1[0]=1;n1[0]=0;}if(D1==0){y1[1]=1;n1[1]=0;}if(D2==0){y1[2]=1;n1[2]=0;}if(D3==0){y1[3]=1;n1[3]=0;}if(D4==0){y1[4]=1;n1[4]=0;}if(D5==0){y1[5]=1;n1[5]=0;}if(D6==0){y1[6]=1;n1[6]=0;}if(D7==0){y1[7]=1;n1[7]=0;}if(DB1==0){y2[0]=1;n2[0]=0;}if(DB2==0){y2[1]=1;n2[1]=0;}if(DB3==0){y2[2]=1;n2[2]=0;}if(DB4==0){y2[3]=1;n2[3]=0;}if(DB5==0){y2[4]=1;n2[4]=0;}if(DB6==0){y2[5]=1;n2[5]=0;}if(rd==0){y2[6]=1;n2[6]=0;}if(DB7==0){y2[7]=1;n2[7]=0;}voidpanduan_no(){/*if(A1==0){y1[1]=0;n1[1]=1;}if(A2==0){y1[2]=0;n1[2]=1;}*/if(A3==0){y1[3]=0;n1[3]=1;}if(A4==0){y1[4]=0;n1[4]=1;}if(A5==0){y1[5]=0;n1[5]=1;}if(A6==0){y1[6]=0;n1[6]=1;}if(A7==0){y1[7]=0;n1[7]=1;}if(rx==0){y2[0]=0;n2[0]=1;}if(tx==0){y2[1]=0;n2[1]=1;}if(csda==0){y2[2]=0;n2[2]=1;}if(int1==0){y2[3]=0;n2[3]=1;}if(lcden==0){y2[4]=0;n2[4]=1;}if(rs==0){y2[5]=0;n2[5]=1;}if(wr==0){y2[6]=0;n2[6]=1;}if(A0==0){y2[7]=0;n2[7]=1;}}voidinit()//1602初始化{lcden=0;write_com(0x38);write_com(0x0e);write_com(0x01);write_com(0x80);}//为了移动效果voidtongji(){unsignedinti;for(i=0;i<8;i++){if(y1[i]==1)yes++;if(n1[i]==1)no++;if(y1[i]==0)qiquan++;}for(i=0;i<8;i++){if(y2[i]==1)yes++;if(n2[i]==1)no++;if(y2[i]==0)qiquan++;}}voidrestart(){unsignedinti;P0=0xff;P1=0x7f;P2=0xff;P3=0xff;for(i=0;i<8;i++){y1[i]=0;n1[i]=0;}for(i=0;i<8;i++){y2[i]=0;n2[i]=0;}yes=0;no=0;qiquan=0;}voiddisp_myname(){init();//1602初始化write_date('I');delay(5);write_date('');delay(5);write_date('m');delay(5);write_date('');delay(5);write_date('L');delay(5);write_date('i');delay(5);write_date('u');delay(5);write_date('');delay(5);write_date('T');delay(5);write_date('a');delay(5);write_date('o');delay(5);write_com(0x80+0x40);//写第二行,我的学号write_date('1');delay(5);write_date('7');delay(5);write_date('3');delay(5);write_date('2');delay(5);write_date('1');delay(5);write_date('0');delay(5);write_date('1');delay(5);write_date('1');delay(5);write_date('2');delay(5);write_date('2');delay(5);restart();}voiddisp_mydesign(){ //init();//1602初始化write_com(0x80+0x40);//写第二行,显示投票表决器的功能write_date('V');delay(5);write_date('o');delay(5);write_date('t');delay(5);write_date('i');delay(5);write_date('n');delay(5);write_date('g');delay(5);write_date('');delay(5);write_date('m');delay(5);write_date('a');delay(5);write_date('c');delay(5);write_date('h');delay(5);write_date('i');delay(5);write_date('n');delay(5);write_date('e');delay(5);restart();}voidmain(){K2=0;TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;ET0=1;TR0=1;disp_myname();//显示姓名,学号delay(2000);//2秒后,显示本设计名称,投票表决器disp_mydesign();while(1){while(K1==1);EA=0;K2=0;//计算指示灯tongji();init();//1602初始化xianshi2();xianshi(yes);write_date('');delay(5);xianshi3();xianshi(no);write_com(0x80+0x40);xianshi4();xianshi(qiquan);while(K1==0);{EA=1;sum1=y1[0]+y1[1]+y1[2]+y1[3]+y1[4]+y1[5]+y1[6]+y1[7]+y2[0]+y2[1]+y2[2]+y2[3]+y2[4]+y2[5]+y2[6]+y2[7];sum2=n1[0]+n1[1]+n1[2]+n1[3]+n1[4]+n1[5]+n1[6]+n1[7]+n2[0]+n2[1]+n2[2]+n2[3]+n2[4]+n2[5]+n2[6]+n2[7];sum=y1[0]+y1[1]+y1[2];if(sum==3){if(sum1>sum2){K2=1;delay(500);}K2=0;}K2=0;}restart();}}voidtime()interrupt1{TH0=(65535-50000)/256;TL0=(65535-50000)%256;panduan_yes();panduan_no();}4.1仿真结果图1602先显示作者姓名学号,2s后显示作品名称按下统计按键开始统计票数附上静态图片如下图*2>»□二•«2ff<D2誉4.1.1功能初始图,显示学号,姓名yes:015no:000abstention:Ja02.W3□D2i2t25TX4.1.2当15个人赞同,一个拥有一票否决的人不赞同时的显示“卜sFP2•再DU2"!■1・■勇“6・Ta9・4.1.3当(123没有同意其他13人同意时的状态)□es:909no:000abstention!00?兰Js72"i・MJ*MTX4.1.4拥有一票否决的赞同,少数服从多数致谢在此,对所有给予我关怀和帮助以及支持的老师,同学表示感谢本次作业设计的成功完成,要特别感谢史先桂老师在这段时间给予的帮助、支持,正是有他们这段时间和我一起面对、克服困难,我的作业设计才得以完成。还记得当初一开毕业设计的时候,老师就对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论