单片机万年历实训报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机万年历实训报告

系部:电气自动化系

班级:13电信2班

******

指导老师:黄丽英、侯聪玲

实训时间:2015年1月19日~23日

用AT89C51与LCD1602设计

的可调式电子日历时钟

一、总体设计

1.1、设计目的

为巩固所学的单片机知识,把所学理论运用到实践中,用LCD1602与AT89C51 设计可调式电子日历时钟。

1.2、设计要求

(1)显示:年、月、日、时、分、秒和星期;

(2)设置年、月、日、时、分、秒和星期的初始状态;

(3)能够用4个按键调整日历时钟的年、月、日、时、分、秒和星期;

完成可调式电子日历时钟的硬件和软件的设计,包括单片机的相关内

容;日历时钟模块的设计,液晶显示模块的设计,按键模块的设计。

控制程序的编写等。

1.3、系统基本方案选择和论证

1.3.1、单片机芯片的选择方案

方案一:

采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容。

方案二:

采用STC12C5A60S2系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。但造价较高。

1.3.2 、显示模块选择方案和论证:

方案一:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用显示数字显得太浪费,且价格也相对较高。所以不用此种作为显示。

方案二:

采用LED数码管动态扫描,虽然LED数码管价格适中,但要显示多个数字所需要的个数偏多,功耗较大,显示出来的只是拼音,而不是汉字。所以也不用此种作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,且视觉效果较好,外形美观。LCD1602可实现显示2行十六个字符。

1.3.4、电路设计最终方案决定

综上各方案所述,对此次作品的方案选定:采用80C51作为主控制系统;LCD1602液晶带汉字库显示屏作为显示部分。

二、硬件设计

2.1、电路设计模块图如图

2.3、用proteus仿真软件仿真并抓图。

三、软件设计

3.1、画出各个函数流程图。

3.1.1、LCD1602液晶显示控制流程图如图

3.1.2、调时函数控制流程如图

实训心得:通过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥补了在

课堂上学习的不足。相信这对我们以后的学习和工作都会有很大的帮助。我们一定要在最短的时间里对这些不足加以改正! 在试训中有苦有甜,当我们为一个很难攻破的程序找出路时,心情烦躁,感觉自己很不可理喻,当程序一点一点编好后,自己从心底感觉到一点小小的安慰,看着自己的成果。感觉很欣慰。总而言之,单片机课程设计对于我们有很大的帮助,我们从中受益匪浅。

程序代码。

#include

#define uchar unsigned char

#define uint unsigned int

uchar a,count,S1num,xqnum;

uchar yue,ri,shi,fen,miao;

uint nian;

sbit lcdrs=P2^5;

sbit lcdrw=P2^4;

sbit lcden=P2^3;

sbit S1=P3^0; //定义键--进入设置

sbit S2=P3^1; //定义键--增大

sbit S3=P3^2; //定义键--减小

sbit S4=P3^3; //定义键--退出设置

uchar code table0[]="2015-01-11 SUN";

uchar code table1[]="00:00:00";

uchar code xingqi[][3]={"MON","TUE","WED","THU","FRI","SAT","SUN"};

void delay(uint z)

{

uint x,y;

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

for(y=110;y>0;y--);

}

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

1602液晶显示器模块

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

void write_com(uchar com) //液晶写指令

{

lcdrw=0;

lcdrs=0;

P0=com;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

void write_data(uchar dat) //液晶写数据

{

lcdrw=0;

lcdrs=1;

P0=dat;

delay(5);

lcden=1;

delay(5);

lcden=0;

}

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

年月日写入1602函数

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

void write_sfm(uchar add,uchar dat) //写时分秒函数{

uchar shi,ge;

shi=dat/10;

ge=dat%10;

write_com(0x80+0x40+add);

write_data(0x30+shi);

write_data(0x30+ge);

}

void write_yr(uchar add,uchar dat) //写月日函数

{

uchar shi,ge;

shi=dat/10;

ge=dat%10;

write_com(0x80+add);

write_data(0x30+shi);

write_data(0x30+ge);

}

void write_nian(uchar add,uint dat) //写年函数{

相关文档
最新文档