电子万年历报告_第1页
电子万年历报告_第2页
电子万年历报告_第3页
电子万年历报告_第4页
电子万年历报告_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大连民族学院机电信息工程学院

自动化系

单片机系统课程设计报告

题目:电子万年历

专业:自动化

班级:114

学生姓名:曹学亮张怀宇马建龙

指导教师:赵凤强张艳

设计完成日期:2013年10月15日

课程设计任务书

题目:电子万年历

课程设计时间:2013924〜2013.10.19

一、设计任务

给定1602液晶显示器和单片机最小系统,学习使用单片机最小系统,设计在

1602上显示年月日、时间和星期并能更改,完成相关的软件。

二、设计内容及要求

1.系统设计的方案;

2.检测电路和过程通道的设计;

3.系统软件设计与实现;

4.需要的详细材料和工具清单;

5.设计的性能指标;

6.撰写设计报告;

7.资料归档。

三、设计重点

检测电路和过程通道设计;

系统软件设计、调试。

四、课程设计进度要求

1.13.9.25-13.9.28系统方案设计;

2.13.9.29-13.10.5检测电路和过程通道设计;

3.13.10.6-13.10.7完成系统硬件设计与实现;

4.13.10.8-13.10.13检测电路和过程通道设计;

5.13.10.13-13.10.15撰写设计报告;

6.13.10.19验收答辩。

五、参阅书目

[1]祁伟,杨亭,单片机C51程序设计教程与实验[M]。北京:北京航空航天大学

出版社,2006.1

[2]徐科军,传感器与检测技术[M]。北京:电子工业出版社,2010.11

13J方彦军,孙健,智能仪器技术及其应用[M]。北京:化学工业出版社,2004.4

[4]徐爱钧,智能化测量控制仪表原理与设计[M]。北京:北京航空航天大学出版

社,2004.9

目录

1任务分析和性能指标

1.1任务分析......................................................1

1.2性能指标......................................................1

2总体设计方案.....................................................2

2.1硬件方案......................................................2

2.2软件方案......................................................2

3系统硬件设计.....................................................3

3.1检测电路......................................................3

3.2控制电路....................................错误!未定义书签。

4系统软件设计.....................................................5

4.1主程序设计...................................................6

4.2数据采集程序设计.............................................6

4.3监控程序设计................................错误!未定义书签。

5调试及性能分析..................................................12

5.1调试分析.....................................................18

5.1.1软件调试..................................................18

5.1.2硬件调试..................................................19

5.1.3系统功能调试..............................................19

5.2性能分析.....................................................19

总结............................................错误!未定义书签。

参考文献...........................................................21

附录1元器件清单..................................................22

附录2调试系统照片................................................23

1任务分析和性能指标

1.1任务分析

电子万年历是日常生活中常见的小型电子产品,其形式多种多样,小到带有

日期的电子腕表,大到公共场所悬挂的大型电子日历,此外,眼下我们还常能在

宾馆、饭店等场所见到一种带有年、月、日、时、分、秒、星期甚至节气等信息

的电子日历牌。

电子日历的主要功能是给人们提供时间和日期信息,无论其形式如何,从外

部都可分为显示和校准两部分。为使电子日历协调工作,整个系统从功能上可分

为实时时钟、显示和键盘三个模块,分别完成时间和日期的计算以及人机交互的

管理等。

1.2性能指标

实时时钟(RTC:RealTimeClock)是系统的核心,其运行精度直接影响

产品质量。实时时钟的实现有两种方案可选,一是利用单片机系统时钟和中断

完成时间和日期的计算;二是利用专用时钟芯片。前者不用附加芯片,系统简单,

但是累计误差较大,只有短时计时才可使用。长时间计时一般都采用后者。后

者采用32.768KHZ晶体振荡器振作为脉冲源,内部的15位计数器刚好产生标

准秒脉冲。该类芯片除时钟计时外,还有年月日和星期的计算功能,并且还可

计算闰年。芯片初始化后可脱离CPU自动运行,有些芯片内部带有电池,出厂

