单片机15人投票表决器_第1页
单片机15人投票表决器_第2页
单片机15人投票表决器_第3页
单片机15人投票表决器_第4页
单片机15人投票表决器_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、15人投票表决器班级:姓名: 学号:201205140133 第一章 概述1.设计内容:设计一个基于AT89C52系列单片机的15人投票表决器,利用按键来进行投票,通过1602进行票数的显示。可以投反对票,赞同票,不投票默认为弃权。2.设计目的:本文设计的投票表决器,是基于单片机设计制作的电子式投票表决器。比传统的手动统计票数更为方便直观,通过程序来进行控制,有效避免了暗箱操作。制作的投票表决器小巧容易携带,特别方便。3.设计原理:该音乐盒主要由按键电路、复位电路、1602显示电路以及指示灯组成。使用两排按键控制赞同票与反对票,一个指示灯用来表示正在计算。待投票结束后按下统计按钮即可统计票数。

2、可以从1602上直观的读出赞同票,反对票,弃权票。第二章 硬件设计1.设计框架:音乐盒的系统结构以AT89C52单片机位控制核心,加上2排按键、1602显示电路、LED模块组成。单片机负责接收按键的输入,根据输入控制1602显示票数,以LED显示单片机正在计算票数的状态。系统组成框图如图2.1所示。图2.1 系统组成框图2.各元器件选择及功能介绍:(1) AT89C52简介AT89C52是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。AT

3、89C52是一种带4K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C52单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图2.2所示图2.2 AT89C51系列单片机(2) 1602显示电路设计与原理1602是字符型液晶,它是16*2的显示的。工业字符型液晶,能够同时显示16x02即32

4、个字符。通过1602进行票数的显示。(3) 时钟振荡电路AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。如果使用石英晶体,我们推荐电容使用30PF10PF,而如果使用陶瓷振荡器建议选择40PF10PF。用户也可以采用外部时钟。采用外部时钟的电路如图示。这种

5、情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。振荡器电路图如下:图2.3 单片机内部、外部振荡电路3.设计原理图:总体硬件电路实现功能如下,如图2.4所示1) 电路中用P0、部分P1口进行赞同票读取。2) 电路中用P2、部分P3口进行反对票读取。3) P1.6作为统计票数的开关。4) P1.7控制正在计算票数的显示灯。5) 电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。图2.

6、4 硬件电路图第三章 软件设计1.个程序段介绍:使用中断来扫描统计票数的按键,更精确。先对定时器进行初始化,选择定时器工作方式。定时时间为没50000us进入一次中断。再对1602液晶进行初始化,编写显示作者姓名学号的函数disp_myname();a延时2s后将1602的指针指向第二行,将学号替换为投票表决器的英文voting machine。在while(1)的循环中一直等待P1.6口的按键,若按键未被按下,则在 中断中继续统计票数,直到P1.6被按下,关闭定时器中断,使之后的投票无效化统计当前的赞同,反对,弃权票数,显示到1602中。之后开启定时器中断等待下一次投票统计的到来。主程序流程

7、图3-5所示:图 3-5主程序流程图A. 主程序代码:#include unsigned int yes=0,no=0,qiquan=0,i=0,j=0;unsigned int temp,succeed=0;unsigned int y,com,date;unsigned int ge,shi,bai,a=0;char y18=2,2,2,2,2,2,2,2,n18,y27=2,2,2,2,2,2,2,n27;sbit K1=P16;/开关 sbit K2=P17;/指示灯/*赞同*/sbit D0=P00; sbit D1=P01;sbit D2=P02;sbit D3=P03;sbit

8、D4=P04;sbit D5=P05;sbit D6=P06;sbit D7=P07;sbit DB1=P10;sbit DB2=P11;sbit DB3=P12;sbit DB4=P13;sbit DB5=P14;sbit DB6=P15;sbit rd=P37;/*反对*/sbit A0=P20;sbit A1=P21;sbit A2=P22;sbit A3=P23;sbit A4=P24;sbit A5=P25;sbit A6=P26;sbit A7=P27;sbit rx=P30;sbit tx=P31;sbit csda=P32;sbit int1=P33;sbit lcden=P3

