脉冲控制器
科信学院
课程设计说明书
(2012 /2013学年第 二 学期)
课程名称 : 题 目 : 专业班级 : 学生姓名 : 学 号: 指导教师 : 设计周数 : 设计成绩 :
2013年07月11日
目录
1. 课程设计目的……………………………………………………………………………………3 2. 课程设计内容及设计过程说明…………………………………………………………………3 2. 1 功能介绍……………………………………………………………………………………3 2. 2. 1 电路原理………………………………………………………………………………3 2. 2. 2 protel 原理图…………………………………………………………………………4 2. 2. 3 各功能模块电路设计…………………………………………………………………5 2. 2. 3. 1 LED 和蜂鸣器模块……………………………………………………………5 2. 2. 3. 2 硬件复位模块和晶振模块……………………………………………………5 2. 2. 3. 3 段码输出和共阴极数码管模块………………………………………………6 2. 2.4 PCB 图…………………………………………………………………………………7 2. 2.5 共阴极数码管显示码对照表…………………………………………………………7 2. 3 元件清单……………………………………………………………………………………8 2. 4 实际电路板成品图…………………………………………………………………………9 2. 5 程序流程图…………………………………………………………………………………10 2. 6 汇编程序……………………………………………………………………………………11 2. 6. 1 程序源代码……………………………………………………………………………11 2. 6. 2 代码分析………………………………………………………………………………13 3. 课程设计结论……………………………………………………………………………………13 4. 参考文献…………………………………………………………………………………………14
1、课程设计目的
通过具体的功能电路进一步熟练protel99se 的应用,进一步熟练焊接技术,掌握万用电路板的使用方法和技巧,初步掌握单片机编程和调试的技能,例如本课题的数码管显示模块,中断程序设计等。学会利用相关工具检查电路和借助计算机或仿真仪器单步调试程序。注重团队合作,合理组织分工作业,耐心细心,不怕困难,各尽其力,勤动手动脑,善于分析问题,灵活解决问题,提出设计思路,模块组合与技巧的实际操作。通过这些具体的体验,为以后步入岗位从事相关单片机电路设计工作打下基础。
2、课程设计正文 2. 1 功能介绍
脉冲控制器可以实现手动加减计数。k1为加计数键,k2为减计数键,数码管可以显示0~9、A、b、C、d、E、F。另外当显示为“0”且按下k2键,或者当显示为“F”且按下k1键时,蜂鸣器响,同时LED 亮。 2. 2. 1 电路原理
由于课题要求采用中断控制,所以k1可由INT0表示,k2可由INT1表示,P1.0输出驱动蜂鸣器和LED 。通过适当编程就可以实现这样的要求:当按下k1时显示加1,而当按下k2时显示减1,当显示为“0”且按下k2键,或者当显示为“F”且按下k1键时,蜂鸣器响,同时LED 亮。另个在这里附带共阴极八段数码管引脚功能图和AT89C51单片机引脚功能图如下所示:
2.2-1 共阴极数码管引脚图 2.2-2 AT89C51引脚图 2. 2. 2 protel 原理图
此图同时包含了P1.0输出通过三极管驱动蜂鸣器和LED
模块,硬件复位模块,晶振模块,
中断模块,I/O接口模块,由P2构成的段码输出模块,共阴极数码管模块。可以作为原理分析和硬件调试的依据。
2. 2. 3 各功能模块电路设计
2. 2. 3. 1 LED 和蜂鸣器模块
因为课题要求为LED 亮时蜂鸣器同时响,这样就可以把它们并联到一起,鉴于单片机P0口带负载能力有限,我们选择了PNP 三极管9012作为驱动,同时,为了给LED 限流,我们又串
入了电阻,这样可以达到理想的结果。
模块电路如右图2-2-3-1所示
图2-2-3-1
2. 2. 3. 2 硬件复位模块和晶振模块
如图2-2-3-2下方所示为硬件复位模块,即单片机的最小系统,它由复位开关和10uF 电
容并联而成,分别接到单片机的EA 和RESET 接口,当开关闭合后,RESET 接口为高电平,实现复位功能。
如图2-2-3-2右上角所示为晶振模块,由6MHz 的晶振和两个30pF 的电容构成,接到单
片机的X1、X2端口,为单片机提供外部时钟脉冲,从而使单片机可以运行。
图2-2-3-2
2. 2. 3. 3 段码输出和共阴极数码管模块
图2-2-3-3
如图2-2-3-3所示为段码输出和共阴极数码管模块,前者由P0口中的七个接口P0.1~P0.7构成,由P0口出来的段码直接送给数码管显示,而不再需要CD4511的驱动,因为单片机本身有一定的带负载能力,可以驱动一个数码管。共阴极数码管也容易连接,只是在焊接时要注意其引脚排列顺序和3、8引脚的接地(即电源负极)。
2. 2.4 PCB 图
2. 2.5 共阴极数码管显示码对照表
2. 3 元件清单
AT89C51单片机 1个 共阴极数码管 1个 PNP 三极管9012 1个 蜂鸣器 1个 红色发光二极管 1个 6 MHz晶振 1个 10uF 电容 1个 30pF 电容 2个 开关 3个 330Ω电阻 4个 1k Ω电阻 1个 10k Ω电阻 9个 导线 若干 万用电路板 1个 焊锡、松香 适量
2. 4 实际电路板成品图
在焊接时我们以PCB 板图作为参考,充分利用万用板的优势,比如成排交叉的电源线和地线、三孔相连的焊孔,我们本着尽量节省导线的原则安装元器件,而且不少地方我们利用了元器件的引脚当导线,更有少些短导线我们用从电阻上剪下的引脚做成裸导线代替,同时保证导线之间不发生短路的可能。焊点全部在印刷电路一侧,多余导线全用明线,这样使得电路板做出来方便放置并容易检测,但由于万用板孔距的限制因而使实际接线不太美观,给它带来了小小的缺陷。
程序流程图
2. 5
2. 6 C 语言程序
2. 6. 1 程序源代码
#include
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^2;
sbit tixing=P0^1;
sbit key2=P3^3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num=0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
if(key1==0)
{
delay(5);
if(key1==0)
{
num++;
tixing=1;
if(num==16)
{
num=0;
tixing=0;
}
}
while(!key1);
}
else
if(key2==0)
{
delay(5);
if(key2==0)
{
tixing=1;
if(num==0)
{
num=16;
tixing=0;
}
num--;
}
while(!key2);
}
P2=table[num];
}
}
2. 6. 2 代码分析
结合程序流程图,本程序可以识为由INT0和INT1构成的两个“主程序”MAIN1和MAIN2,利用它们之间的相互跳转来等待两个中断的键入,在按键去抖之,保护好中断现场后可进入各自的中断子程序。利用“while ”和“for ”循环语句来实现“0~F”的加减计数循环,利用“if ”语句判断显示值为“F ”时或者“0”时,再按键就使蜂鸣器响并且LED 亮的子程序。送到P2口的段码则由读取事先编好的段码表来实现。
3、课程设计结论
经过两周的设计工作,我们最终完成了任务,实现了我们单片机控制的脉冲控制器功能电路,它来之不易,凝聚了我们组员的辛勤汗水努力过程。从这个意义上它不只是一块有功能的电路板,更是我们劳动和智慧的象征。
课程设计是一个大项目,集中体现团队合作,协调配合的精神。在设计之前我们已初步根据各自的特长分工进展。开始我们拿到任务书后感觉很简单,首先因为实现功能并不复杂,所谓的脉冲控制器其实就是加减计数器,其次用到的元件也不多,如同上面元件清单里所列。但实际做起来就开始遇到这样或那样的麻烦,有时让人心急如焚。
开始选择P0口作为段码输出,可后来由于还得加上拉电阻,为了简化设计电路,所以就改成了P2口作为段码输出。在选择中k1、k2按键时也作了小小改动,开始由T0作为k1,INT0作为k2,可是同学建议如果采用中断控制最好两个都是外部中断,所以最后改为INT0和INT1作为两个按键。
另外AT89C51的引脚图和共阴极数码管引脚图我们都从互联网上得到了详细的资料,这样保证了主体电路原理图的正确性。
在指导老师初步检查并协助修改后我们得到更为合理的原理图,领取元件和工具后我们就开始焊接电路板了。经过反复的设计与布局,焊板工作顺利完成。
接下来的就是程序的编写了,我们花了好几天的时间完成编写,期间参考了不少书籍资料和网络资料,但刚开始使用计算机模拟仿真后却发现很多错误,后来经过一边一边的改正和调试,终于在计算机仿真上成功实现所要求的功能。但仿真成功不代表实际成功,理论上行得通的程序,真正运行起来就未必能够成功。程序下载进单片机之后,运行功能仍然有问题,数码管的显示不正常,后来我们又一遍一遍的查找问题,将可能出现问题的地方一个一个排查,最终终于排除故障,成功实现脉冲控制器的功能。
这次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在老师的指导下,
终于迎刃而解。同时,在老师的身上我们学也到很多实用的知识,在此我们对指导老师表示感谢!感谢老师辛勤的工作,透彻的讲解,耐心的点拨以及不厌其烦的纠正我们的错误。同时,对给过我们帮助的所有同学和实验室的老师表示忠心的感谢!
课程设计是对课本知识的巩固和加强,由于课本上的知识太多,平时课上的学习并不能很好的理解和运用这些知识,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多综合布线设计过程中的细节环节,对其在有了更多的认识。有些平时不太懂得问题,做完课程设计也就迎刃而解了,而且印象深刻。通过这次课设,我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,以后还需更加努力。
通过两周的课程设计,也加深了我对团队精神的认识。我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。某个人的离群都可能导致整项工作的失败。团结协作是我们实习成功的一项非常重要的保证。而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
此次的课程设计,我学到了很多课本上学不到的东西,比如独立思考解决问题,出现差错的随机应变,和与人合作共同提高。这些都让我受益非浅。两个星期的实习,一度热情高涨,也曾无比失落,有欢笑,也有汗水。从开始时满腔热情到中途的挥洒汗水再到最后成功的喜悦,点点滴滴无不令我回味无长。这份财富,会伴随这我一直前进。
最后,再次感谢老师的细心指导,感谢学校给我们这次实习的机会,感谢实验室提供的器件和好的学习环境,也同样谢谢其他各组同学的无私帮助!
4、参考文献
[1]张毅刚,彭喜元,董继成.《单片机原理及应用》.北京:高等教育出版社.2003
[2]王守中.《51单片机开发入门与典型实例》.北京:人民邮电出版社.2007
[3]龚运新.《单片机C 语言开发技术》.北京:清华大学出版社.2006.10
[4]王东锋,王会良,董冠强.《单片机C 语言应用100例》.电子工业出版社.2009