单片机课程设计报告-日历 - 图文

更新时间:2024-04-30 20:32:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

单片机原理与应用课程设计

题 目: 系 部:

专 业: 班 级:

学生姓名: 学 号: 指导教师:

2013年 12 月 22 日

目 录

1 设计任务与要求 ............................................ 1

1. 1 设计任务 ........................................... 1 1.2 设计要求 ........................................... 1 2 设计方案 .................................................. 1

2.1 设计思路 ........................................... 1 2.2 芯片选择 ........................................... 1

2.2.1 单片机STC89C52 ................................ 1 2.2.2 DS1302芯片 .................................... 2 2.2.3 LED数码管 ..................................... 2

2.2.4 MAX232功能简介. . . . . . . . . . . . . . . . . . . . . .4 2.2.5 74LS174功能简介. . . . . . . . . . . . . . . . . . . . . 4 3 硬件电路设计 .............................................. 5

3.1 电路设计框图 ........................................ 5 3.2 主要单元电路的设计 ................................. 5

3.2.1 单片机主控制模块的设计 ........................ 5 3.2.2 时钟电路模块的设计 ............................ 6

3.2.3 显示模块电路................................... 6 4.1 计算与分析 ......................................... 7 5 调试过程 .................................................. 7

5.1 硬件调试 ........................................... 7

5.1.1 硬件电路故障 .................................. 7 5.1.2 硬件调试方法 .................................. 7 5.2 软件调试 ........................................... 8

5.2.1 软件电路故障 .................................. 8 5.2.2 软件调试方法 .................................. 8

6 结论 ...................................................... 9 7 附录 ..................................................... 10

7.1 电子日历PCB图 ..................................... 10 7.2 电子日历实物图 ..................................... 10 7.3 元件清单. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11 7.4 源程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12 参考文献 ................................................. 24 4 主要参数计算与分析 ........................................ 7

单片机课程设计说明书

1 设计任务与要求

1. 1 设计任务

本课题实验主要采用STC89C52芯片和DS1302芯片与LCD1602液晶显示屏等芯片来完成一个简易的电子万年历。改万年历可以显示年月日、时分秒,并且年月日与时分秒可以通过手动翻页显示。

1.2 设计要求

设计一个以单片机为核心的电子万年历,可实现功能: (1)显示年、月、日、时、分和秒功能; (2)具备年、月、日、时、分和秒校准功能;

2 设计方案

2.1 设计思路

系统分为主控模块、时钟电路模块、温度检测模块、按键扫描模块、LCD显示模块、电源电路、复位电路、晶振电路等模块。主控模块采用AT89C51单片机,按键模块用四个按键,用于调整时间,显示模块采用LCD1602,时钟电路模块采用DS1302时钟芯片实现对时间、日期的操作。

2.2 芯片选择

2.2.1单片机(AT89C52) (一)AT89C52的介绍

AT89C52单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O接口电路等一台计算机所需要的基本功能部件,AT89C52单片机内包含下列几个部件:

(1) 一个8位CPU;

(2)一个片内振荡器及时钟电路; (3)4K字节ROM程序存储器; (4)128字节RAM数据存储器; (5)两个16位定时器/计数器;

