单片机课程设计报告-电子钟系统设计_第1页
单片机课程设计报告-电子钟系统设计_第2页
单片机课程设计报告-电子钟系统设计_第3页
单片机课程设计报告-电子钟系统设计_第4页
单片机课程设计报告-电子钟系统设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE1《单片机原理与应用》课程设计总结报告设计题目:电子钟系统设计指导老师:__姓名:__班级:学号:_成绩:厦门理工学院电气工程与自动化学院2013年6月

课程设计任务书对象:10电气工程及其自动化1、2设计题目1:电子钟系统设计一、设计内容及要求利用普中科技51单片机实验箱实现电子钟系统设计,其硬件原理框图如图1所示,其中显示采用液晶LCD1602,温度测量采用DS18B20,系统要求实现以下功能:1、基本功能:需要在LCD上显示以下参数信息:日期、时间;实现日期和时间可用键盘进行设置调整;日期能区分闰年与非闰年,月份与天数的关系;能够设置显示的模式:①只显示时间;②只显示日期;③显示日期、时间。2、扩展功能:能显示室内的温度;具有闹钟功能,开启闹钟时LCD上应有标志;具有秒表功能,要求精确到0.1s;能够设置显示的模式:①只显示时间和温度;②只显示日期和温度;③全部显示所有参数。图1系统原理框图二、设计任务1、根据设计内容与要求,查找相关芯片与模块DS18B20、LCD1602数据手册,弄清个模块硬件接口原理。2、根据设计内容与要求,弄清系统及各个模块的工作流程,完成系统的软件设计,包括系统主程序、显示子程序、键盘设置子程序、时间调整子程序等,可使用汇编语言或是C语言编写,建议使用C语言编写。3、完成系统的仿真与调试,使得系统在脱机情况下,能稳定可靠的工作。4、编写课程设计报告。内容提要利用普中科技51单片机实验箱实现电子钟系统设计,其其中显示采用液晶LCD1602,实现以下功能:需要在LCD上显示以下参数信息:日期、时间;实现日期和时间可用键盘进行设置调整;日期能区分闰年与非闰年,月份与天数的关系;能够设置显示的模式:①只显示时间;②只显示日期;③显示日期、时间。

目录TOC\o"1-2"\h课程设计任务书 1内容提要 2正文 4一、课题的意义、本人所做的工作、系统的主要功能及工作流程 4二、硬件电路原理描述 4三、软件设计流程及描述 5四、系统测试 6五、结论 6心得体会 6附录 6

