单片机Word格式文档下载.docx
《单片机Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
![单片机Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/29/5cb4a625-adf4-41cc-9c2e-9648edd3afd2/5cb4a625-adf4-41cc-9c2e-9648edd3afd21.gif)
当第三次按下设置键时,数码管停止闪烁,设置灯熄灭,秒灯重新闪烁,时间以设定值计时。
1.3硬件环境
一台完整的电脑,包括键盘、鼠标,最小硬盘空间1GHz,386,486,586及兼容机.640K基本内存,1M以上扩充内存,10M以上的显示内存,时钟电路显示板,USB串行口接线。
1.4软件环境
采用的是Windows操作系统,Keilc51系统软件,用汇编语言进行开发。
第二章、课程设计说明
2.1课程设计目的
1.利用所学过的知识,初步分析单片计算机控制系统的能力;
2.综合运用本专业方向所学知识,构成以单片机为核心控制系统的能力;
3.单片计算机控制系统实时软件的设计、编制与调试的能力;
4.单片计算机控制系统中模拟部件(包括电压及功率放大部件)以及常规传感部件的使用、调试的能力;
5.单片计算机控制系统综合调整及性能测试的能力;
6.实验结果分析、总结及撰写技术报告的能力。
2.2课程设计要求
1.掌握单片机最小系统的电路原理图;
2.熟知单片机的工作原理;
3.分小组共同编辑、编译软件;
4.调试要求:
1)数码管显示当前的时间值;
2)时间精度为0.5秒,由时、分、秒之间的分隔点闪烁体现;
3)四个按钮,P1.0用作“时”的设定、P1.1用作“分”的设定、P1.2用作“秒”的设定;
P1.3用作复位的设定
5.独立完成课程设计报告(必须有完整的源程序
2.3课程设计内容
利用单片机定时器制作数字时钟并可以实现时钟的控制。
(1)制作数字时钟系统
(2)可以控制时钟电路,P1.0选择控制时,分,秒,P1.1对时,分,秒进行自加
(3)灯的亮灭显示控制端,P3.7口黄灯亮表示控制时,P3.3口红灯亮表示控制分,红灯、黄灯一起亮表示控制秒。
(4)闪烁显示时钟
(5)调试数字时钟
(2)撰写课程设计报告
第三章、时钟显示的工作原理
3.1单片机最小系统的硬件电路原理图
图1单片机电路原理图
发光二极管导通时,产生一个正向的工作电流IF,工作电流根据发光二极管的材料、功率等不同,额定电流一般在10~40mA左右,发光二极管导通时的正向压降VF比较大,一般为1.5~3V(普通硅二极管约为0.7V)。
因此在正常使用中,为了保证发光二极管在电源电压V的作用下管子的工作电流不超过额定值,必须给发光二极管串联一只限流电阻R,R的阻值可由下式算出:
R=(V-VF)/IF。
其中V为工作电源电压,VF为发光二极管的正向压降,IF为额定工作电流。
从上面原理图1可知,当单片机的P1.7输出低电平(0V)时,有正向工作电流流过发光二极管,发光二极管就亮;
相反,当P1.7输出高电平(5V)时,发光二极管没有足够电压差产生工作电流,此时发光二极管不亮。
因此,程序中只需交替让单片机的P1.7输出低电平“0”和高电平“1”就可以让发光二极管闪烁发光。
3.2数码管硬件电路原理图
图2数码管及配件电路图
数码管管脚图说明:
0.5寸单联共阴高亮红色数码管
数字对应数码管显示控制转换字节(共阴编码)
显示--HGFE,DCBA--编码
0
--0011,1111--0x3F;
1
--0000,0110--0x06;
2
--0101,1011--0x5B;
3
--0100,1111--0x4F;
4
--0110,0110--0x66;
5
--0110,1101--0x6D;
6
--0111,1101--0x7D;
7
--0000,0111--0x07;
8
--0111,1111--0x7F;
9
--0110,1111--0x6F;
共阳为编码取反即可,
接线为高低端口对应接法。
备注:
第一脚的识别很简单,看管脚的底部,有一个方块型的就是第一脚。
或者正面(就是显示那面)朝你,左下角第一个为第一脚。
3.3复位电路原理图
图3复位电路原理图
当8051的ALE及/PSEN两引脚输出高电平,RST引脚高电平到时,单片机复位。
RST/VPD端的高电平,若直接由启动瞬间产生,则为启动复位,若通过按动按钮产生高电平复位称手动复位。
图中,上电时,接通电源,电容器C相当于瞬间短路,+5V加到了RST/VPD端,该高电平使8051全机复位。
若运行过程中,需要程序从头执行,只需按动按钮S,则直接把+5V加到了RST/VPD端,从而复位。
显然,该电路即可以上电复位,也可以手动复位,是常用复位电路之一。
3.4开关电路原理图
图4开关电路原理图
图为一开关电路,按键SB1是系统开机键,当其按下,使V15导通,V14基极被拉低,V14导通,系统通电。
单片机两个管脚与Power_on、Power_keep两处相连,当单片机上电后,Power_keep上输出高电平,保持V15处于导通状态,整个系统供电正常。
Power_on管脚用于定时检测SB1按键按下的时间长度,1s、2s、3s对应不同的工作状态,此时SB1作为功能键。
SB2作为系统关机键,按下后V15截止,系统断电整个电路其实也挺简单的了,不过总觉得按键SB2有些浪费,作为一个产品结构空间有限时,不允许这样的设计浪费,所以想把SB2解放出来另作功能键,而用SB1作为开关机键。
在目前的电路上,如果直接去掉SB2,用SB1定时按下使单片机
在Power_keep处输出一个低电平,让系统断电。
但有人说这样系统关机不可靠,大家分析一下是否真的不可靠?
我觉得这个关机电平是低电平,所以单片机断电后管脚上电平不会突变,低电平关机应该是可靠的吧。
3.5晶振电路原理图
图5晶振电路原理图
第四章、设计的部分内容说明
4.1计时功能的实现与中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。
计数器T0打开后,进入计时,满100毫秒后,重装定时。
中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。
这样然后根据进率,得到时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,实现时钟计时功能。
累加是用指令INC来实现的。
进入中断服务程序以后,执行PUSHPSW和PUSHA将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的保护现场?
.以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。
在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取与一般的RAM存取又有区别,对它的操作,要遵循“后进先出”的原则。
4.2设计中运用的指令说明
1指令:
是计算机所能执行的一种基本操作的描述,是计算机软件的基本单元。
2.中断:
中断是单片机实时地处理内部或外部事件的一种内部机制。
当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。
例如:
程序截取
MOV38H,#80H;
中断跳转
…………
Loophh:
RET;
断返回
3.堆栈:
堆栈是一个"
后进先出"
的主存区域,位于堆栈段中,使用SS段寄存器记录其段地址。
它只有一个出入口,即当前栈顶,栈顶是地址较小的一端(低端),它用堆栈指针寄存器SP指定。
堆栈有两种以字为单位的基本操作,对应两条基本指令:
进栈指令PUSH和出栈指令POP。
截取程序
Pushacc
…………;
堆栈进行保护现场及中断
TR:
Popacc
4.伪指令:
伪指令又称为伪操作,它不象机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,完成诸如数据定义、分配存储区、指示程序结束等功能。
程序截取
Org0000h;
汇编起始指令
Ljmpsetup
Org000BH
5.部分程序段的功能
a.中断入口程序;
;
ORG0000H;
程序执行开始地址
LJMPSTART;
跳到标号START执行
ORG0003H;
外中断0中断程序入口
RETI;
外中断0中断返回
ORG000BH;
定时器T0中断程序入口
LJMPINTT0;
跳至INTTO执行
ORG0013H;
外中断1中断程序入口
外中断1中断返回
ORG001BH;
定时器T1中断程序入口
LJMPINTT1;
跳至INTT1执行
ORG0023H;
串行中断程序入口地址
串行中断程序返回
b.闪动调时程序
T1中断服务程序,用作时间调整时调整单元闪烁指示
INTT1:
PUSHACC;
中断现场保护
PUSHPSW;
MOVTL1,#0B0H;
装定时器T1定时初值
MOVTH1,#3CH;
DJNZR2,INTT1OUT;
0.3秒未到退出中断(50MS中断6次)
MOVR2,#06H;
重装0.3秒定时用初值
CPL02H;
0.3秒定时到对闪烁标志取反
JB02H,FLASH1;
02H位为1时显示单元"
熄灭"
MOV72H,76H;
02H位为0时正常显示
c.主程序
START:
MOVR0,#70H;
清70H-7AH共11个内存单元
MOVR7,#0BH;
CLEARDISP:
MOV@R0,#00H;
INCR0;
DJNZR7,CLEARDISP;
MOV20H,#00H;
清20H(标志用)
MOV7AH,#0AH;
放入"
熄灭符"
数据
MOVTMOD,#11H;
设T0、T1为16位定时器
MOVTL0,#0B0H;
50MS定时初值(T0计时用)
MOVTH0,#3CH;
50MS定时初值
MOVTL1,#0B0H;
50MS定时初值(T1闪烁定时用)
MOVTH1,#3CH;
SETBEA;
总中断开放
SETBET0;
允许T0中断
SETBTR0;
开启T0定时器
MOVR4,#14H;
1秒定时用初值(50MS×
20)
START1:
LCALLDISPLAY;
调用显示子程序
JNBP3.7,SETMM1;
P3.7口为0时转时间调整程序
SJMPSTART1;
P3.7口为1时跳回START1
SETMM1:
LJMPSETMM;
转到时间调整程序SETMM
d.1秒计时程序
T0中断服务程序
INTT0:
PUSHACC;
累加器入栈保护
PUSHPSW;
状态字入栈保护
CLRET0;
关T0中断允许
CLRTR0;
关闭定时器T0
MOVA,#0B7H;
中断响应时间同步修正
ADDA,TL0;
低8位初值修正
MOVTL0,A;
重装初值(低8位修正值)
MOVA,#3CH;
高8位初值修正
ADDCA,TH0;
MOVTH0,A;
重装初值(高8位修正值)
开启定时器T0
DJNZR4,OUTT0;
20次中断未到中断退
ADDSS:
MOVR4,#14H;
20次中断到(1秒)重赋初值
MOVR0,#71H;
指向秒计时单元(71H-72H)
ACALLADD1;
调用加1程序(加1秒操作)
MOVA,R3;
秒数据放入A(R3为2位十进制数组合)
CLRC;
清进位标志
CJNEA,#60H,ADDMM;
ADDMM:
JCOUTT0;
小于60秒时中断退出
ACALLCLR0;
大于或等于60秒时对秒计时单元清0
MOVR0,#77H;
指向分计时单元(76H-77H)
分计时单元加1分钟
分数据放入A
CJNEA,#60H,ADDHH;
ADDHH:
小于60分时中断退出
大于或等于60分时分计时单元清0
MOVR0,#79H;
指向小时计时单元(78H-79H)
小时计时单元加1小时
时数据放入A
CJNEA,#24H,HOUR
HOUR:
小于24小时中断退出
大于或等于24小时小时计时单元清0
OUTT0:
中断退出时将分、时计时单元数据移
MOV73H,77H;
输入对应显示单元
MOV74H,78H;
MOV75H,79H;
POPPSW;
恢复状态字(出栈)
POPACC;
恢复累加器
开放T0中断
RETIMOV73H,77H;
INTT1OUT:
POPPSW;
恢复现场
中断退出
FLASH1:
JB01H,FLASH2;
01H位为1时,转小时熄灭控制
MOV72H,7AH;
01H位为0时,"
数据放入分
MOV73H,7AH;
显示单元(72H-73H),将不显示分数据
AJMPINTT1OUT;
转中断退出
FLASH2:
01H位为1时,"
数据放入小时
显示单元(74H-75H),小时数据将不显示
MOV74H,7AH;
MOV75H,7AH;
第五章、心得体会
一个星期的单片机课程设计很快就结束了,在这一周当中,虽然开始有点困难,但是经过我们们分工合作,合理地进行设计安排,再加上老师的耐心指导,我们们终于顺利地完成了本次单片机课程设计,同时也学到了很多东西。
在本次课程设计中,我们通过动手实践操作,进一步学习和掌握了单片机原理的有关知识,特别是程序的编程方面,加深了对单片机原理及应用技术的认识,进一步巩固了对单片机知识的理解,掌握简单单片机应用系统的设计、制作、调试的方法。
在设计时根据课题要求,复习相关的知识,查询相关的资料。
根据实验条件,找到适合的方案,找到需要的元器件及工具,进行实验。
这次的单片机课程设计重点是通过实践操作和理论相结合,提高动手实践能力,提高科学的思维能力,更在一周的时间了解了更多的有关单片机的知识,使知识更加丰富,使自己更加充实。
与此同时,我们也对团队分工合作有了进一步的认识,只有通过合理的分工合作,我们们才能够在短短一周的时间内完成设计任务,相信这对以后在社会上工作和学习会有很多帮助,让我们能更好的进入工作状态。
最重要的是,这次课程设计也增加了我们对问题的研究和探讨,在我们以后的学习中会有更多的帮助。
单片机作为我们们的主要专业课之一,虽然在大二开学初我们对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我们发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
作为一名通信技术专业的大二学生,我们觉得做单片机课程设计是十分有意义的,而且是十分必要的。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我们发现效率很高,这是我们做这次课程设计的又一收获。
然后,要做好一个课程设计,就必须做到:
在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;
要有一个清晰的思路和一个完整的的软件流程图;
在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;
要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;
在设计课程过程中遇到问题是很正常德,但我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我们受益终身。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我们也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
在完成单片机课程设计后,我们们发现我们们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。
但通过学习这一次实践,增强了我们们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。
从中增强了我们们的团队合作精神,并让我们们认识到把理论应用到实践中去是多么重要。
第六章、参考文献
(1)张迎新编著.《单片微型计算机原理》、《应用及接口技术(修订版)》.北京:
国防工业出版社,2004.1.
(2)谢维成等.《单片机原理与运用及C51程序设计》.北京:
清华大学出版社,
(3)李朝青编著.《单片机原理及接口技术》.北京:
航空航天大学出版社,1999.3.
(4)王福瑞等编著.《单片微机测控系统设计大全》.北京:
航空航天大学出版社,
(5)苏家健、曹柏荣、汪志锋编著,《单片机原理及应用技术》.高等教育出版;
StateCurrentequ51h
Org0000h;
Ljmpsetup;
无条件转移指令
Org000BH
ljmpLOOP1
Org001BH
ljmpViewRef
Org0030H
setup:
MOV40h,#00h;
秒控制
MOV41h,#59h;
分控制
MOV42h,#23h;
时控制
MOV30H,#02H
MOV31H,#03H;
显示时
MOV32H,#0AH;
显示横线
MOV33H,#05H
MOV34H,#09H;
显示分
MOV35H,#0AH
MOV36H,#00H
MOV37H,#00H;
显示秒
中断
MOVR0,#30H
MOVTMOD,#11h;
串行口方式设定
MOVTL1,#0B0H
MOVTL0,#0F0h;
设置定时器0的低四位初值
MOVTH1,#3CH
MOVTH0,#0D8h;
设置定时器0的高四位初值
SetbTR0
SetbTR1;
置位
MOVIE,#8AH;
闭合EAESET1ET0
MOV50H,#20;
定时1秒钟循环次数
MOVStateCurrent,#00h
MAIN:
MOVp1,#0ffh
JBp1.0,SLOOP1;
当P1.0等于1时跳转至SLOOP1
Lcalldelay
Lcalldelay
JBp1.0,SLOOP1
JNBp1.0,$;
当P1.0为零时进入死循环
INCStateCurrent;
加1
MOVa,StateCurrent
CjneA,#04h,SLOOP1;
当A等于#04H时跳转至SLOOP1
MOVStateCurre