时芯片即开始运行。专用时钟芯片的种类很多,与CPU的通信方式有并行,也

有串行。常见的芯片有DALLAS公司生产的DS1302和DS12c887,前者为串

行,需要外加后备电池;后者为并行,芯片内置锂电池和晶体振荡器,无外加电

源的情况下可运行10年。此外,还有许多时钟芯片,如Epson、Holtek,深圳

兴威帆等公司都推出自己的时钟芯片.因为我们具备单片机相关知识的基础,所

以我们利用单片机系统时钟和中断完成时间和日期的计算。

2总体方案设计

2.1硬件方案

显示部分

数据显示常采用液晶,液晶显示有耗电低、外形美观的优点,并且,点阵液

晶可显示较复杂的字符或图案。

键盘部分

时钟系统的键盘设置三个键:确认键、加I键、减I键。

实时时钟部分

利用单片机系统时钟和中断完成时间和日期的计算。

2.2软件方案

C语言编属于高级语言,具有可移植性,能够结构化编程。使用标准C

语言的程序,几乎都可以不作改变移植到不同的微机平台上,对于嵌入式等的微

控制芯片,属于标准C语言的部分也很少需要修改,而且程序很容易读懂。

C语言编写程序结构清晰,移植性好,容易维护和修改。

汇编语言针对不同的操作系统平台,不同的微控制器,指令都是完全不同的,

即使指令相似,也不具有可移植性。但是汇编语言是针对专门的控制器的,所以

运行速度可以精确到一个指令周期。汇编语言的程序读懂需要借助微控制器的指

令手册以及各个寄存器的说明,所以很难读懂。

汇编语言编写代码实时性强,能够直接控制硬件的工作状态,但是不具有可移植

性,维护和修改困难。

经过我们三人的讨论我们决定使用C语言来编写程序,因为c语言程序容

易学,也很容易读懂,编写程序结构清晰,易于我们组员之间的讨论和学习。而

且相对于汇编我们更加擅长c语言。

2

3硬件设计与实现

由于单片机系统时钟和中断能完成年、月、日、时、分、秒等时间信息,对

于一天内的时间记录,有12小时制和24小时制两种模式。在12小时制模式中,

用AM和PM区分上午和下午;时间的表示方法也有两种,一种用二进制数

表示,一种是用BCD码表示。而显示部分我们采用LCD液晶显示屏,液晶显

示屏的显示功能强大,可显示文字,图形,显示多样,清晰可见,而其体积较小,

使用方便,可以使电路更加简洁,所以选择了液晶显示器。

3.11602显示电路

3.2键盘电路

3

4

3.3晶振电路

3.4复位电路

3.5单片机电路

o

x

s

o

mX

K

iX

xS

d

省二?★省^22丫6f|_||

5

4软件设计与实现

4.1主程序

voidmain()