正文课题的意义、本人所做的工作、系统的主要功能及工作流程课题的意义:培养学生的动手的能力及单片机知识的应用。本人所做的工作:依照任务书,完成电子钟的基本功能。系统的主要功能:需要在LCD上显示以下参数信息:日期、时间;实现日期和时间可用键盘进行设置调整;日期能区分闰年与非闰年,月份与天数的关系;能够设置显示的模式:①只显示时间;②只显示日期;③显示日期、时间。工作流程:用软件Keil编写的C语言程序;进行软件调试;进行硬件调试。硬件电路原理描述硬件原理:将LCD的E、RS、RW端分别接至单片机P2.7-5端,LCD的数据段与P0口对应接入,将独立键盘对应接入P1口,从而可通过操作P2、P1、P0,得知键盘及LCD状态,实现单片机对LCD的操纵。硬件原理图:图一、微控制器模块图二、LCD1602显示模块图三、按键输入模块软件设计流程及描述设计流程:先设计显示模块,并进行软件调试,之后再进行硬件调试;之后再设计时间模块,并进行软件调试;然后,整合显示模块和时间模块,进行软件调试,再进行硬件调试;之后设计键盘模块,进行软件、硬件的调试;之后,将三个模块整合在一起,进行软件、硬件的调试。设计流程图:开始开始写显示模块进行软件、硬件调试写时间模块进行软件、硬件调试写键盘模块进行软件、硬件调试集合模块、进行调试集合模块、进行调试结束系统测试在keil软件中,新建一个工程,设置相应的工程选项,编译工程,将生成的hex文件下载到单片机中,观察是否显示正常;让其运行一段时间,观察是否时间的进位正常;然后,按下各个键,观察是否出现相应的现象。结论该单片机正常执行各个功能,实现了电子钟的基本功能。心得体会通过此次的单片机课程设计,我对单片机的编程有了进一步的了解,也对keil软件的调试功能有了一定的认识,对LCD1602有所了解,提高了我的编程能力,增加了编程、调试经验,与对单片机课程的兴趣。附录Main.c:#include"disp.h"#include"time.h"#include"key.h"st_dtdt;//定义结构体变量unsignedcharmode=0;voidmain(){ LCD_init();//初始化LCD TIME_init();//初始化时间 while(1) { deal_key();//处理键盘 Display(mode);}//显示时间}Disp.h:#ifndefDISP_H#defineDISP_H#include<reg51.h>voiddelay(void);//延时程序voidfbusy();//判断LCD忙不忙voidWriteCommand(unsignedcharj);//写命令voidWriteData(unsignedcharj);//写数据voidLCD_init(void);voidDisplay(unsignedcharmode);voidWriteTime();//写时间voidWriteDate();//写日期#endifDisp.c:#include"disp.h"#include"time.h"sbitRS=P2^6;sbitRW=P2^5;sbitE=P2^7;externst_dtdt;voiddelay(void)//延时{ unsignedchary; for(y=0;y<0xff;y++) {}}voidfbusy() //判断LCD忙不忙,判断P0^7=1?{ RS=0; RW=1; E=1; E=0; while(P0&0x80) { E=0; E=1;} delay();}voidWriteCommand(unsignedcharj) //写命令{ fbusy(); E=0; RS=0; RW=0; E=1; P0=j; E=0; delay();}voidWriteData(unsignedcharj) //写数据{ fbusy(); E=0; RS=1; RW=0; E=1; P0=j; E=0; delay();}voidLCD_init(void){ WriteCommand(0x01); //清屏 delay(); WriteCommand(0x38); // 使用8位数据,显示两行,使用5*7的字型 delay(); WriteCommand(0x0e); //显示器开,光标开,字符不闪烁 delay(); WriteCommand(0x06); //字符不动,光标自动右移一格 delay();}voidDisplay(unsignedcharmode){ if(mode==0) { WriteCommand(0x80); //定位为第一行第一列 WriteTime(); WriteCommand(0xc0); //定位为第二行第一列 WriteDate(); }elseif(mode==1) { WriteCommand(0x80); WriteTime(); }else{ WriteCommand(0x80); WriteDate(); }}voidWriteTime(){WriteData(0x30+dt.hour/10);//取十位WriteData(0x30+dt.hour%10); //取个位WriteData(0x3a); //写冒号WriteData(0x30+dt.min/10);WriteData(0x30+dt.min%10);WriteData(0x3a);WriteData(0x30+dt.sec/10);WriteData(0x30+dt.sec%10);}voidWriteDate(){ WriteData(0x30+dt.year/1000); //取千位 WriteData(0x30+dt.year%1000/100); //取百位 WriteData(0x30+dt.year%100/10); //取十位 WriteData(0x30+dt.year%10); //取个位 WriteData(0x2d); //写短横线 WriteData(0x30+dt.month/10); WriteData(0x30+dt.month%10); WriteData(0x2d); WriteData(0x30+dt.day/10); WriteData(0x30+dt.day%10);} Time.h:#ifndefTIME_H#defineTIME_H#include<reg51.h>structdatetime//日期时间的结构体{ unsignedintyear; unsignedcharmonth; unsignedcharday; unsignedcharhour; unsignedcharmin; unsignedcharsec;};typedefstructdatetimest_dt;voidTIME_init();voidTimeGo(unsignedchartime);//时间增长voidday_up();//日的增长voiddayup_for_key();//为响应键盘的日增长函数#endifTime.c:#include"time.h"unsignedchari;externst_dtdt;voidTIME_init(){ dt.year=2013; //dt的初始化 dt.month=12; dt.day=31; dt.hour=23; dt.min=59; dt.sec=50; TMOD=0x10; //T1定时器设置,方式1 TL1=0xF0; //定10ms TH1=0xD8; i=100; EA=1; //开中断 ET1=1; TR1=1; //启动定时器T1}voidIntt1()interrupt3 //定10ms{ TL1=0xF0; TH1=0xD8; i--; if(i==0) { i=100; TimeGo(0); }}voidTimeGo(unsignedchartime) //时间增长{ switch(time) { case0:gotosec;return; case1: gotomin;return; case2:gotohour;return; case3:dayup_for_key();return; case4:++dt.month;gotomonth;return; case5:gotoyear;return; }sec:++dt.sec; if(dt.sec==60) { dt.sec=0;min: ++dt.min; if(dt.min==60) { dt.min=0;hour: ++dt.hour; if(dt.hour==24) { dt.hour=0; day_up();month: if(dt.month==13) { dt.month=1;year: ++dt.year; } } }}}voidday_up(){ dt.day++; if(dt.month==2) { if((dt.year%4==0&&dt.year%100!=0)||dt.year%400==0) { if(dt.day==30) { dt.day=1; ++dt.month;} }else{ if(dt.day==29){ dt.day=1; ++dt.month; } } return; }elseif(dt.month==4||dt.month==6||dt.month==9||dt.month==11) { if(dt.day>=31) { dt.day=1; ++dt.month; } return; }else{if(dt.day>=32) { dt.day=1; ++dt.month; } return; }}voiddayup_for_key(){ day_up(); if(dt.month==13) { dt.month=1; ++dt.year; }}Key.h:#ifndefKEY_H#defineKEY_H#include<reg51.h>voiddelayms(unsignedintk);//延时函数unsignedcharscan_key(void);//扫描键盘voiddeal_key();#endif Key.c:#include"key.h"#include"time.h"#include"disp.h"externst_dtdt;externunsignedchartime,flag;voiddelayms(unsignedintk){ unsignedintdatai,j; for(i=0;i<k;i++) { for(j=0;j<121;j++){} }}unsignedcharscan_key(void){ unsignedchartemp; temp=P1; returntemp;}voiddeal_key(){ unsignedcharflag; extern

温馨提示

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

评论

0/150

提交评论