当前位置:文档之家› 数字电子日历

数字电子日历

数字电子日历学生:王晨指导教师:廖晓伟.淮南师范学院电气信息工程系摘要:随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

本次设计的题目是数字电子日历,电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。

适用于家庭、公司、机关等众多场所。

为人们的日常生活、出行安排提供了方便,成为人们日常生活中不可缺少的一部分。

本设计主要设计了一个基于AT89C51单片机的电子日历。

能在数码管上进行年、月、日、星期、时、分、秒等自动显示。

应用Proteus软件实现了单片机电子日历系统的设计与仿真。

该方法仿真效果真实、准确,节省了硬件资源。

关键词:日历;单片机;仿真Digital Electronic CalendarStudent:Wang ChenInstructor:Liao XiaoweiHuainan Normal UniversityDepartment of Electrical Engineering and InformationAbstract:With the rapid development of science and technology, SCM applications are continually deepening, the traditional control test drive at the same time benefit to upgrade the new moon. The design of the subject is a digital electronic calendar, electronic calendar, with stable performance, high accuracy, low cost, easy-to-commercialization, as well as convenient and practical features. For families, companies, institutions, and many other places. For people's daily life, travel arrangement provides a convenient, daily life become an indispensable part. This design mainly designed based on AT89C51 microcontroller electronic calendar. Onthe digital control in the year, month, day, week, hours, minutes, seconds, etc. automatically. Application Proteus software electronic calendar, the MCU system design and simulation. Simulation results of the method is true, accurate, saving hardware resources.Key word:SCM, Electronic calendar, Simulation.前言单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。

单片机以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。

单片机具有体积小、功能多、价格低廉、使用方便、系统设计灵活等优点。

电子日历是一种利用数字电路来显示年、月、日、星期、时、分、秒的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表。

如今它已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。

2 系统组成及工作原理单片机最小系统是总的控制系统,提供的各种接口与外部各个电路相连。

此图中还包含一些其他元件的电路,实现与外电路相连。

该最小系统包含了单片机,晶振电路,复位电路,串口电路,供电模块电路。

最小系统中的晶振电路结合单片机内部的电路,产生单片机所必需的时钟频率,微控制器的一切指令的执行都是建立在这个基础上的,晶振提供的时钟频率越高,那微控制器的运行速度也就越快。

晶振用于提供稳定,精确的单频振荡。

晶振的作用是为系统提供基本的时钟信号,通常一个系统共用一个晶振,便于各部分保持同步。

复位电路用于工作的电路要恢复初始状态的电路,由一个按键S1,一个1K电阻,一个10K电阻和一个12UF电容组成。

单片机在工作过程中可能需要复位,以使CPU及系统各部件处于确定的初始状态。

89系列单片机的复位信号时从RST引脚输入到芯片内的施密特触发器中的。

当系统处于正常工作时,且振荡稳定后,如果RST引脚上有一个高电平并维持2个机器周期以上,则CPU就可以响应并将系统复位。

电源部分用于为单片机提供直流+5V电压,它包括两个部分:一部分是开关控制器件,另一部分是指示电路,用于指示电源电路工作正常。

开关用的是SW-DPDT,显示灯部分有一个C10的电容,一个1K电阻和一个LED 灯,还要VCC供电!用一个CON3与外界连接用于供电。

图1单片机最小系统图图2串口电路工作原理:利用单片机作为控制芯片,实现对年、月、日、星期、时、分、秒的控制3显示模块图3LCD液晶显示模块LCD(液晶屏)具有汉字显示的功能,不但可以指示旗帜的位置,还可以显示相应的控制命令,如升旗、降旗等,信息量丰富且直观易懂。

另外,液晶显示有功耗低,体积小,质量轻,寿命长,不产生电磁辐射污染等优点。

所以此次设计选择LCD液晶显示。

