单片机课程设计模板.docx

上传人:b****5 文档编号:8231563 上传时间:2023-01-30 格式:DOCX 页数:17 大小:117.40KB
下载 相关 举报
单片机课程设计模板.docx_第1页
第1页 / 共17页
单片机课程设计模板.docx_第2页
第2页 / 共17页
单片机课程设计模板.docx_第3页
第3页 / 共17页
单片机课程设计模板.docx_第4页
第4页 / 共17页
单片机课程设计模板.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机课程设计模板.docx

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

单片机课程设计模板.docx

单片机课程设计模板

《单片机原理及接口技术》

课程设计报告

 

课程设计题目:

电子时钟设计

专业班级电子信息工程102

学生姓名王辛悦

学号201005070610

成绩

2012年12月24日

目录

摘要1

1设计任务2

1.1功能要求2

1.2总体方案及工作原理2

1.3整体设计框图3

2系统硬件设计3

2.1器件选择3

2.1.1主要器件的型号3

2.2.2AT89C524

2.2.3调时电路6

2.2.4晶振电路方案6

2.2.5数码管显示7

2.2.6复位电路方案7

2.3硬件原理图8

3系统软件设计8

3.1基本原理9

3.2系统软件设计流程图9

3.3定时程序设计12

3.3.1数字时钟实现的基本方法:

12

3.3.2数字时钟程序设计步骤:

12

3.2软件清单13

4设计总结17

5.参考文献:

18

摘要

单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

而52单片机是各单片机中最为典型和最有代表性的一种,AT89C52单片机是一种带8K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器。

本设计是基于MCS51系列单片机中AT89C52所设计的一种高精度、智能化的数字时钟,可以实现键盘按键与数字动态显示并可以用音乐倒数的数字时钟/计时器。

本设计基于单片机技术原理,以单片机芯片AT89C52作为核心控制器,由单片机控制数码管的显示,修改设置时间采用操作方便的按键开关,整点报时系统使用有源蜂鸣器,通过硬件电路制作以及软件程序的编制,设计制作一个简单的数字时钟/计时器,包括以下功能:

时、分、秒24小时制输出显示、可随时使用按键实现时、分调整设置、具有秒表计时功能、能整点报时、定时闹铃等。

关键词:

单片机AT89C52共阳极数码管

 

1设计任务

时间是人类生活中不可或缺的重要元素。

如果没有时间的概念,社会将不会有所发展和进步,从古代的沙漏、十二天干地支,到后来的机械以及当今的石英钟,都充分显示出了时间的重要性,同时也代表着科技的进步,致力于计时器的研究和充分发挥时钟作用,将有着重要的意义。

电子时钟主要是利用电子技术将时钟电子化、数字化、多功能化、体积小、LCD显示界面好、可扩展性强等特点,被广泛应用于生活和工作中。

此次设计数字钟就是为了了解数字钟的原理,从而学会制作数字钟。

本次课程设计通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机原理与应用及C51程序设计》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。

1.1功能要求

时钟计时器要求用六位LED数码管显示时、分、秒,以24小时计时方式运行,使用按键开关可实现时分调整功能。

程序加载到单片机后电子钟从秒开始运行,进入时钟运行状态;第一次按下按键,进入调时位选可选择调整位;第二次按电子钟系统调整键,则电子钟进入调整状态,继续按数码管调整状态,此时可以进行时间的加调整,继续按另一按键此时可以进行时间的键调整。

最后一个开关为重启键,有复位功能。

1.2总体方案及工作原理

本设计中采用AT89c52芯片及7SEG-MPX4-CA数码管,一些独立式按键构成一个简单的数字电子钟。

设计中是采用单片机的内部定时器进行定时,没有用到专门的时钟芯片,因此具有一定的难度。

整个电子钟的工作原理是:

在正常的供电状态下,首先利用单片机定时,到了相应的时间由单片机将所需要显示的数据送到液晶显示器的输入口,当有键按下时则进入相应的按键调整状态,进行按键调整。

1.3整体设计框图

2系统硬件设计

2.1器件选择

2.1.1主要器件的型号

元件名称

数量

AT89C52

1

7SEG-MPX4-CA数码管

2

12MHZ晶振

1

510uF电解电容

1

30pF普通电容

2

二极管PNP

6

排阻

1

10K电阻

4

1K电阻

6

按钮

