脉冲控制器课程设计报告.docx
- 文档编号:5376208
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:16
- 大小:267.32KB
脉冲控制器课程设计报告.docx
《脉冲控制器课程设计报告.docx》由会员分享,可在线阅读,更多相关《脉冲控制器课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
脉冲控制器课程设计报告
--大学--学院
课程设计说明书
(20--/20--学年第-学期)
课程名称:
单片机课程设计
题目:
脉冲控制器
专业班级:
学生姓名:
学号:
指导教师:
设计周数:
设计成绩:
年月日
目录
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图……………………………………………………………………………………………6
2.2.5 共阴极数码管显示码对照表……………………………………………………………………7
2.3 元件清单……………………………………………………………………………………………7
2.4实际电路板成品图…………………………………………………………………………………8
2.5 程序流程图…………………………………………………………………………………………9
2.6 汇编程序……………………………………………………………………………………………10
2.6.1 程序源代码………………………………………………………………………………………10
2.6.2 代码分析………………………………………………………………………………………13
3.课程设计结论……………………………………………………………………………………………13
4.参考文献…………………………………………………………………………………………………15
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-2AT89C51引脚图
2.2.2 protel原理图
此图同时包含了P1.0输出通过三极管驱动蜂鸣器和LED模块,硬件复位模块,晶振模块,中断模块,I/O接口模块,由P2构成的段码输出模块,共阴极数码管模块。
可以作为原理分析和硬件调试的依据。
2.2.3 各功能模块电路设计
2.2.3.1 LED和蜂鸣器模块
因为课题要求为LED亮时蜂鸣器同时响,这样就
可以把它们并联到一起,鉴于单片机P1口带负载能力
有限,我们选择了NPN三极管9013作为驱动,同时,
为了给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左下角所示为晶振模块,由12MHz的晶振和两个20pF的电容构成,接到单片机的X1、X2端口,为单片机提供外部时钟脉冲,从而使单片机可以运行。
图2-2-3-2
2.2.3.3段码输出和共阴极数码管模块
图2.2.3.2
图2-2-3-3
如图2-2-3-3所示为段码输出和共阴极数码管模块,前者由P2口中的七个接口P2.0~P2.6构成,由P2口出来的段码经过限流电阻直接送给数码管显示,而不再需要CD4511的驱动,因为单片机本身有一定的带负载能力,可以驱动一个数码管。
共阴极数码管也容易连接,只是在焊接时要注意其引脚排列顺序和3、8引脚的接地(即电源负极)。
2.2.4 PCB图
2.2.5 共阴极数码管显示码对照表
字符
Dp
g
f
e
d
c
b
a
段码
0
1
1
0
0
0
0
0
0
3FH
1
1
1
1
1
1
0
0
1
06H
2
1
0
1
0
0
1
0
0
5BH
3
1
0
1
1
0
0
0
0
4FH
4
1
0
0
1
1
0
0
1
66H
5
1
0
0
1
0
0
1
0
6DH
6
1
1
0
0
0
0
1
0
7DH
7
1
1
1
1
1
0
0
0
07H
8
1
1
0
0
0
0
0
0
7FH
9
1
0
0
1
0
0
0
0
6FH
A
1
0
0
0
1
0
0
0
77H
B
1
0
0
0
0
0
1
1
7CH
C
1
1
0
0
0
1
1
0
39H
D
1
0
1
0
0
0
0
1
5EH
E
1
0
0
0
0
1
1
0
79H
F
1
0
0
0
1
1
1
0
71H
2.3 元件清单
AT89C51单片机1个
共阴极数码管1个
NPN三极管90131个
蜂鸣器1个
红色发光二极管1个
12MHz晶振1个
10uF电容1个
30pF电容2个
开关3个
360Ω电阻8个
1kΩ电阻1个
10kΩ电阻1个
导线若干
万用电路板1个
焊锡、松香适量
2.4实际电路板成品图
在焊接时我们以PCB板图作为参考,充分利用万用板的优势,比如成排交叉的电源线和地线、三孔相连的焊孔,我们本着尽量节省导线的原则安装元器件,而且不少地方我们利用了元器件的引脚当导线,更有少些短导线我们用从电阻上剪下的引脚做成裸导线代替,同时保证导线之间不发生短路的可能,这是我们的首创,也算是本电路板的一个亮点。
焊点全部在印刷电路一侧,多余导线全用明线,这样使得电路板做出来方便放置并容易检测,但由于万用板孔距的限制因而使实际接线不太美观,给它带来了小小的缺陷。
2.5 程序流程图
2.6 汇编程序
2.6.1 程序源代码
ORG0000H;程序初始化地址
RESET:
LJMPSTART
ORG0003H;INT0中断入口地址
LJMPINT00
ORG0013H;INT1中断入口地址
LJMPINT11
ORG0030H;程序起始地址
START:
MOVSP,#60H
MOVP1,#00H;P1口清零
MOVR0,#00H;R0清零
MOVA,#3FH;A初值为3FH,使显示为“0”
MOVP2,A;A送给P2口输出显示
MAIN1:
JBP3.2,MAIN2;INT0没有触发时跳转到MAIN2
LCALLDELAY;按键去抖
JBp3.2,MAIN2;如果为抖动刚为无效按键
CLREA;关总中断允许
PUSHACC;累加器值进栈
PUSHPSW;状态控制字进栈
SETBEA;开总中断允许
LJMPINT00;进入INT0的中断服务程序
JNBP3.2,$;INT0按下则保持当前位置
MAIN2:
JBP3.3,MAIN1;INT1没有触发时原地跳转
LCALLDELAY;按键去抖
JBP3.3,MAIN1;如果为抖动刚为无效按键
CLREA;关总中断允许
PUSHACC;累加器值进栈
PUSHPSW;状态控制字进栈
SETBEA;开总中断允许
LJMPINT11;进入INT1的中断服务程序
JNBP3.3,$;INT1按下则保持当前位置
INT00:
CLRP1.0;P1.0清零
CJNEA,#71H,INT000;如果显示不为“F”,则跳转到子程序
SETBIT0;IT0置1,外部中断0为负跳沿触发方式
SETBEX0;EX0置1,允许外部中断0产生中断
SETBP1.0;蜂鸣器响,LED亮
CLREA;关总中断允许
POPPSW;状态控制字出栈
POPACC;累加器值出栈
SETBEA;开总中断允许
RETI;返回中断
INT000:
SETBIT0;IT0置1,外部中断0为负跳沿触发方式
SETBEX0;EX0置1,允许外部中断0产生中断
MOVDPTR,#TAB;存入段码表
INCR0;R0加1
MOVA,R0;R0送到A
MOVCA,@A+DPTR;查表所得段码送给A
MOVP2,A;A中的断码数据送到P2口,使显示
CLREA;关总中断允许
POPPSW;状态控制字出栈
POPACC;累加器值出栈
SETBEA;开总中断允许
RETI;返回中断
INT11:
CLRP1.0;P1.0清零
CJNEA,#3FH,INT111;如果显示不为“0”,则跳转到子程序
SETBIT1;IT1置1,外部中断1为负跳沿触发方式
SETBEX1;EX1置1,允许外部中断1产生中断
SETBP1.0;蜂鸣器响,LED亮
CLREA;关总中断允许
POPPSW;状态控制字出栈
POPACC;累加器值出栈
SETBEA;开总中断允许
RETI;返回中断
INT111:
SETBIT1;IT1置1,外部中断1为负跳沿触发方式
SETBEX1;EX1置1,允许外部中断1产生中断
MOVDPTR,#TAB;存入段码表
DECR0;R0减1
MOVA,R0;R0送到A
MOVCA,@A+DPTR;查表所得段码送给A
MOVP2,A;A中的断码数据送到P2口,使显示
CLREA;关总中断允许
POPPSW;状态控制字出栈
POPACC;累加器值出栈
SETBEA;开总中断允许
RETI;返回中断
DELAY:
MOVR6,#200;延时20ms子程序
DEL1:
MOVR7,#100
DEL2:
DJNZR7,DEL2
DJNZR6,DEL1
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;段码表
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
END;程序结束
2.6.2 代码分析
结合程序流程图,本程序可以识为由INT0和INT1构成的两个“主程序”MAIN1和MAIN2,利用它们之间的相互跳转来等待两个中断的键入,在按键去抖之,保护好中断现场后可进入各自的中断子程序。
其中MAIN1的子程序INT00为加计数程序,本身自带判断显示值为“F”时再按键就使蜂鸣器响并且LED亮的子程序;同理MAIN2的子程序INT11为减计数程序INT000,本身自带判断显示值为“0”时再按键就使蜂鸣器响并且LED亮的子程序INT111。
送到P2口的段码则由读取事先编好的段码表来实现,段码表原理前面已述,这里从略。
这样一个思路清晰,原理简明的加减脉冲计数器程序就完成了它的功能。
调试程序是一件很棘手的事情,我们经过反复改正才得出了以上源代码并进行了仿真测试,若有不妥和需要改进之处欢迎仁人智士指出。
3、课程设计结论
经过两周的设计工作,我们最终完成了任务,实现了我们单片机控制的脉冲控制器功能电路,它来之不易,凝聚了我们组员的辛勤汗水努力过程。
从这个意义上它不只是一块有功能的电路板,更是我们劳动和智慧的象征。
课程设计是一个大项目,集中体现团队合作,协调配合的精神。
在设计之前我们已初步根据各自的特长分工进展。
组员A同学负责电路protel原理图及PCB图,B同学负责电路板焊接,C同学负责初始程序汇编工作,我负责设计说明书的编写,另外我们一起参与调试程序,其中B同学为程序的关键问题做出了很大贡献。
开始我们拿到任务书后感觉很简单,首先因为实现功能并不复杂,所谓的脉冲控制器其实就是加减计数器,其次用到的元件也不多,如同上面元件清单里所列。
但实际做起来就开始遇到这样或那样的麻烦,有时让人心急如焚。
原理图我参与了手稿部分,开始选择P0口作为段码输出,可后来由于还得加上拉电阻,又考虑到实验室缺少共阳极数码管,所以就改成了P2口作为段码输出。
在选择中k1、k2按键时也作了小小改动,开始由T0作为k1,INT0作为k2,可是同学建议如果采用中断控制最好两个都是外部中断,所以最后改为INT0和INT1作为两个按键。
另外AT89C51的引脚图和共阴极数码管引脚图我们都从互联网上得到了详细的资料,这样保证了主体电路原理图的正确性。
在指导老师初步检查并协助修改后我们得到更为合理的原理图,领取元件和工具后我们就开始焊接了。
我们组四名同学各有特长,确保每个环节都有能手熟工。
B在上学期电工电子实训中表现优良,特别是焊接技术做的很出色,他干活细致,又稳又准,焊点可靠美观,因而几乎全部的焊接工作都由他来做。
这个工作进展得挺顺利,并提前完成任务。
接下来的就是程序的初步汇编了,由C同学花了两三天时间完成的,与我们焊接工作平行进行,因此也没耽误进度。
开始我们挺为我们的程序感到骄傲,因为几乎全是自己编写的,但上机模拟仿真后却发现很多错误,后来经过改正后虽然没有了语法错误,但是仿真还是有很多不正常的地方。
我们又改,改了再调试,不成功再改……就这样我们反反复复地修改调试程序,分细程序的每一个逻辑的细节,并不断在失败中前进,可以说是步履维艰呀!
有时发现编程真是个棘手的事,往往事与愿违,理论上行得通的程序,可是一旦真正运行起来就发现很多根本无法想象的问题。
比如我们调试时多次遇到只能加计数不能减计数,而且在显示“F”后也没有报警灯亮,后来在单步执行程序时发现在问题,我们的循环跳转出现在毛病——程序只在MAIN1函数(即加计数)中循环,而MAIN2函数(即减计数)根本没有被执行到。
这个问题一直困扰了我们好几天都没有实质性的进展。
就在昨天下午我们带着辛辛苦苦重新大改动过的程序又去实验室仿真,但失败又一次劈头盖脸地砸了下来,这时离答辩不到一天了,时间紧迫。
人家好多人都已经调试成功并发给了单片机,很让我们羡慕,但更多的是心急。
与其急得团团转我和B选择了再次冷静分析程序出错的原因。
我们在单步执行时发现在问题关键所在,并由B同学想出了让人喜出望外的新想法,从而结开了心里的大疙瘩,我们最终取得了成功。
单片机编程成了我们这次课程设计最困难的阶段,因此留下了很深的印象,我想归根结底原因是我们对单片机原理学得不太扎实或者考虑问题不太周到,只是把自己的想法想得很有道理,但翻译成汇编语言时就出现了很多漏洞和不足,我想这正是理论联系实际的科学道理所在。
动手能力很重要,书本上的知识是死板的,只能作为参考,但人是活的,所遇到的麻烦和困难是不可知的,所以需要灵活运用和积累经验。
这次课程设计给我们带来了很大收获,重要的不是结果,而是艰苦而有意义的设计过程,是同学们互相合作、集思广益的团队精神,是不怕失败,耐得住性子,屡败屡战的艰苦奋斗精神和探求真理的顽强意志。
一个人的能力和精力是有限的,但集体可以创造出更大的成果。
无论单单对于这次课程设计还是为了以后步入工作岗位进行实践都是有很大好处的!
4、参考文献
[1]张毅刚,彭喜元,董继成.单片机原理及应用[M].北京:
高等教育出版社,2003:
39-117.
[2]王守中.51单片机开发入门与典型实例[M].北京:
人民邮电出版社,2007:
68-79.
课程设计
评语
课程设计
成绩
指导教师
(签字)
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 脉冲 控制器 课程设计 报告