单片机课程设计.docx

上传人:b****0 文档编号:17695588 上传时间:2023-08-03 格式:DOCX 页数:25 大小:100.92KB
下载 相关 举报
单片机课程设计.docx_第1页
第1页 / 共25页
单片机课程设计.docx_第2页
第2页 / 共25页
单片机课程设计.docx_第3页
第3页 / 共25页
单片机课程设计.docx_第4页
第4页 / 共25页
单片机课程设计.docx_第5页
第5页 / 共25页
单片机课程设计.docx_第6页
第6页 / 共25页
单片机课程设计.docx_第7页
第7页 / 共25页
单片机课程设计.docx_第8页
第8页 / 共25页
单片机课程设计.docx_第9页
第9页 / 共25页
单片机课程设计.docx_第10页
第10页 / 共25页
单片机课程设计.docx_第11页
第11页 / 共25页
单片机课程设计.docx_第12页
第12页 / 共25页
单片机课程设计.docx_第13页
第13页 / 共25页
单片机课程设计.docx_第14页
第14页 / 共25页
单片机课程设计.docx_第15页
第15页 / 共25页
单片机课程设计.docx_第16页
第16页 / 共25页
单片机课程设计.docx_第17页
第17页 / 共25页
单片机课程设计.docx_第18页
第18页 / 共25页
单片机课程设计.docx_第19页
第19页 / 共25页
单片机课程设计.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课程设计.docx

《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(25页珍藏版)》请在冰点文库上搜索。

单片机课程设计.docx

单片机课程设计

数字钟

目录

第一章、综述1

1.1AT89系列单片机1

1.2课题研究背景及其意义1

1.3硬件环境2

1.4软件环境2

第二章、课程设计说明2

2.1课程设计目的2

2.2课程设计要求2

2.3课程设计内容3

第三章、时钟显示的工作原理3

3.1单片机最小系统的硬件电路原理图3

3.2数码管硬件电路原理图4

3.3复位电路原理图5

3.4开关电路原理图5

3.5晶振电路原理图6

第四章、设计的部分内容说明6

4.1计时功能的实现与中断服务程序6

4.2设计中运用的指令说明7

第五章、心得体会7

第六章、参考文献8

附录(源程序):

9

 

 

 

 

 

 

 

 

 

 

 

第一章、综述

1.1AT89系列单片机

该课程设计中我们选用的芯片是AT89C51。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51是一个低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的Flash只读程序存储器和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。

    AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

1.2课题研究背景及其意义

数字钟是采用数字电路实现对.时,分,秒.数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

  本作品采用Atmel公司的AT89C51单片机,以汇编语言为程序设计的基础,设计一个用四位数码管显示时、分的时钟。

在实物图中,左边靠近电源的绿色发光二极管(长亮)是电源指示灯,表示的是5V稳定电源工作正常;单片机左下角红色发光二极管是秒灯,每闪烁一次表示时间走动一秒钟;按键正上方绿色发光二极管是设置灯,当时间正常走动时此时不亮,当第一次按下设置键(右键)时,此绿灯亮,同时秒时熄灭,且分钟的两位数码管出现闪烁,时间停止走动,进入校时状态,表示此时可以进行分钟的调整,当按一次加一键(左键)可实现分钟的加一功能,分钟以60分为极限,超出60分则返回数值0,从0再重新算起;如果再次按下设置键时,这时秒灯和设置灯仍旧保持熄灭和点亮状态,表示分钟的数码管停止闪烁,反过来表示小时的两位数码管则开始闪烁,此时可进行小时的调整,按加1键可实现小时的加1功能,小时调整以24为上限,同样超出24小时则从新回0;当第三次按下设置键时,数码管停止闪烁,设置灯熄灭,秒灯重新闪烁,时间以设定值计时。

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中断程序入口

RETI;外中断1中断返回

ORG001BH;定时器T1中断程序入口

LJMPINTT1;跳至INTT1执行

ORG0023H;串行中断程序入口地址