4

47uF电解电容

1

2.2.2AT89C52

单片机是把中央处理单元、随机存储器、只读存储器、定时/计数器以及I/O接口电路等主要部件集成在一块半导体芯片上的微型计算机。

虽然单片机只是一个芯片,但从组成和功能上看,它已具有了微型计算机系统的含义,从某种意义上说,一块单片机芯片就是一台微型计算机。

单片机是靠程序运行的,并且可以修改。

通过不同的程序实现不同的功能。

AT89C52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。

图1AT89C52单片机的基本结构

AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kB的可反复擦写的Flash只读程序存储器和256B的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052产品引脚兼容,片内置有通用8位中央处理器(CPU)和Flash存储单元。

图2AT89C52单片机的引脚

VCC:

电源。

GND:

接地。

P0口:

是双向8位三态I/O口,也即地址/数据总线复用口。

在访问外部数据存储器或程序存储器时,可分时用作低8位地址线和8位数据线;在FlashROM编程时,P0口接收(输入)指令字节;而在验证程序时,P0口输出指令字节。

P1口:

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

与8051不同P1.0和P1.1还可分别作为定时/计数器2的外部计数脉冲输入端(P1.0/T2)和捕捉方式时的外部输入端。

P2口:

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。

对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口输出P2锁存器的内容。

P3口:

P3口是一个带有内部上拉电阻的8位双向I/O口。

P3口能驱动4个LSTTL门电路。

在单片机中这8个引脚都有各自的第二功能,而在实际工作中,大多情况下都使用P3口的第二功能。

RST:

复位信号输入端。

要保持RST脚两个机器周期以上的高电平时间,才能使单片机复位。

ALE/PROG:

地址锁存允许信号。

PSEN:

外部程序存储器的读选通信号。

EA/VPP:

当EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。

当EA端保持高电平时,此间CPU访问并执行内部程序存储器的指令。

2.2.3调时电路

调时电路由“P1.1/P1.2/P1.3—按键—接地”构成,按下S1按键,选择需要调整的项目,此时电子时钟停止走动,此时若再按下S2键则进行加时调整;若按下S3键则进行减时调整。

时间调整从秒到时均完毕后,电子时钟开始走动,从而实现了时间调整功能。

图3调时电路原理图

2.2.4晶振电路方案

晶振电路的功能在于给单片机提供振荡时钟信号,使单片机正常工作。

本设计中采用了常用的晶振电路组成方案,具体如下图所示。

图4晶振电路

2.2.5数码管显示

引脚

功能

接口

1

e

PTB4

2

d

PTB3

3

h

PTB7

4

c

PTB2

5

g

PTB6

6

Cs3

PTC3

7

Cs0

PTC0

8

a

TPB0

9

f

PTB5

10

Cs1

PTC1

11

Cs2

PTC2

12

b

PTB1

2.2.6复位电路方案

复位电路的功能在于对单片机进行复位从而达到对整个电路复位的功能。

要达到目的则要求在复位按键按下后在RST引脚上要出现一个维持2个机器周期高电平[4]。

考虑到可以利用电容的电压不能突变(需要一定的充放电时间),于是采用如下复位电路。

图5复位电路

2.3硬件原理图

3系统软件设计

3.1基本原理

它是利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对10ms计数100次),“分”计数60次形成“时”,“时”计数24次并清零,然后数码管把他们的内容在相应的位置显示出来。

在具体的设计时定时器采用中断方式工作,对时钟的形成在中断程序中实现,在主程序只是对定时/计数器的定义初始化,调用显示程序和控制程序的初始化。

另外为了使用的方便,也设计了按键,可以通过按键对时分进行调整,这样程序就加了按键程序。

本设计的软件程序包括主程序、中断子程序、时钟显示子程序和延时子程序等等。

另外电路中有按键。

3.2系统软件设计流程图

这次的数字电子钟设计用到很多子程序,它们的流程图如下所示。

主程序是先开始,然后启动定时器,定时器启动后在进行按键检测,检测完后,就可以显示时间。

开始

启动定时器

按键检测

时间显示

图3-1主程序流程图

Y

按键处理是先检测秒按键是否按下,分按键如果按下,分就加1;如果没有按下,就检测时按键是否按下,时按键如果按下,时就加1;如果没有按下,就把时间显示出来。

 

图3-2按键处理流程图

 