(

init();

while(l)

(

anjian();

4.2子程序

4.2.1按键程序

voidanjianO〃按键函数

{

rd=0;

if(sl==0)

(

delay(5);

if(sl==0)

{slnum++;

while(!si);

if(slnum==l)

(

TRO=O;

write_com(0x80+0x40+12);

write_com(OxOf);

)

)

if(slnum==2)

6

write_com(0x80+0x40+9);

)

if(slnum==3)

(

write_com(0x80+0x40+6);

}

if(slnum==4)

(

write_com(0x80+15);

)

if(slnum==5)

(

write_com(0x80+9);

)

if(slnum==6)

{

write_com(0x80+6);

)

if(slnum==7)

(

write_com(0x80+1);

)

if(slnum==8)

(

slnum=0;

write_com(0x0c);

TRO=1;

if(yue==l)

(

tian=ri-ri4;

}

if(yue==2)

(

tian=31+ri-ri4;

)

if(yue==3)

(

tian=59+ri-ri4;

)

if(yue==4)

(

tian=90+ri-ri4;

7

if(yue==5)

tian=120+ri-ri4;

)

if(yue==6)

{

tian=151+ri-ri4;

)

if(yue==7)

(

tian=181+ri-ri4;

}

if(yue==8)

(

tian=212+ri-ri4;

)

if(yue==9)

(

tian=243+ri-ri4;

)

if(yue==10)

(

tian=272+ri-ri4;

)

if(yue==l1)

(

tian=304+ri-ri4;

}

if(yue==12)

(

tian=334+ri-ri4;

}

ri4=0;

)

)

if(slnum!=O)

(

if(s2==0)

{

delay(5);

if(s2==0)

while(!s2);

if(slnum==l)

8

miao++;

if(miao==60)

miao=O;

write_sfm(12,miao);

write_com(0x80+0x40+12);

)

if(slnum=2)

(

fen++;

if(fen==60)

fen=0;

write_sfm(9,fen);

write_com(0x80+0x40+9);

}

if(slnum-3)

(

shi++;

if(shi==24)

shi=O;

write_sfm(6,shi);

write_com(0x80+0x40+6);

)

if(slnum==4)

(

xingqi++;

if(xingqi=8)

xingqi=l;

write_xq(15,xingqi);

write_com(0x80+15);

)

if(slnum==5)

(

ri++;

if(ri==32)

ri=l;

write_yr(9,ri);

write_com(0x80+9);

)

if(slnum=6)

yue++;

if(yue==13)

9

yue=l;

tian=l;

)

write_yr(6,yue);

write_com(0x80+6);

)

if(slnum==7)

{

nian++;

write_n(l,nian);

write_com(0x80+1);

if(s3==0)

(

delay(5);

if(s3==0)

(

while(!s3);

if(slnum==l)

(

miao一一;

if(miao==-l)

miao=59;

write_sfm(12,miao);

write_com(0x80+0x40+12);

)

if(slnum==2)

(

fen—;

if(fen--l)

fen=59;

write_sfm(9,fen);

write_com(0x80+0x40+9);

)

if(slnum=3)

(

shi一;

if(shi==-l)

shi=23;

10

write_sfm(6,shi);

write_com(0x80+0x40+6);

)

if(slnum==4)

(

xingqi—;

if(xingqi=0)

xingqi=7;

write_xq(15,xingqi);

write_com(0x80+15);

}

if(slnum==5)

{

ri一;

ri4++;

if(ri==0)

(

ri=31;

)

write_yr(9,ri);

write_com(0x80+9);

)

if(slnum==6)

(

yue——;

if(yue==0)

(

yue=12;

tian=334+ri;

)

write_yr(6,yue);

write_com(0x80+6);

)

if(slnum=7)

(

nian一;

write_n(l,nian);

write_com(0x80+1);

)

)

)

11

4.2.2中断程序

voidtimerO()interrupt1〃开中断1(定时器中断0)包括时间的

算法程序

(

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

t0++;

if(t0==20)

(

t0=0;

miao++;

)

if(miao==60)

{

miao=0;

fen++;

)

write_sfm(12,miao);〃调用函数write-()都为调用上边的显示子函数下

if(fen==60)

{

fen=O;

shi++;

)

write_sfm(9,fen);

if(shi==24)

{

shi=O;

xingqi++;

tian++;

)

write_sfm(6,shi);

if(xingqi==8)

12

xingqi=l;

write_xq(15,xingqi);

if(tian!=O)

(

ri=tian;

if(tian<=31)

(

yue=1;

)

write_yr(6,yue);

if(tian>=32&&tian<=59)

{

yue=2;

ri=tian-31;

}

write_yr(6,yue);

if(60<=tian&&tian<=90)

(

yue=3;

ri=tian-59;

)

write_yr(6,yue);

if(91<=tian&&tian<=120)

(

yue=4;

ri=tian-90;

)

write_yr(6,yue);

if(121<=tian&&tian<=151)

(

yue=5;

ri=tian-120;

13

write_yr(6,yue);

if(l52<=tian&&tian<=181)

(

yue=6;

ri=tian-151;

}

write_yr(6,yue);

if(l82<=tian&&tian<=212)

(

yue=7;

ri=tian-181;

)

write_yr(6,yue);

if(213<=tian&&tian<=243)

(

yue=8;

ri=tian-212;

)

write_yr(6,yue);

if(244<=tian&&tian<=273)

{

yue=9;

ri=tian-243;

)

write_yr(6,yue);

if(274<=tian&&tian<=304)

(

yue=10;

ri=tian-273;

)

write_yr(6,yue);

if(305<=tian&&tian<=334)

yue=11;

ri=tian-304;

14

write_yr(6,yue);

if(335<=tian&&tian<=365)

yue=12;

ri=tian-334;

write_yr(6,yue);

if(tian==366)

(

tian=1;

yue=01;

ri=l;

nian++;

)

write_n(l,nian);

)

write_yr(9,ri);

)

4.2.3显示年

voidwrite_n(ucharadd,uintdate)〃液晶显示年

(

uintshi,ge,bai,qian;

qian=date/1000;

bai=date/100%10;

shi=date/10%10;

ge=date%10;

write_com(0x80+add);

write_date(0x30+qian);

write_date(0x30+bai);

write_date(0x30+shi);

write_date(0x30+ge);

)

4.2.4显示星期

voidwrite_xq(ucharadd,uchardate)//液晶显示星期

15

write_com(0x80+add);

write_date(0x30+date);

4.2.5显示月日

voidwrite_yr(ucharadd,uchardate)〃液晶显示月日

{

ucharshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+add);

write_date(0x30+shi);

write_date(0x30+ge);

)

4.2.6显示时分秒

voidwrite_sfm(ucharadd,uchardate)〃液晶显示时分秒

(

ucharshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+0x40+add);//液晶屏第二行的选着地址

write_date(0x30+shi);

write_date(0x30+ge);〃液晶屏显示数字的方式

)

4.2.7程序初始化

voidinit()〃函数初始化一些相应的变量

{

miao=53;

fen=59;

shi=23;

xingqi=5;

ri4=0;

tian=284;

nian=2013;

16

dula=O;

wela=O;

lcden=O;

write_com(0x38);〃显示模式设置,设置16乘2显示,5X7点阵,八位

数据接口

write_com(OxOc);〃显示状态为整体显示

write_com(0x06);〃光标的设定当读或写一个字符后地址指针加

一,光标加一

write_com(0x80);〃液晶屏第一行选着地址

write_com(0x01);〃清除显示否则后面出现黑一块

for(num=0;num<17;num++)

{

write_date(tablel[num]);

delay⑸;

)

write_com(0x80+0x40);

for(num=0;num<13;num++)

(

write_date(table2[num]);

delay(5);

)

TMOD=0x01;〃中断初始化定时器0的工作方式一

EA=1;

ETO=1;

TRO=1;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

)

428写数据到液晶显示器

voidwrite_date(uchardate)〃液晶屏数据指令

(

rs=l;

lcden=0;

P0=date;

delay(5);

17

lcden=1;

delay(5);

Icden=O;

)

429写指令到液晶显示器

voidwrite_com(ucharcom)〃液晶屏控制指令

{

rs=O;

lcden=0;

P0=com;

delay(5);

lcden=l;

delay(5);

lcden=0;

)

4.2.10延时子函数

voiddelay(ucharz)〃延时程序

(

ucharx,y;

for(x=z;x>0;x-);

for(y=l16;y>0;y—);

)

5调试及性能分析

5.1调试分析

5.1.1软件调试

软件调试时一,开始出现了很多错误,主要是液晶屏乱码,不显示数字。后来经过

调试找出原因并改正得到想要的结果。

18

5.1.2硬件调试

硬件主要是单片机,液晶,我们的任务是主要将他们各个引脚的作用和芯片的功

能弄清楚,通过软件操控它们,按照PCB原理图焊接到板上。

5.1.3系统功能调试

通过键盘和软件设置来控制时钟功能,我们是按照顺序一个一个进行调试的,这

样层次清晰写起程序来也容易。

5.2性能分析

计时器最关键的是计时的精度。电子万年历中DS1602上最好使用专用的晶振。

经测试制作的电子万年历,一星期快了3s左右,误差较大,实验设计中可换用

标准晶振或用软件进行修正。

19

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论