单片机15人投票表决器Word格式.docx
- 文档编号:21329200
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:17
- 大小:626.96KB
单片机15人投票表决器Word格式.docx
《单片机15人投票表决器Word格式.docx》由会员分享,可在线阅读,更多相关《单片机15人投票表决器Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
1602是字符型液晶,它是16*2的显示的。
工业字符型液晶,能够同时显示16x02即32个字符。
通过1602进行票数的显示。
(3)时钟振荡电路
AT89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和
XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石
英晶体或者陶瓷谐振器一起构成自然振荡器。
外接石英晶体及电容C1、C2接在
放大器的反馈回路中构成并联振荡电路。
对外接电容C1,C2虽然没有什么严格
的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。
如果使用石英晶体,我们推荐电容使用30PF-10PF,而如果使用陶瓷振荡器建议选择40PF-10PF。
用户也可以采用外部时钟。
采用外部时钟的电路如图示。
这种情况下,外部时钟脉冲接到XTAL1
端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
振荡器电路图如下:
C2
X1AL2
GND
图2.3单片机内部、外部振荡电路
3.设计原理图:
总体硬件电路实现功能如下,如图2.4所示
1)电路中用P0部分P1口进行赞同票读取。
2)电路中用P2、部分P3口进行反对票读取。
3)P1.6作为统计票数的开关。
4)P1.7控制正在计算票数的显示灯。
5)
电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PR
图2.4硬件电路图
第三章软件设计
1.个程序段介绍:
使用中断来扫描统计票数的按键,更精确。
先对定时器进行初始化,选择定时器工作方式。
定时时间为没50000us进入一次中断。
再对1602液晶进行初始化,编写显示作者姓名学号的函数disp_myname();
a延时2s后将1602的指针指向第二行,将学号替换为投票表决器的英文‘votingmachine'
。
在while
(1)的循环中一直等待P1.6口的按键,若按键未被按下,则在中
断中继续统计票数,直到P1.6被按下,关闭定时器中断,使之后的投票无效化统计当前的赞同,反对,弃权票数,显示到1602中。
之后开启定时器中断等待
下一次投票统计的到来。
主程序流程图3-5所示:
A.主程序代码:
#inelude<
reg52.h>
unsignedintyes=0,no=0,qiquan=O,i=O,j=O;
unsignedinttemp,succeed=O;
unsignedinty,com,date;
unsignedintge,shi,bai,a=0;
开关
指示灯
赞^同***************〃
chary1[8]={2,2,2,2,2,2,2,2},n1[8],y2[7]={2,2,2,2,2,2,2},n2[7];
sbitK1=P1A6;
//
sbitK2=P1A7;
〃*****************
sbitDO=POA。
;
sbitD1=POA1;
sbitD2=POA2;
sbitD3=P0A3;
sbitD4=P0A4;
sbitD5=P0A5;
sbitD6=P0A6;
sbitD7=P0A7;
sbitDB1=P1A0;
sbitDB2=P1A1;
sbitDB3=P1A2;
sbitDB4=P1A3;
sbitDB5=P1A4;
sbitDB6=P1A5;
sbitrd=P3A7;
//*****************sbitA0=P2A0;
sbitA1=P2A1;
sbitA2=P2A2;
sbitA3=P2A3;
sbitA4=P2A4;
sbitA5=P2A5;
sbitA6=P2A6;
sbitA7=P2A7;
sbitrx=P3A0;
sbittx=P3A1;
sbitcsda=P3A2;
sbitint1=P3A3;
sbitlcden=P3A4;
sbitrs=P3A5;
//延时
sbitwr=P3A6;
voiddelay(unsignedinty)
{
unsignedinta,b;
for(a=y;
a>
0;
a--)for(b=110;
b>
b--);
}
voidwrite_com(unsignedintcom)//写指令
rs=0;
P0=com;
delay(5);
lcden=1;
lcden=0;
}
voidwrite_date(unsignedintdate)//
写数据
rs=1;
P0=date;
delay(5);
lcden=1;
lcden=0;
intchange(unsignedinta)//{
switch(a)
case0:
a=0x30;
break;
case1:
a=0x31;
case2:
a=0x32;
case3:
a=0x33;
case4:
a=0x34;
case5:
a=0x35;
case6:
a=0x36;
case7:
a=0x37;
case8:
a=0x38;
case9:
a=0x39;
}returna;
/***********************************
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);
write_date(shi);
write_date(ge);
}//*********************************
voidxianshi2()
write_date('
y'
);
e'
s'
write_date('
:
'
voidxianshi3()
n'
o'
voidxianshi4()
a'
b'
t'
显示*/
显示赞同**//
显示反对****//
显示弃权*****//
i'
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;
voidpanduan_no()
{if(A0==0){y1[0]=0;
n1[0]=1;
}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;
voidinit()//1602初始化
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]==2)qiquan++;
}for(i=0;
7;
if(y2[i]==1)yes++;
if(n2[i]==1)no++;
if(y2[i]==2)qiquan++;
voidrestart()
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
i++){y1[i]=2;
n1[i]=0;
i++){y2[i]=2;
n2[i]=0;
}yes=0;
no=0;
qiquan=0;
voiddisp_myname()
init();
//1602初始化
I'
、'
);
m'
delay(5);
'
C'
delay(5);
h'
Q'
u'
write_com(0x80+0x40);
//写第二行,我的学号
2'
0'
1'
5'
4'
3'
restart();
voiddisp_mydesign()
write_com(0x80+0x40);
//写第二行,显示投票表决器的功能write_date('
V'
g'
c'
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=1;
//计算指示灯
tongji();
xianshi2();
xianshi(yes);
xianshi3();
xianshi(no);
xianshi4();
xianshi(qiquan);
while(K1==0);
voidtime()interrupt1
panduan_yes();
panduan_no();
第四章仿真结果及其总结
1.仿真结果图:
(1)1602先显示作者姓名学号,2s后显示作品名称
(2)按下统计按键开始统计票数
(3)
附上一张静态图片
2.总结:
通过这次课程设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。
经过长时间的设计及调试,本系统基本能实现按下1键盘会使led灯跟着音乐闪动,扬声器播放对应的音符。
按下2键会使led灯产生相应花样。
但由于仿真系统原因,本设计音频效果不是很好。
不足之处有:
1.音量不可调。
我的综合设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。
首先硬件方面,基本了解了电子产品的开发流程和所要做的工作。
使我对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,按键等。
并且我学会了分析问题解决问题的能力,加深了对所学理论知识的理解和运用。
我的动手能力得到了很大的提高,创新意识得到了锻炼。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 15 投票 表决器
![提示](https://static.bdocx.com/images/bang_tan.gif)