9、4;sbit rs=P35;sbit wr=P36;void delay(unsigned int y) /延时unsigned int a,b;for(a=y;a0;a-)for(b=110;b0;b-);void write_com(unsigned int com)/写指令rs=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(unsigned int date) /写数据rs=1;P0=date;delay(5);lcden=1;delay(5);lcden=0;int change(unsigned int a) /

10、把票数转为字符型switch(a) case 0: a=0x30;break; case 1: a=0x31;break; case 2: a=0x32;break; case 3: a=0x33;break; case 4: a=0x34;break; case 5: a=0x35;break; case 6: a=0x36;break; case 7: a=0x37;break; case 8: a=0x38;break; case 9: a=0x39;break;return a;/*1602显示 */void xianshi(unsigned int d)/init();bai=d/1

11、00;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); /*1602显示 */void xianshi2() /*显示赞同*/write_date(y);delay(5);write_date(e);delay(5);write_date(s);delay(5);write_date(:);delay(5);void xianshi3()/*显示反对*

12、/write_date(n);delay(5);write_date(o);delay(5);write_date(:);delay(5);void xianshi4() /*显示弃权*/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)

13、;write_date(n);delay(5);write_date(:);delay(5);void panduan_yes()if(D0=0)y10=1;n10=0;if(D1=0)y11=1;n11=0;if(D2=0)y12=1;n12=0;if(D3=0)y13=1;n13=0;if(D4=0)y14=1;n14=0;if(D5=0)y15=1;n15=0;if(D6=0)y16=1;n16=0;if(D7=0)y17=1;n17=0;if(DB1=0)y20=1;n20=0;if(DB2=0)y21=1;n21=0;if(DB3=0)y22=1;n22=0;if(DB4=0)y23

14、=1;n23=0;if(DB5=0)y24=1;n24=0;if(DB6=0)y25=1;n25=0;if(rd=0)y26=1;n26=0;void panduan_no()if(A0=0)y10=0;n10=1;if(A1=0)y11=0;n11=1;if(A2=0)y12=0;n12=1;if(A3=0)y13=0;n13=1;if(A4=0)y14=0;n14=1;if(A5=0)y15=0;n15=1;if(A6=0)y16=0;n16=1;if(A7=0)y17=0;n17=1;if(rx=0)y20=0;n20=1;if(tx=0)y21=0;n21=1;if(csda=0)y2

15、2=0;n22=1;if(int1=0)y23=0;n23=1;if(lcden=0)y24=0;n24=1;if(rs=0)y25=0;n25=1;if(wr=0)y26=0;n26=1;void init()/1602初始化lcden=0;write_com(0x38);write_com(0x0e);write_com(0x01);write_com(0x80); /为了移动效果void tongji()unsigned int i;for(i=0;i8;i+)if(y1i=1)yes+;if(n1i=1)no+;if(y1i=2)qiquan+;for(i=0;i7;i+)if(y2i

16、=1)yes+;if(n2i=1)no+;if(y2i=2)qiquan+;void restart()unsigned int i;P0=0xff;P1=0xff;P2=0xff;P3=0xff;for(i=0;i8;i+)y1i=2;n1i=0;for(i=0;i7;i+)y2i=2;n2i=0;yes=0;no=0;qiquan=0;void disp_myname() init(); /1602初始化 write_date(I); delay(5); write_date(); delay(5); write_date(m); delay(5); write_date( ); dela

17、y(5); write_date(C); delay(5); write_date(h); delay(5); write_date(e); delay(5); write_date(n); delay(5); write_date( ); delay(5); write_date(Q); delay(5); write_date(u); delay(5); write_com(0x80+0x40); /写第二行,我的学号 write_date(2); delay(5); write_date(0); delay(5); write_date(1); delay(5); write_date(

18、2); delay(5); write_date(0); delay(5); write_date(5); delay(5); write_date(1); delay(5); write_date(4); delay(5); write_date(0); delay(5); write_date(1); delay(5); write_date(3); delay(5); write_date(3); restart();void disp_mydesign() / init(); /1602初始化 write_com(0x80+0x40); /写第二行,显示投票表决器的功能 write_d

19、ate(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();void main() 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=1;/计算指示灯 tongji(); init(); /1602初始化xians

温馨提示

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

评论

0/150

提交评论