Y

定时器中断时是先检测1分钟是否到,1分钟如果到,分单元就加1;如果没到,就检测1小时是否到,1小时如果到,时单元就加1,如果没到,就显示时间。

 

图3-3定时器中断流程图

时间显示是先分个位计算显示,然后是分十位计算显示,再就是时个位计算显示,然后是时十位显示。

3.3定时程序设计

单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。

采用的12MHz晶体,则计数频率为1MHz,即每过1us的时间计数器加1。

这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。

单片机的定时器/计数器具有4种工作方式,其控制字均在相应的特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器/计数器两种工作模式和4种工作方式。

定时器/计数器工作在方式0时,为13位的计数器,由TLX(X=0、1)的低5位和THX的高8位所构成。

TLX低5位溢出则向THX进位,THX计数溢出则置位TCON中的溢出标志位TFX.

当定时器/计数器工作于方式1,为16位的计数器。

本设计是单片机多功能定时器,所以单片机内部的定时器/计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。

3.3.1数字时钟实现的基本方法:

我们可把定时器的定时时间定为50ms。

这样,计数溢出20次即可得到时钟的最小计时单位:

秒。

而计数20次可以用软件实现。

秒计时是采用中断方式进行溢出次数的累积,计满20次,即得到秒计时。

从秒到分,从分到时是通过软件累加并进行比较的方法来实现的。

要求每满1秒,则“秒”单元中的内容闪一次,“秒”单元闪60,则“分”单元中的内容加1;“分”单元满60,则“时”单元中的内容加1;“时”单元满24,则将时、分、秒的内容全部清零。

3.3.2数字时钟程序设计步骤:

(1)选择工作方式,计算初值;

(2)采用中断方式进行溢出次数累计;

(3)从秒——分——时的计时是通过累加和数值比较实现的;

(4)时钟显示缓冲区:

时钟时间在方位数码管上进行显示,为此在内部RAM中要设置显示缓冲区,共6个地址单元。

显示缓冲区从左到右依次存放时、分数值,中间是秒在闪烁。

(5)主程序:

主要进行定时器/计数器的初始化编程,然后反复调用显示子程序的方法等待中断的到来。

(6)中断服务程序:

进行计时操作

(7)加1子程序:

用于完成对时、分、秒的加操作。

3.2软件清单

#include"reg51.h"

#definecharunsignedchar

//

charcodedis_7[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

/*共阳LED段码表"0""1""2""3""4""5""6""7""8""9""不亮"*/

charcodescan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列扫描控制字

chardatatimedata[6]={0x00,0x00,0x00,0x00,0x00,0x00};//计时单元数据初值,共6个

chardatadis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//显示单元数据,共6个数据

chardatacon1s=0x00,con04s=0x00,con=0X00;//秒定时用

sbitkey0=P1^0;

sbitkey1=P1^1;

sbitkey2=P1^2;

//

/****************/

//1毫秒延时函数//01000010

/***************/

delay1ms(intt)

{

inti,j;

for(i=0;i

for(j=0;j<120;j++)

;

}

/****************/

//键扫描子函数//

/****************/

keyscan()

{

EA=0;

if(key0==0)

{

delay1ms(10);

while(key0==0);

if(dis[con]==10)

{dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];}

con++;TR0=0;ET0=0;TR1=1;ET1=1;

if(con>=6)

{con=0;TR1=0;ET1=0;TR0=1;ET0=1;}

}

//

if(con!

=0)

{

if(key1==0)

{

delay1ms(10);

while(key1==0);

timedata[con]++;

if(timedata[con]>=10)

{timedata[con]=0;}

dis[con]=timedata[con];dis[6]=0x0a;

}

}

//

if(con!

=0)

{

if(key2==0)

{

delay1ms(10);

while(key2==0);

if(timedata[con]==0)

{timedata[con]=0x09;}

else{timedata[con]--;}

dis[con]=timedata[con];dis[6]=0x0a;

}

}

EA=1;

}

//

/***********/

//显示函数//

/**********/

scan()

{

chark;

for(k=0;k<6;k++)

{

P0=dis_7[dis[k]];P2=scan_con[k];delay1ms

(1);P2=0xff;

}

}

/*************/

//初始化函数//

/*************/

clearmen()

{

inti;

for(i=0;i<6;i++)

{

dis[i]=timedata[i];}

TH0=0x3C;TL0=0xB0;//50MS定时初值(T0计时用)

TH1=0x3C;TL1=0xB0;//50MS定时初值(T1计时用)

TMOD=0X11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;//

}

/**********/

//主函数//

/*********/

main()

{

clearmen();

while

(1)

{

scan();

keyscan();

}

}

/********************/

//1秒中断处理函数//

/*******************/

voidtime_intt0(void)interrupt1

{

ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;

con1s++;

if(con1s==20)

{

con1s=0x00;

timedata[0]++;

if(timedata[0]>=10)

{

timedata[0]=0;timedata[1]++;

if(timedata[1]>=6)

{

timedata[1]=0;timedata[2]++;

if(timedata[2]>=10)

{

timedata[2]=0;timedata[3]++;

if(timedata[3]>=6)

{

timedata[3]=0;timedata[4]++;

if(timedata[4]>=10)

{

timedata[4]=0;timedata[5]++;

}

if(timedata[5]==2)

{

if(timedata[4]==4)

{

timedata[4]=0;timedata[5]=0;

}

}

}

}

}

}

dis[0]=timedata[0];dis[1]=timedata[1];dis[2]=timedata[2];

dis[3]=timedata[3];dis[4]=timedata[4];dis[5]=timedata[5];

}

ET0=1;

}

/********************/

//0.4秒闪烁中断函数//

/*******************/

voidtime_intt1(void)interrupt3

{

EA=0;TR1=0;TH1=0x3C;TL1=0xB0;TR1=1;

con04s++;

if(con04s==8)

{

con04s=0x00;

dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];

}

EA=1;

}