4系统软件流程图图4主程序流程图图5中断程序流程图附录程序设计:#include <reg51.h>#include <intrins.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define BUSY 0x80 //lcd忙检测标志#define DATAPORT P1 //定义P0口为LCD通讯端口sbit LCM_RS=P2^0; //数据/命令端sbit LCM_RW=P2^1; //读/写选择端sbit LCM_EN=P2^2;uchar second; //定义并初始化时钟变量uchar minite;uchar hour;uchar mstcnt=0;uchar t,set=0;uchar code str0[]={"DATE :2009-04-15"};uchar code str1[]={"TIME : : : "};void delay_LCM(uint); //LCD延时子程序void initLCM( void); //LCD初始化子程序void lcd_wait(void); //LCD检测忙子程序void WriteCommandLCM(uchar WCLCM,uchar BusyC); //写指令到ICM子函数void WriteDataLCM(uchar WDLCM); //写数据到LCM子函数void DisplayOneChar(uchar X,uchar Y,uchar DData); //显示指定坐标的一个字符子函数void DisplayListChar(uchar X,uchar Y,uchar code *DData); //显示指定坐标的一串字符子函数void init_timer0(void); //定时器初始化void displayfun(void);void delay_LCM(uint k){uint i,j;for(i=0;i<k;i++){for(j=0;j<60;j++){;}}}void WriteCommandLCM(uchar WCLCM,uchar BusyC){if(BusyC)lcd_wait();DATAPORT=WCLCM;LCM_RS=0; // 选中指令寄存器LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}void WriteDataLCM(uchar WDLCM){lcd_wait( ); //检测忙信号DATAPORT=WDLCM;LCM_RS=1; // 选中数据寄存器 LCM_RW=0; // 写模式LCM_EN=1;_nop_();_nop_();_nop_();LCM_EN=0;}void lcd_wait(void){DATAPORT=0xff;LCM_EN=1;LCM_RS=0;LCM_RW=1;_nop_();while(DATAPORT&BUSY){ LCM_EN=0;_nop_();_nop_();LCM_EN=1;_nop_();_nop_();}LCM_EN=0;}void initLCM( ){DATAPORT=0;delay_LCM(15);WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号delay_LCM(5);WriteCommandLCM(0x38,0);delay_LCM(5);WriteCommandLCM(0x38,0);delay_LCM(5);WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号WriteCommandLCM(0x08,1); //关闭显示,检测忙信号WriteCommandLCM(0x01,1); //清屏,检测忙信号WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号}void DisplayOneChar(uchar X,uchar Y,uchar DData){Y&=1;X&=15;if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40X|=0x80; //指令码为地址码+0X80WriteCommandLCM(X,0);WriteDataLCM(DData);}void DisplayListChar(uchar X,uchar Y,uchar code *DData){uchar ListLength=0;Y&=0x01;X&=0x0f;while(X<16){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}void displayfun(void){WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);DisplayOneChar(7,1,hour/10+0x30); //液晶上显示小时DisplayOneChar(8,1,hour%10+0x30);DisplayOneChar(10,1,minite/10+0x30); //液晶上显示分DisplayOneChar(11,1,minite%10+0x30);DisplayOneChar(13,1,second/10+0x30); //液晶上显示秒DisplayOneChar(14,1,second%10+0x30);}void init_timer0(void){TMOD=0x01; //time0为定时器,方式1TH0=0x3c; //预置计数初值TL0=0xb0;EA=1;ET0=1;TR0=1;}void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms 中断一次TH0=0x3c;TL0=0xb0;mstcnt++;if(mstcnt>=20 ){second++;mstcnt=0;}if(second>=60){minite++;second=0;}if(minite>=60){hour++;minite=0;delay_LCM(200); }if(hour>=24){hour=0;}void main(void){P1=0xff; //初始化p1口,全设为1delay_LCM(500); //延时500ms启动initLCM( ); //LCD初始化init_timer0( ); //时钟定时器0初始化DisplayListChar(0,0,str0);DisplayListChar(0,1,str1);while (1){displayfun();delay_LCM(1000);}}总结本文介绍的是利用AT89C51单片机设计的电子日历。

相关主题