通信工程专业
计算机综合课程设计
题 目 基于51单片机-多人表决器
学生姓名 赵 丹 学号 1113024046
所在院(系) 陕西理工学院物理与电信工程学院
专业班级 通 信 工 程 专 业 1102 班
指导教师 张 文 丽
20##年 11 月 21 日
任务书
用AT89C51实现三人表决器
内容摘要:随着计算机技术的发展,单片机的应用领域也越来越广泛,尤其是在工业控制和仪器仪表智能化中扮演着极其重要的角色,单片机全称为“单片微型计算机”,从应用领域来看,单片机主要用于控制,所以又称为“微控制器”。在此次课程——三输入表诀器中,其原理就是由三个人来投票,当同意的票数大于或者等于2人时,则认为同意;反之,当否决的票数少于2人时,则认为不同意。实验中用3个拨挡开关来表示3个人,当对应的拨挡开关输入为‘0’时,表示此人同意;否则若拨挡开关输入为‘1’时,则表示此人反对。表决的结果用一个LED表示,若表决的结果为同意,则LED被点亮;否则,如果表决的结果为反对,则LED不会被点亮,因此,通过Proteus 7.4a电脑仿真软件以及KeilC51软件,再经过编写C语言程序,以达到对题目的仿真验证。
关键词:单片机;表诀器;AT89C51. 蜂鸣器
AT89C51 is used to implement the seven input voter
Content abstract:With the development of computer technology, single chip microcomputer application field is becoming more and more widely, especially in the industrial control and intelligent instrument plays a very important role, called the single chip microcomputer "single chip microcomputer", from the point of application field, single-chip computer is mainly used to control, so called "micro controller. In the course - three input table tactic, its principle is composed of three people to vote, when agreed to vote is greater than or equal to 2 person, thinks agree; Conversely, when veto votes less than 2 people, argues that don't agree. Experiment with three dial switch to represent the three men, when the corresponding dial switch input to '0', said he agreed to; Otherwise if the allocated block switch input is' 1 ', said the man. The results of the vote with an LED said, if the results of the vote to agree, LED lit up; Otherwise, if the results of the vote for the opposition, the LED is not lit, therefore, through the Proteus 7.4 a computer simulation software and KeilC51, repass write C language program, in order to achieve the simulation of the title.
Key words: single chip microcomputer; Table tactic; The specs AT89C51.
目 录
1.引言................................................... 1
2.系统总体设计............................................ 2
2.1 生活中的表决器............................................ 2
2.2 输入表决器的实现.......................................... 2
2.3 AT89C51的管脚说明......................................... 3
2.4 实验构思.................................................. 3
3.实现的程序.............................................. 3
3.1 仿真程序.................................................. 3
3.2 实验的仿真................................................ 4
4.注意项.................................................. 5
5.实物图.................................................. 5
结束语.................................................... 6
致谢...................................................... 7
参考文献.................................................. 8
附录A.................................................... 9
附录B................................................... 13
引 言
电子数字计算机诞生于1946年,在其后的一个历史阶段中,计算机一直都是大型昂贵的的设备,直到20世纪70年代微处理器的出现,使得计算机逐渐小型,廉价并且高可靠性。而随着计算机技术的发展,单片机的应用领域也越来越广泛,尤其是在工业控制和仪器仪表智能化中扮演着极其重要的角色,单片机全称为“单片微型计算机”,从应用领域来看,单片机主要用于控制,所以又称为“微控制器”现今,掌握单片机这门课程是极其重要的,尤其是作为一名工科学生,我们不仅要学好课堂的理论知识,还需要通过一定的课程实验开动脑筋,激发学习兴趣,达到理论与实践相结合的目的。还有一个重要的认识就是,要学好一门课很容易,但是要真正能把它运动到实际中就难了,掌握一定的理论知识并且会做题还不够,关键是要怎么样去利用,所以,在今后的学习生活中,我要学会学以致用。
2.系统的总体设计
2.1生活中的表决器
如1-1图所示,这是表决器中的一种,表决器在生活中被我们所熟知,众所周知,在很多场合中都要用到表决器,选举大会中,可以通过表决器来为候选人进行投票选举,在比赛中评委中也可以通过表决器来决定选手的去留。有了表决器,可以使得程序更为简单,操作更为简单,也使得结果更未公正。例如,在奥运会中的举重比赛上,某一位选手举重后,需要由三位评委对选手的表现作出判决,如果选手的表现有所犯规,那么就会按下红灯,如果对选手的表现认可,那么就会按下绿灯,如果绿灯的个数大于等于2 ,那么选手的此次举重通过。如果红灯大于等于2,那么选手将不通过,生活中的表决器有很多种类,但不管实现方法是什么,它的原理只有一个,那就是:多数服从少数,因此,表决器在生活中发挥着极其重要的角色,而在此论文中,我所要做的便是运用简单的C语言编程,再通过Proteus仿真软件仿真实现一种通过开关和发光二极管产生结果的简易3输入表决器。
1-1
2.2 表决器的实现
三人表决器顾名思义就是由三个人来投票,当同意的票数大于或者等于2人时,则认为同意;反之,当否决的票数少于2人时,则认为不同意。实验中用3个拨挡开关来表示3个人,当对应的拨挡开关输入为‘1’时,表示此人同意;否则若拨挡开关输入为‘0’时,则表示此人反对。表决的结果用一个LED表示,若表决的结果为同意,则LED被点亮;否则,如果表决的结果为反对,则LED不会被点亮,因此,通过Proteus 7.4a电脑仿真软件以及KeilC51软件,再经过编写C语言程序,以达到对题目的验证。
2.3 AT89C51的管脚说明
(1) P1口(1~8脚):P1.0~P1.7统称为P1口,可作为准双向I/O口使用,对于对于52字系列,P1.0与P1.1还有第二个功能:P1.0可用作定时/计数器2的计数脉冲输入端T2;P1.1可用作定时/计数器2的外部控制端T2EX,在此实验中P1.0~P1.6被接为7个开关用来进行表诀,而P1.7接发光二极管作为输出结果对表决后的结果进行显示。
(2)VCC:供电电压。
(3)GND:接地。
如1-2图所示:
1-2
2.4实验构思
实验要求设计一个3输入表决器,可知,需要有3个输入端口作为判决器,因此,需要用到开关,通过高电平和低电平来判断,考虑到P1.0~P1.7时双向口,因此,将输入口接在P1—P6口上,将二极管输出显示接在P7 口,要使“1”信号正常输出,需要上拉电阻,因此,一个简易的7输出表决器便可以实现。
3.实现的程序
3.1仿真程序见附录A
3.2 实验仿真图
我们可知,按下开关为低电平,表示同意,不按开关为高电平,表示反对,若按下开关的人数大于2人时,此时输出的二极管加正向电压,发光二极管被点亮,表决通过;反之,若按下开关的人数小于2人时,此时二极管未被点亮,表决没有通过,通过发光二极管的亮灭即可判断最终的结果。
1.以下是当按下的开关数目为三是的仿真图,由于表示通过的人数小于2,表决并被通过,因此LED红灯亮,如1-3图所示
1-3
2.当按下的开关数为2时,此时表决通过,LED发光,如1-4图所示:
1-4
4.注意事项:
(一)在进行课题设计前,首先应该充分了解AT89C51的工作原理,以及各引脚的功能,继而才能根据课题要求进行设计。
(二)应当注意当按下开关时,接的是低电平,因此在编辑程序时不要弄反以免出现错误。
(三)实验过程中应当细致认真,戒骄戒躁,在调试程序失误时,应当耐心检查,及时改正,学会运用仿真软件,在仿真时,应当找准所需器件,连线时避免连错或是漏连而导致仿真失误。
5.实物图
结 束 语
通过此单片机课题的选定,编程,调试,仿真到最后完成论文,心情是喜悦并且激动的,觉得做好一件事情并不是那么容易,关键是要看你对这件事情的态度问题,通过这次课题实验,我也对单片机这门课有了更加深刻的认识,它的用途,它的功能,它的方便之处,都通过这几天的研究得到了体会,而且对知识的巩固也起到了一定的作用。这次论文课题的编写,还有一个重要的认识就是,要学好一门课很容易,但是要真正能把它运动到实际中就难了,掌握一定的理论知识并且会做题还不够,关键是要怎么样去利用,所以,在今后的学习生活中,我要学会学以致用。另外,单片机是建立在C语言的基础之上,因此可知大学所学的课程时相互关联的,学好每一门课是非常重要的,作为通信专业的同学,我们更应该熟练操作并且掌握好这门功课,这对以后的不管是毕业论文还是所学知识都是很有帮助的。
致 谢
本课题在选题及研究过程中得到张老师的亲切关怀和悉心指导下完成的。她严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。从课题的选择到项目的最终完成,张老师都始终给予我细心的指导和不懈的支持。张老师不仅在学业上给我以精心指导,同时还在思想、生活上给我以无微不至的关怀,在此谨向张老师致以诚挚的谢意和崇高的敬意。
参考文献:李建忠.单片机原理及应用[M].西安:西安电子科技大学出版社.2008
谭浩强.C程序设计[M].北京:清华大学出版社.2005
附录A
仿真程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar a,b,c;
uint t,y,t1,y1;
sbit p20=P2^0;
sbit p21=P2^1;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p15=P1^5;
sbit p16=P1^6;
void daojishi5s();//5s倒计时子程序
void daojishi30s();//30s倒计时子程序
void panduan(); //判断程序
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint xms)
{
uint o,p;
for(o=xms;o>0;o--)
for(p=115;p>0;p--);
}
void main()
{
EA=1;
TMOD=0x11;
TH0=0x3C;
TL0=0xb0;
TH1=0x3C;
TL1=0xb0;
ET0=1;
ET1=1;
while(1)
{
daojishi5s();
panduan();
daojishi30s();
while(p10)
{
p14=1;
p15=1;
p16=1;
P0=0xff;
a=0;
b=0;
c=0;
}
}
}
void daojishi5s()//5s倒计时子程序
{
uchar l=2,i=11;
do
{
uchar j;
i--;
if(i<1)
{i=0;l=1;}
for(j=0;j<50;j++)
{
P0=table[i/10];
p20=1;
delay(10);
p20=0;
P0=table[i%10];
p21=1;
delay(10);
p21=0;
if(p11==0)a=1;
if(p12==0)b=1;
if(p13==0)c=1;
}
}while(l-1);
}
void daojishi30s()//30s倒计时子程序
{
uchar k=2,i=31;
do
{
uchar j;
i--;
if(i<1)
{i=0;k=1;}
for(j=0;j<50;j++)
{
P0=table[i/10];
p20=1;
delay(10);
p20=0;
P0=table[i%10];
p21=1;
delay(10);
p21=0;
}
}while(k-1);
}
void panduan() //判断程序
{
if(a+b+c>=2)
{
p15=0;
p16=0;
TR1=1;
}
else
{
p14=0;
TR0=1;
}
}
void zhongduansansuo() interrupt 1 //不通过
{
TH0=0x3c;
TL0=0xb0;
t++;
y++;
if(t==1) //设置频率一般不用改
p16=0;
if(t==50) //设置频率
{
p16=1;
t=0;
}
if(y==200)
{
y=0;
p16=1;
TR0=0;
}
}
void dingshizhongduan() interrupt 3 //通过
{
TH1=0x3c;
TL1=0xb0;
t1++;
y1++;
if(t1==1) //设置频率一般不用改
p16=0;
if(t1==2) // 设置频率
{
p16=1;
t1=0;
}
if(y1==200)
{
y1=0;
t1=0;
TR1=0;
}
}
附录B
元器件清单