//*********************结束***************************//

4设计总结

通过本次课程设计的制作,总结如下:

设计一个电路,首先要深刻理解其原理,并根据其原理进行电路的设计。

用理论指导实践可以达到事倍功半的效果,有坚实的理论做基础将会使设计变得得心应手。

设计的过程就是学习的过程,在设计过程中验证理论的正确性,弥补知识的漏洞。

正确对待设计过程中遇到的错误,遇到错误与问题要敢于面对并设法找到解决的办法。

通过对该电子时钟的设计过程,我查阅了不少相关资料,更深刻地认识和巩固了平时所学的知识,使理论与实践有机结合,提高了我对所学专业的兴趣并积累了一些相关经验。

我认为这就是一种很好的提高自身能力的方法。

我在上网找资料的同时也学到了许多东西,找到了很多学习单片机的网站,里面的内容都比较适合我初学者去学,有些网站还专门介绍这种单片机的类型、用法、功能等等。

过这个课程设计,使我发现,原来小小的一片单片机有这么强大的功能,能应用于各种领域。

都是觉得很神奇,人类真是聪明啊。

我应该在自己以后的学习中,不仅要有刻苦努力,要有钻研精神,还要有创新,对自己感兴趣的一定要用心去学。

虽然自己尽了很大的努力,但是还有很多不尽人意的地方,作为一个学电子信息工程的学生,我想我有必要通过这次课设更多的了解自己的不足,从而在以后的学习工作中不断增强自己的动手能力。

该设计还有很多缺陷。

今后我要加强学习,去认识更深层的科学知识,使我设计出来的东西更加完美。

要严格要求自己,就像严格要求设计的每一个细节一样。

一种端正的态度是一个系统设计成功的保障。

总的来说,这次设计的电子时钟还是比较成功的,在设计中遇到了很多问题,最后在老师和同学的帮助下,终于顺利解决,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。

5.参考文献:

[1]谭浩强著.C语言程序设计.第三版.北京:

清华大学出版社,2005.7

[2]郭天祥编著.新概念51单片机C语言教程.北京:

电子工业出版社,2009.1

[3]杨素行主编.模拟电子技术简明教程.第三版.北京:

高等教育出版社,2009.3

[4]李全利编著.单片机原理与接口技术.第2版.北京:

高等教育出版社,2009.1

[5]江思敏、陈明.Protel电路设计教程.第2版.北京:

清华大学出版社,2006.12

[6]朱清慧,Proteus教程:

电子线路设计、制版与仿真,清华大学出版社,2008,9

[7]郭文川,单片机原理与接口技术,中国农业出版社,2007,1

[8]杨加国.单片机原理与应用及C51程序设计.清华大学出版社,2009

(2)

[9]

 

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1