RETI;串行中断程序返回

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;50MS定时初值

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位修正值)

SETBTR0;开启定时器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)

ACALLADD1;分计时单元加1分钟

MOVA,R3;分数据放入A

CLRC;清进位标志

CJNEA,#60H,ADDHH;

ADDHH:

JCOUTT0;小于60分时中断退出

ACALLCLR0;大于或等于60分时分计时单元清0

MOVR0,#79H;指向小时计时单元(78H-79H)

ACALLADD1;小时计时单元加1小时

MOVA,R3;时数据放入A

CLRC;清进位标志

CJNEA,#24H,HOUR

HOUR:

JCOUTT0;小于24小时中断退出

ACALLCLR0;大于或等于24小时小时计时单元清0

OUTT0:

MOV72H,76H;中断退出时将分、时计时单元数据移

MOV73H,77H;输入对应显示单元

MOV74H,78H;

MOV75H,79H;

POPPSW;恢复状态字(出栈)

POPACC;恢复累加器

SETBET0;开放T0中断

RETIMOV73H,77H;

MOV74H,78H;

MOV75H,79H;

INTT1OUT:

POPPSW;恢复现场

POPACC;

RETI;中断退出

FLASH1:

JB01H,FLASH2;01H位为1时,转小时熄灭控制

MOV72H,7AH;01H位为0时,"熄灭符"数据放入分

MOV73H,7AH;显示单元(72H-73H),将不显示分数据

MOV74H,78H;

MOV75H,79H;

AJMPINTT1OUT;转中断退出

FLASH2:

MOV72H,76H;01H位为1时,"熄灭符"数据放入小时

MOV73H,77H;显示单元(74H-75H),小时数据将不显示

MOV74H,7AH;

MOV75H,7AH;

AJMPINTT1OUT;转中断退出

第五章、心得体会

一个星期的单片机课程设计很快就结束了,在这一周当中,虽然开始有点困难,但是经过我们们分工合作,合理地进行设计安排,再加上老师的耐心指导,我们们终于顺利地完成了本次单片机课程设计,同时也学到了很多东西。

在本次课程设计中,我们通过动手实践操作,进一步学习和掌握了单片机原理的有关知识,特别是程序的编程方面,加深了对单片机原理及应用技术的认识,进一步巩固了对单片机知识的理解,掌握简单单片机应用系统的设计、制作、调试的方法。

在设计时根据课题要求,复习相关的知识,查询相关的资料。

根据实验条件,找到适合的方案,找到需要的元器件及工具,进行实验。

这次的单片机课程设计重点是通过实践操作和理论相结合,提高动手实践能力,提高科学的思维能力,更在一周的时间了解了更多的有关单片机的知识,使知识更加丰富,使自己更加充实。

与此同时,我们也对团队分工合作有了进一步的认识,只有通过合理的分工合作,我们们才能够在短短一周的时间内完成设计任务,相信这对以后在社会上工作和学习会有很多帮助,让我们能更好的进入工作状态。

最重要的是,这次课程设计也增加了我们对问题的研究和探讨,在我们以后的学习中会有更多的帮助。

单片机作为我们们的主要专业课之一,虽然在大二开学初我们对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我们发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。

作为一名通信技术专业的大二学生,我们觉得做单片机课程设计是十分有意义的,而且是十分必要的。

虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我们发现效率很高,这是我们做这次课程设计的又一收获。

然后,要做好一个课程设计,就必须做到:

在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常德,但我们们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我们受益终身。

在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

我们们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。

通过这次课程设计我们也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。

在完成单片机课程设计后,我们们发现我们们还有许多不足,所学到的知识还远远不够,以至于还有一些功能不能被动完成。

但通过学习这一次实践,增强了我们们的动手能力,提高和巩固了单片机方面的知识,特别是软件方面。

从中增强了我们们的团队合作精神,并让我们们认识到把理论应用到实践中去是多么重要。

第六章、参考文献

(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;显示秒

MOV38H,#80H;中断

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2