(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路; (7)32条可编程的I/O线(四个8位并行I/O端口); (8)一个可编程全双工串行口;

(9)具有五个中断源、两个优先级嵌套中断结构。 (二) AT89C52单片机的部分管脚说明:

1

单片机课程设计说明书

AT89C52单片机采用40条引脚双列直插式器件,引脚除5V( 40脚)和电源地( 20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分:

STC89C52引脚图 STC89C52实物图 (三)另外介绍一下输入输出引脚(本系统只用到P0、P1、P2口):

(1) P0端口[P0.0-P0.7] 是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8个TTL。

对内部Flash程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。

(2) P1端口[P1.0-P1.7]是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。

对内部Flash程序存储器编程时,接收低8位地址信息。

(3) P2端口[P2.0-P2.7]是一个带有内部上拉电阻的8位双向I/0端口。输出时可驱动4个TTL。端口置1时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash程序存储器编程时,接收高8位地址和控制信息。

在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变

2.2.2 DS1302芯片

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补

2

单片机课程设计说明书

偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。

图2.2.2 DS1302引脚功能图

DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc>2.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。

2.2.3 LED数码管

本课程设计采用共阳极数码管

3

单片机课程设计说明书

2.2.4 MAX232

第一部分是电荷泵电路:由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。

第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。

TTL/CMOS数据从11引脚(T1IN)、10引脚(T2IN)输入转换成RS-232数据从14脚(T1OUT)、7脚(T2OUT)送到电脑DB9插头;DB9插头的RS-232数据从13引脚(R1IN)、8引脚(R2IN)输入转换成TTL/CMOS数据后从12引脚(R1OUT)、9引脚(R2OUT)输出。

第三部分是供电:15脚GND、16脚VCC(+5v)。 2.2.5 74LS174

74LS164 为 8 位移位寄存器,其主要电特性的典型值如下:54/74164 185mW 54/74LS164 80mW

当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。串行数据输入端(A,B)可控制数据。当 A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0为低电平。当A、B有一个为高电平,则另一个就允许输入数据,并在CLOCK上升沿作用下决定Q0的状态。引脚: CLOCK :时钟输入端

CLEAR: 同步清除输入端(低电平有效) A,B :串行数据输入端 QA-QH: 输出端

4

单片机课程设计说明书

3 硬件电路设计

3.1 电路设计框图

DS1302时钟控制电路 手动键盘控制电路 STC89C52RC单片机主控电路 电源驱动电路 LED数码管显示电路 图3.1 电路设计框图

3.2 主要单元电路设计

单元电路的设计包括主控制系统、时钟电路模块、显示模块、复位电路和稳压电路的设计。

3.2.1 单片机主控制模块的设计

单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和30PF电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和30PF电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。

图3.2.1 主控制系统

5

单片机课程设计说明书

3.2.2 时钟电路模块的设计

如图所示DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。I/O为串行数据输入端(双向)。SCLK始终是输入端。

图3.2.2 DS1302的引脚图

3.2.3 显示模块电路

显示电路采用3位共阳极LED数码管。内部的三个数码管共用a~dp这8根数据线,共有12个引脚,引脚排列依然是从左下角的那个脚(1脚)开始,以逆时针方向依次为1~12脚。数码显示管需要74LS164来驱动。

图3.2.3 数码管与74LS164驱动电路

6

单片机课程设计说明书

4 主要参数计算与分析

4.1 计算与分析

本设计完成了设计任务的所有要求。单片机采用STC89C52,编译环境为keil,程序使用C语音进行编写。电路设计使用proteus仿真软件进行仿真调试,在Altium Designer上设计原理图并绘制PCB图。设计硬件制作比较顺利。接着,主要是程序的调试。程序调试的难点在于设计的功能模块过多,程序结构比较复杂,使得调试起来比较费时间。完成设计任务的要求1:显示年月日、时分秒。2:具有可调整日期和时间功能。

5 调试过程

5.1 硬件调试

单片机应用系统的硬件和软件调试是交叉相互进行的,但通常是先排除样机中明显的硬件故障,尤其是电源故障,才能安全地和仿真器相连,进行综合调试。

5.1.1 硬件电路故障

(1)错线、开路、短路

解决方法:在画原理图时仔细检查、校正即可解决。 (2)元器件损坏

解决方法:在设计过程中要明确各元器件的工作条件,严格按照元器件正常工况下进行操作,损坏的元器件要及时更换,以免损坏其他元件或影响电路功能的实现。

(3)电源故障

解决方法:电源必须单独调试好以后才能加到系统的各个部件中。当所有部分在该电源作用下都能正常工作,就选用该电源。

5.1.2 硬件调试方法

本设计调试过程中所用的调试方法是静态测试:

在样机加电之前,首先用万用表等工具,根据硬件电器原理图和装配图仔细检查样机线路的正确性,并核对元器件的型号、规格和安装是否符合要求。第二步是加电后检查各个插件上引脚的电位,仔细测量各点电位是否正常,尤其应注意单片机插座上的各点电位,若出现较高电压值,联机时将会损坏仿真器。第三步是在不加电情况下,除单片机以外,插上所有的元器件,最后用仿真适配器将样机的单片机插座和仿真器的仿真接口相连,为联机调试做准备。

7

单片机课程设计说明书

5.2 软件调试

5.2.1 软件电路故障

设计软件部分可能出现这种错误的现象:

(1)当以断点或连续方式运行时,目标系统没有按规定的功能进行操作或什么结果也没有,这是由于程序转移到意外之处或在某处死循环所造成的。

解决方法:在采用实时多任务操作系统时,错误可能在操作系统中,没有完成正确的任务调度操作,也可能在高优先级任务程序中,该任务不释放处理器,使CPU在该任务中死循环。通过对错误程序的修改使其实现预期的功能。

(2)结果不正确

对于本设计而言,由于采用的是单片机C51语言,在检查程序时,需要按模块一步步查询、修改,直到所有模块都能正常工作,则显示结果会达到预期值。

5.2.2 软件调试方法

软件调试所使用的方法有:计算程序的调试方法、I/O处理程序的调试法、综合调试法等。

(1)计算程序的调试方法

根据计算程序的功能,事先准备好一组测试数据。调试时,用仿真器的写命令,将数据写入计算程序的参数缓冲单元,然后从计算程序开始运行到结束,运行的结果和正确数据比较,如果对有的测试数据进行测试,都没有发生错误,则该计算程序调试成功;如果发现结果不正确,改用单步运行方式,即可检查出错误所在。

(2)I/O处理程序的调试

对于A/D转换一类的I/O处理程序是实时处理程序,因此一般用全速断点运行方式或连续运行方式进行调试。

(3)综合调试

综合调试一般采用全速断点运行方式,这个阶段的主要工作是排除系统中遗留的错误以便提高系统的动态性能和精度。在综合调试的最后阶段,应在目标系统的晶振频率内工作,使系统全速运行目标程序,实现了预定功能技术指标后,便可将软件固化,然后在运行固化的目标程序,成功后目标系统便可脱机运行。一般情况下,这样一个应用系统就算研制成功。

8

单片机课程设计说明书

6 结论

本次基于单片机STC89C52等器件制作一个电子万年历。用单片机进行数据控制、处理,送到显示器显示,硬件结构简单,所用元件较少,大大降低了制作成本。软件采用C语言实现,程序简单可读写性强,效率高。与传统的电路相比,具有方便操作、处理速度快、稳定性高、性价比高的优点,具有一定的使用价值。

刚开始接到课程设计任务,认为挺简单的,然而真正开始动手制作时才知道并不是那么简单,我和同组的组员了无头绪,在不断查阅资料,相互讨论,以及请教指导老师之后,有了突破性进展;紧接着,我们的设计有了细致的分工,分工的同时大家经常一起探讨设计过程中出现的种种问题,并将不懂的请教老师解答,最终在大家不懈努力下,课程设计成功完成。

实习的结果是我们不再是约束在理论上,而是锻炼了我们的动手能力和分析、解决问题的能力,积累经验,培养按部就班,一丝不苟的工作和对所学知识的综合应用能力,了解了很多课本上学不到的知识,设计中有好多问题都是因为理论知识不扎实,概念的模糊,使我们明白要把所学到的理论转化为实践需要一段努力学习的过程;在做一个设计的过程中,一定要注意理论和实践同步进行,光有理论知识还是远远不够的,要用实践去检验理论,用理论指导实践。

这样的实践环节在我的学生生涯是很难得的,也为我们以后步入社会开始工作打下了一定的基础,最后我也要感谢组里的同学们,只有在他们团结协作下,本次课程设计才可以顺利进行并实现所有功能,同时我也明白了团结协作的重要性。由于本人水平有限,在技术指标和论文写作中可能存在一些缺陷,恳请各位老师批评指教。

9

单片机课程设计说明书

7 附录

7.1 电子日历PCB图

7.2 电子日历实物图

10

单片机课程设计说明书

7.3 元件清单

序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 器件名称 单片机 40脚IC座 1302芯片 8脚IC座 晶振 晶体 瓷片电容 电解电容 三极管 LED 电阻 电阻 排阻 电阻 MAX813座 MAX813 独石电容 自锁开关 DS1302芯 1302 IC座 接触开关 串行口 电源接线口 保险丝座 保险丝 规格、封装 STC89C52 DS1302 、DIP8 32.768K 11.0592MHz 30PF 1000uF/25v 9015(PNP) TO-92 SP410561N 222 331 9013 202 104 Power 数量 1 1 1 1 1 1 2 1 7 2 4 8 4 6 1 1 5 1 1 1 4 1 1 1 1 备注 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 基本配置 图7.3.3 单片机课程设计器件清单

11

单片机课程设计说明书

? 7.4 源程序

#include #include

#define uchar unsigned char #define uint unsigned int

#define th0 0xf1 #define tl0 0xff

sbit simuseri_CLK=P2^5; //用P2^5模拟串口时钟 sbit simuseri_DATA=P2^4; //用P2^4模拟串口数据

sbit SEG5=P0^0; sbit SEG4=P0^1; sbit SEG3=P0^2; sbit SEG2=P2^6; sbit SEG1=P2^7; sbit SEG0=P0^7;

sbit a0=ACC^0;

sbit ss=P1^0;//开始键

sbit sec=P1^1;//秒加&1302暂停 sbit min=P1^2;//分加 sbit hr=P1^3;//时加

unsigned char temp;

unsigned char a=0,flag=0,flag2=0; //code 0xf5};

//共阴数码管 0-9 '-' '熄灭‘表

char

unsigned

unsigned

char

dis_code[]={~0xe7,~0xa0,~0x97,~0xb5,~0xf0,~0x75,~0x77,~0xa1,~0xf7,~

dis_code[]={0x18,0x5F,0x68 ,0x4A,0x0F,0x8A,0x88,0x5E, 0x08,0x0A};

12

单片机课程设计说明书

unsigned char hex_bcd_sec(unsigned char temp) {

return (((temp/10)<<4)|(temp)); }

unsigned char bcd_hex_min(unsigned char temp) {

return ((temp&0x70)>>4)*10+(temp&0x0f); }

unsigned char hex_bcd_min(unsigned char temp) {

return (((temp/10)<<4)|(temp)); }

unsigned char bcd_hex_hr(unsigned char temp) {

return ((temp&0x30)>>4)*10+(temp&0x0f); }

unsigned char hex_bcd_hr(unsigned char temp) {

return (((temp/10)<<4)|(temp)); }

void INTT0() {

TMOD|=0x01;//定时器设置 16位 TH0=th0; TL0=tl0; ET0=1; TR0=1; EA=1; }

void init1() {

if(sec==0) { delay(2); if(sec==0) {

18

单片机课程设计说明书

while(!sec); TR0=0;

temp=bcd_hex_sec(ReadSet1302(0x81))+1;

if(temp==60) temp=0;

WriteSet1302(0x80,hex_bcd_sec(temp)|0x80); TR0=1; } }

if(min==0) { delay(2); if(min==0) {

while(!min); TR0=0;

temp=bcd_hex_min(ReadSet1302(0x83))+1; if(temp==60) temp=0;

WriteSet1302(0x82,hex_bcd_min(temp)); TR0=1; } }

if(hr==0) { delay(2); if(hr==0) {

while(!hr); TR0=0;

temp=bcd_hex_hr(ReadSet1302(0x85))+1; if(temp==24) temp=0;

WriteSet1302(0x84,hex_bcd_hr(temp)); temp=0; TR0=1; } } }

void init2() {

if(sec==0)

19

单片机课程设计说明书

{ delay(2); if(sec==0) {

while(!sec); TR0=0;

temp=bcd_hex_sec(ReadSet1302(0x87))+1;

if(temp==32) temp=1;

WriteSet1302(0x86,hex_bcd_sec(temp)|0x80); TR0=1; } }

if(min==0) { delay(2); if(min==0) {

while(!min); TR0=0;

temp=bcd_hex_min(ReadSet1302(0x89))+1; if(temp==13) temp=1;

WriteSet1302(0x88,hex_bcd_min(temp)); TR0=1; } }

if(hr==0) { delay(2); if(hr==0) {

while(!hr); TR0=0;

temp=bcd_hex_hr(ReadSet1302(0x8d))+1; if(temp==23) temp=0;

WriteSet1302(0x8c,hex_bcd_hr(temp)); temp=0; TR0=1; } } }

20

单片机课程设计说明书

void main() {

uchar miao,second;

// Init_DS1302(); //将1302初始化,如果1302使用备用电池,这条指令可以不用。

//否则每次程序启动重写1302,造成备用电池存储的时间,无法使用。 INTT0();

miao=ReadSet1302(0x81); second=miao;

WriteSet1302(0x80,second&0x7f); while(1) {

/* if(ss==0)

{ delay(2);

if(ss==0)

{

while(!ss);TR0=0;

WriteSet1302(0x80,0x7f&ReadSet1302(0x81)); TR0=1;

} }*/

/*if(sec==0) { delay(2); if(sec==0) {

while(!sec); TR0=0;

temp=bcd_hex_sec(ReadSet1302(0x81))+1;

if(temp==60) temp=0;

WriteSet1302(0x80,hex_bcd_sec(temp)|0x80); TR0=1; } }

if(min==0) { delay(2); if(min==0)

21

单片机课程设计说明书

{

while(!min); TR0=0;

temp=bcd_hex_min(ReadSet1302(0x83))+1; if(temp==60) temp=0;

WriteSet1302(0x82,hex_bcd_min(temp)); TR0=1; } }

if(hr==0) { delay(2); if(hr==0) {

while(!hr); TR0=0;

temp=bcd_hex_hr(ReadSet1302(0x85))+1; if(temp==24) temp=0;

WriteSet1302(0x84,hex_bcd_hr(temp)); temp=0; TR0=1; } } */ if(ss==0) {

delay(20); if(ss==0) { a++; if(ss==0)

{ delay(2); if(ss==0)

{

while(!ss);TR0=0;

WriteSet1302(0x80,0x7f&ReadSet1302(0x81)); TR0=1;

}

}

22

本文来源:https://www.bwwdw.com/article/iilg.html

Top