科信学院课程设计说明书(2012 /2013学年第二学期)课程名称:《单片机应用》课程设计题目:脉冲控制器专业班级:电气2班学生姓名:赵永章学号:100062223指导教师:段广玉王静爽韩昱设计周数:两周设计成绩:2013年07月11日目录1. 课程设计目的................................................................................................32. 课程设计内容及设计过程说明...........................................................................32.1功能介绍................................................................................................32.2.1电路原理..........................................................................................32.2.2protel原理图....................................................................................42.2.3各功能模块电路设计...........................................................................52.2.3.1LED和蜂鸣器模块.....................................................................52.2.3.2硬件复位模块和晶振模块............................................................52.2.3.3段码输出和共阴极数码管模块......................................................62.2.4 PCB图.............................................................................................72.2.5 共阴极数码管显示码对照表..................................................................72.3元件清单................................................................................................82.4实际电路板成品图....................................................................................92.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.2protel原理图此图同时包含了P1.0输出通过三极管驱动蜂鸣器和LED模块,硬件复位模块,晶振模块,中断模块,I/O接口模块,由P2构成的段码输出模块,共阴极数码管模块。
可以作为原理分析和硬件调试的依据。
2.2.3各功能模块电路设计2.2.3.1LED和蜂鸣器模块因为课题要求为LED亮时蜂鸣器同时响,这样就可以把它们并联到一起,鉴于单片机P0口带负载能力有限,我们选择了PNP三极管9012作为驱动,同时,为了给LED限流,我们又串入了电阻,这样可以达到理想的结果。
模块电路如右图2-2-3-1所示图2-2-3-12.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.4PCB图2.2.5共阴极数码管显示码对照表字符Dp g f e d c b a 段码0 1 1 0 0 0 0 0 0 3FH1 1 1 1 1 1 0 0 1 06H2 1 0 1 0 0 1 0 0 5BH3 1 0 1 1 0 0 0 0 4FH4 1 0 0 1 1 0 0 1 66H5 1 0 0 1 0 0 1 0 6DH6 1 1 0 0 0 0 1 0 7DH7 1 1 1 1 1 0 0 0 07H8 1 1 0 0 0 0 0 0 7FH9 1 0 0 1 0 0 0 0 6FHA 1 0 0 0 1 0 0 0 77HB 1 0 0 0 0 0 1 1 7CHC 1 1 0 0 0 1 1 0 39HD 1 0 1 0 0 0 0 1 5EHE 1 0 0 0 0 1 1 0 79HF 1 0 0 0 1 1 1 0 71H 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程序流程图开始初始化变量K1按下?N延时10msYK1仍按下?NY关蜂鸣器和LED显示是否为“F”?蜂鸣器响、LED亮Y数码管显示加1N返回K2按下?N延时10msYK2仍按下?NY关蜂鸣器和LED显示是否为“0”?蜂鸣器响、LED亮Y数码管显示减1N返回2.6C语言程序2.6.1程序源代码#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit 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);}elseif(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、课程设计结论经过两周的设计工作,我们最终完成了任务,实现了我们单片机控制的脉冲控制器功能电路,它来之不易,凝聚了我们组员的辛勤汗水努力过程。
从这个意义上它不只是一块有功能的电路板,更是我们劳动和智慧的象征。
课程设计是一个大项目,集中体现团队合作,协调配合的精神。
在设计之前我们已初步根据各自的特长分工进展。