文档库 最新最全的文档下载
当前位置:文档库 › 基于51单片机的万年历设计

基于51单片机的万年历设计

基于51单片机的万年历设计
基于51单片机的万年历设计

山东工商学院SHANDONG INSTITUTE OF BUSINESS AND TECHNOLOGY 单片机课程实训SCM PRACTICAL TRAINING

目录

第一部分课程设计任务书 (1)

一、课程设计题目 (1)

二、课程设计时间 (1)

三、课程设计提交方式 (1)

四、设计要求 (1)

第二部分课程设计报告 (2)

一、单片机发展简史 (2)

二、MCS-51单片机系统简介 (2)

三、设计思路 (2)

四、硬件设计电路 (3)

五、软件设计流程 (6)

六、程序源代码 (10)

七、结束语 (66)

八、参考文献 (67)

第一部分课程设计任务书

一、课程设计题目

万年历的设计

二、课程设计时间

一周

三、实训提交方式

提交实训设计报告

四、设计要求

设计一台液晶显示屏显示的万年历,要求如下。

(1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。

(3)具有闹钟功能。

(4)能够显示环境温度,误差小于±1℃。

(5)计时精度:月误差小于20秒。

第二部分课程设计报告

一、单片机发展概况

单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段:

第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。

第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。

第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。

二、MCS-51单片机系统简介

MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。

MCS-51以其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,为以后的单片机的发展奠定了基础。

三、设计思想

以AT89C52单片机为核心,外接单片机复位电路,单片机晶振电路,蜂鸣器电路,温度传感器DS18B20,时钟芯片DS1302,按键电路,12864液晶显示电路,通过控制AT89C52单片机的接口来控制蜂鸣器电路,温度传感器DS18B20模块,时钟芯片DS1302模块,按键电路,12864液晶显示模块,使12864液晶能显示阳历年、月、日、时、分、秒和温度及相应的农历时间。

图为硬件系统设计框架

四、硬件电路设计

4.1电路原理图

4.2单片机控制模块

AT89C52是一个低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

(1) 复位电路

按键手动复位是通过使复位端经电阻与VCC接通而实现的。

(2) 时钟振荡电路

基于系统运行速度,采用12MHZ的石英晶振,并使用两个小电容作为微调电容。

4.3温度模块

DS18B20温度传感器具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。测温范围-55℃~+125℃,固有测温分辨率0.5℃,工作电源为 3~5V。

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

4.4时钟模块

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。

4.5液晶显示模块

本系统选择的LCD是AMPIRE128×64的汉字图形型液晶显示模块,可显示汉字及图形。单片机P1口作为数据输出口,RS,R\W,E分别通过10K的上拉电阻连接到单片机的P0.0,P0.1,P0.2。VDD接5V电源,VSS接地。VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。E(或EN)端为使能(enable)端,下降沿使能。DB0-DB7为双向数据总线,同时最高位DB7也是忙信号检测位。BLA、BLK分别为显示器背光灯的正、负极。

4.6按键模块

本系统使用5个button元件分别设置为增加键、减小键、退出键、设置/OK 键。4个按键与一个4个驱动电阻相连,作为整个按键控制功能系统,以触发AT89C52中断为方式使用设置功能。

4.7蜂鸣器模块

本系统采用BUZZER元件和PNP型三极管及电阻组成了蜂鸣器电路。

五、软件设计框图

5.1主程序流程图

万年历的程序主要包括:按键识别程序、时间设定程序、温度数据采集程序、时间数据采集程序、液晶屏数据显示程序、定时中断程序、阳历转阴历程序、闹钟设定程序、延时子程序等。

5.2温度数据模块设计

5.4闹钟设定模块设计

六、程序源代

/****************************文件包含*************************************/

#include < reg52.h >

#include < character.h >

#include < lcd.h >

#include < clock.h >

#include < sensor.h>

#include < calendar.h >

#include < key.h >

/*****************************预定义**************************************/

#define uchar unsigned char

#define uint unsigned int

/****************************************************************************/ sbit bell = P2 ^ 0; //定义蜂鸣器端口

/***************************************************************************** * 名称: Timer0_Service() inturrupt 1

* 功能: 中断服务程序

* 入口参数:

* 出口参数:

*****************************************************************************/ void Timer0_Service() interrupt 1

{

static uchar count = 0;

static uchar flag = 0; //记录鸣叫的次数

count = 0;

TR0 = 0; //关闭Timer0

TH0 = 0x3c;

TL0 = 0XB0; //延时50 ms

TR0 = 1 ; //启动Timer0

count ++;

if( count == 20 ) //鸣叫1 秒

{

bell = ~ bell;

count = 0;

flag ++;

}

if( flag == 6 )

{

flag = 0;

TR0 = 0; //关闭Timer0

}

}

/***************************************************************************** * 名称: Timer2_Servie() interrupt 5

* 功能: 中断服务程序

* 入口参数:

* 出口参数:

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

uchar HexNum_Convert(uchar HexNum)/*时间存储个位和十位的方式*/

{

uchar Numtemp;

Numtemp=(HexNum>>4)*10+(HexNum&0X0F);

return Numtemp;

}

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

* 函数名称:main()

* 功能:

* 入口参数:

* 出口参数:

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

void main( void )

{

uchar clock_time[6] = {0X00,0X59,0X23,0X09,0X04,0X11}; //定义时间变量秒分时日月年

uchar alarm_time[2] = { 10, 06}; //闹钟设置alarm_time[0]: 分钟alarm_time[1] :小时

uchar temperature[2]; //定义温度变量temperature[0] 低8位temperature[1] 高8位

Lcd_Initial(); //LCD初始化

Clock_Fresh( clock_time ); //时间刷新,proteus会调用当前系统时间

Clock_Initial( clock_time ); //时钟初试化

/***********************中断初始化***************************/

EA = 1; //开总中断

ET0 = 1; //Timer0 开中断

ET2 = 1; //Timer2 开中断

TMOD = 0x01 ; //Timer0 工作方式1

RCAP2H = 0x3c;

RCAP2L = 0xb0; //Timer2 延时50 ms

while( 1 )

{

switch( Key_Scan() )

{

case up_array:

{

Key_Idle();

}

break;

case down_array:

{

Key_Idle();

}

break;

case clear_array:

{

Key_Idle();

}

break;

case function_array:{

Key_Function( clock_time, alarm_time );

}

case null:

{

Clock_Fresh( clock_time ); //时间刷新

Lcd_Clock( clock_time ); //时间显示

Sensor_Fresh( temperature ); //温度更新

Lcd_Temperture( temperature ); //温度显示

Calendar_Convert( 0 , clock_time );

Week_Convert( 0, clock_time );

//闹钟报警

if( * alarm_time == HexNum_Convert(* ( clock_time + 1 ) )) //分钟相吻合

if( * ( alarm_time + 1 ) == HexNum_Convert(*( clock_time + 2 )) ) //小时相吻合

{

bell = 0;

TR2 = 1; //启动Timer2

}

}

break;

}

}

}

#ifndef _SUN_MOON

#define _SUN_MOON

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

#define uchar unsigned char

#define uint unsigned int

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

* 名称: get_moon_day(uchar month_p,uint table_addr)

* 功能: 读取数据表中农历的大月或小月,如果大月返回1, 小月返回0

* 入口参数:

* 出口参数:

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

bit get_moon_day( uchar month_p,uint calendar_address )

{

uchar temp,temp1;

temp1=(month_p+3)/8;

temp=0x80>>((month_p+3)%8);

temp=year_code[calendar_address+temp1]&temp;

if(temp==0){return(0);}else{return(1);}

}

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

* 名称: void Calendar_Convert( uchar * clock_time )

* 功能: 输入BCD的阳历数据,输出BCD阴历数据( 1901 - 2099 )

* 入口参数: c_flag:阳历的世纪标志clock_time: 时钟地址

* 出口参数: 无

* 说明: c_flag = 0 :21世纪c_flag = 1 :19世纪

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

void Calendar_Convert( uchar c_flag, uchar * clock_time )

{

bit flag_month, flag_year;

uchar year, month, day, month_point; //定义年月天

uchar temp1, temp2, temp3;

uint calendar_address; //定义农历地址

uint day_number;

uchar clock_moon[3]; //定义阴历

clock_time += 3; //指向日

day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); //BCD转换十进制

clock_time ++; //指向月

month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); //BCD转换十进制

clock_time ++; //指向年

year = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f ); //BCD转换十进制

//定位日历地址

if( c_flag == 0 )

calendar_address = ( year + 99 ) * 3;

else

calendar_address = ( year - 1 ) * 3;

//春节(正月初一)所在的阳历月份

temp1 = year_code[ calendar_address + 2 ] & 0x60; //Bit6~~Bit5:春节所在的阳历月份

temp1 >>= 5 ;

//春节(正月初一)所在的阳历日期

temp2 = year_code[ calendar_address + 2 ] & 0x1f; //Bit4~~Bit0:春节所在的阳历日期

//计算春节(正月初一)离当年元旦{ 1月1日(阳历) }的天数;春节只会在阳历的1月或2月temp3=temp2-1;

if(temp1!=1) temp3+=0x1f;

//计算阳历月离当年元旦{ 1月1日(阳历) }的天数

if( month < 10 )

{day_number = day_code1[ month - 1 ] + day ;}

else

{day_number = day_code2[ month - 10 ] + day ;}

//如果阳历的月大于2 且该年的2月为闰月,天数加1

//闰年指的就是阳历有闰日或阴历有闰月的一年;

//阳历四年一闰,在二月加一天,这一天叫做闰日:

//农历三年一闰,五年两闰,十九年七闰,每逢闰年所加的一个月叫做闰月。

if( ( month <= 2 ) || ( year % 0x04!= 0) ) day_number-=1;

// day_number ++;

// if ((month<2)||(year%0x04!=0))

// day_number-=1;

//判断阳历日在春节(正月初一) 之前还是之后

if( day_number >= temp3 ) //阳历在春节之后或者春节当日

{

day_number -= temp3;

month = 1;

month_point = 1; // month_point 为月份指向,阳历日在春季前就是春季

flag_month = get_moon_day( month_point, calendar_address ); //检查该阴历月的大小大月返回1 小月返回0

flag_year = 0;

if (flag_month==0) {temp1=29;} else{temp1=30;}

//闰月所在的月分

temp2 = year_code[ calendar_address ] & 0xf0;

temp2 >>= 4; //提取高四位假如是0 表示没有闰月

while( day_number >= temp1 )

{

day_number -= temp1;

month_point ++;

if( month == temp2 )

{

flag_year = ~ flag_year;

if( flag_year == 0 )

month +=1;

}

else

month ++ ;

flag_month = get_moon_day( month_point, calendar_address );

if( flag_month )

temp1 = 30;

else

temp1 = 29;

}

day = day_number + 1;

}

else //阳历在春节之前使用以下代码进行运算

{

temp3 -= day_number;

if( year == 0 )

{ year = 0xe3; c_flag = 1; }

else

year -= 1;

calendar_address -= 3;

month = 0xc;

temp2 = year_code[ calendar_address ] & 0xf0;

temp2 >>= 4; //提取高4位

flag_year=0;

if( temp2 == 0 )

month_point = 12;

else

month_point = 13;

//flag_year = 0;

flag_month = get_moon_day( month_point, calendar_address );

if( flag_month )

temp1 = 30;

else

temp1 = 29;

while( temp3 > temp1 )

{

temp3 -= temp1;

month_point --;

if( flag_year == 0 )

month -=1;

if( month == temp2 )

flag_year = ~ flag_year;

flag_month = get_moon_day( month_point, calendar_address );

if( flag_month )

temp1 = 0x1e;

else

temp1 = 0x1d;

}

day = temp1 - temp3 + 1;

}

//HEX->BCD ,运算结束后,把数据转换为BCD数据

temp1 = year / 10;

temp1 <<= 4;

clock_moon[2] = temp1 | ( year % 10 );

temp1 = month / 10;

temp1 <<= 4;

clock_moon[1] = temp1 | ( month % 10 );

temp1 = day / 10;

temp1 <<= 4;

clock_moon[0] = temp1 | ( day % 10 );

Lcd_Lunar_Calendar( clock_moon );

}

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

* 名称: void Week_convert( uchar * clock_time )

* 功能: 输入BCD阳历数据;输出BCD星期

* 入口参数:

* 出口参数:

* 说明: 算法: (日期+ 年份+ 所过闰年+ 月校正) / 7 的余数就是星期如果是闰年又不到3 月份上述之和要减一天再

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

void Week_Convert( bit c, uchar * clock_time )

{

uchar year, month, day; //定义年月天

uchar temp;

clock_time += 3; //指向日

day = ( * clock_time >> 4 ) * 10 + ( *clock_time & 0x0f ); //BCD转换十进制

clock_time ++; //指向月

month = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );

clock_time ++; //指向年

year = ( * clock_time >> 4 ) * 10 + ( * clock_time & 0x0f );

if( c == 0 ) //如果为21世纪,年份数加100

year += 100;

temp = year / 4; //所过闰年数只算1900年之后的

temp = year + temp;

temp = temp % 0x07; //为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据

temp = temp + day + table_week[ month - 1 ];

if( ( year % 4 == 0 ) && ( month <3 ) )

temp -=1;

Lcd_Week( temp % 7 );

}

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

#endif

#ifndef _CHARACTER

#define _CHARACTER

/*****************************预定义**************************************/

#define uchar unsigned char

#define uint unsigned int

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

*内容: 0 1 2 3 4 5 6 7 8 9 空白- T :

*大小: 8X16字符

********************************************************************************************

*/

uchar code letter_logo[16][16]={

/*-- 文字: 0 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, /*-- 文字: 1 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, /*-- 文字: 2 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, /*-- 文字: 3 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: 4 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, /*-- 文字: 5 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: 6 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, /*-- 文字: 7 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, /*-- 文字: 8 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, /*-- 文字: 9 --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, /*-- 文字: : --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00, /*-- 文字: - --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01, /*-- 文字: T --*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x1C,0x0C,0xFC,0xFC,0x0C,0x1C,0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00, /*-- 文字: 空白--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: ( --*/

0x00,0x00,0xF0,0xF8,0x0C,0x04,0x00,0x00,0x00,0x00,0x03,0x07,0x0C,0x08,0x00,0x00,

/*-- 文字: ) --*/

0x00,0x00,0x04,0x0C,0xF8,0xF0,0x00,0x00,0x00,0x00,0x08,0x0C,0x07,0x03,0x00,0x00,

};

/******************************************************************************* * 内容年月日

* 大小16X16

*********************************************************************************/ uchar code data_logo[3][32] = {

/*-- 文字: 年--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x40,0x20,0x10,0x0C,0xE3,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0x02,0x00,0x00,

0x04,0x04,0x04,0x04,0x07,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00,

/*-- 文字: 月--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x00,0x00,0x00,0xFF,0x11,0x11,0x11,0x11,0x11,0xFF,0x00,0x00,0x00,0x00,

0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x01,0x01,0x21,0x41,0x3F,0x00,0x00,0x00,0x00,

/*-- 文字: 日--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00,

};

/******************************************************************************* * 内容时分秒

* 大小16X16

*********************************************************************************/ uchar code time_logo[3][32] = {

/*-- 文字: 时--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,

0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,

/*-- 文字: 分--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,

0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00,

/*-- 文字: 秒--*/

/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/

0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,

0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00,

};

/********************************************************************************* * 内容: 日一二三四五六星期

基于单片机电子万年历的毕业设计说明

单片机课程设计报告 电子万年历设计 姓名:建强 学号: 专业班级: 08电气(2)班指导老师:吴永 所在学院:科技学院 2011年6月30日

摘要 随着科技的快速发展,时间的流逝,至从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。美国DALLAS公司推出的具有涓细电流充电能的低功耗实时时钟电路DS1302。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。 具体实现功能: (1)显示年月日时分秒及星期信息 (2)具有可调整日期和时间功能 (3)与即时时间同步

目录 1方案论证 (3) 1.1单片机芯片的选择方案和论证 (3) 1.2显示模块选择方案和论证 (3) 1.3时钟芯片的选择方案和论证 (4) 1.4电路设计最终方案决定 (4) 2系统的硬件设计与实现 (5) 2.1电路设计框图 (5) 2.2系统硬件概述 (5) 2.3主要单元电路的设计 (5) 2.3.1单片机主控制模块的设计 (5) 2.3.2时钟电路模块的设计 (6) 2.3.3电路原理及说明 (7) 2.3.4显示模块的设计 (8) 3系统的软件设计 (9) 3.1程序流程框图 (9) 4测试与结果分析 (11) 4.1硬件测试 (10) 4.2软件测试 (10) 4.3测试结果分析与结论 (10) 4.3.1 测试结果分析 (10) 4.3.2 测试结论 (10) 5prodeus软件仿真........................................ ..........错误!未定义书签。 5.1Proteus ISIS简介 (12) 5.2Proteus运行流程 (13) 5.3Proteus功能仿真 (13) 6课程设计总结与体会.......................................... .....错误!未定义书签。 参考文献...........................................................错误!未定义书签。 附录一:系统电路图.................................................错误!未定义书签。 附录二:系统程序...................................................错误!未定义书签。

基于51单片机的万年历的设计

单片机课程实训SCM PRACTICAL TRAINING

目录 第一部分课程设计任务书 (1) 一、课程设计题目 (1) 二、课程设计时间 (1) 三、实训提交方式 (1) 四、设计要求 (1) 第二部分课程设计报告 (2) 一、单片机发展概况 (2) 二、MCS-51单片机系统简介 (2) 三、设计思想 (3) 四、硬件电路设计 (3) 1. 总体设计 (3) 2. 晶振电路 (4) 3. 复位电路 (4) 4. DS1302时钟电路 (5) 5. 温度采集系统电路 (5) 6. 按键调整电路 (6) 7. 闹钟提示电路 (6) 五、软件设计框图 (7) 六、程序源代码 (8) 1. 主程序 (8) 2. 温度控制程序 (11) 3. 日历设置程序 (13) 4. 时钟控制程序 (18) 5. 显示设置程序 (20) 七、结束语 (23) 八、课程设计小组分工 (23) 九、参考文献 (23)

第一部分课程设计任务书 一、课程设计题目 用中小规模集成芯片设计制作万年历。 二、课程设计时间 五天 三、实训提交方式 提交实训设计报告电子版与纸质版 四、设计要求 (1)显示年、月、日、时、分、秒和星期,并有相应的农历显示。(2)可通过键盘自动调整时间。 (3)具有闹钟功能。 (4)能够显示环境温度,误差小于±1℃ (5)计时精度:月误差小于20秒。

第二部分课程设计报告 一、单片机发展概况 单片机诞生于20世纪70年代末,它的发展史大致可分为三个阶段: 第一阶段(1976-1978):初级单片机微处理阶段。该时期的单片机具有 8 位CPU,并行 I/O 端口、8 位时序同步计数器,寻址范围 4KB,但是没有串行口。 第二阶段(1978-1982):高性能单片机微机处理阶段,该时期的单片机具有I/O 串行端口,有多级中断处理系统,15 位时序同步技术器,RAM、ROM 容量加大,寻址范围可达 64KB。 第三阶段(1982-至今)位单片机微处理改良型及 16 位单片机微处理阶段民用电子产品、计算机系统中的部件控制器、智能仪器仪表、工业测控、网络与通信的职能接口、军工领域、办公自动化、集散控制系统、并行多机处理系统和局域网络系统。 二、MCS-51单片机系统简介 MCS-51系列单片机产品都是以Intel公司最早的典型产品8051为核心构成的。MCS-51单片机由CPU 、RAM 、ROM 、I/O接口、定时器/计数器、中断系统、内部总线等部件组成。8051单片机的基本性能有: ◆8位CPU; ◆布尔代数处理器,具有位寻址能力; ◆128B内部RAM,21个专用寄存器; ◆4KB内部掩膜ROM; ◆2个16位可编程二进制加1定时器/计数器; ◆32个(4×8位)双向可独立寻址的I/O口; ◆1个全双工UART(异步串行通信口); ◆5个中断源,两级中断结构; ◆片内振荡器及时钟电路,晶振频率为1.2MHz~12MHz; ◆外部程序/数据存储器寻址空间均为64KB; ◆111条指令,大部分为单字节指令; ◆单一+5V电源供电,双列直插40引脚DIP封装。

51单片机万年历毕业设计论文

专科毕业设计(论文) 题目51单片机电子万年历论文 51单片机电子万年历论文 摘要: 电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。在编写程序过程中发现

以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成 了程序部分的编写。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LED显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用2片7SEG-MPX8-CA和一片7SEG-MPX4-CA。7SEG-MPX8-CA是一种八个共阳二极管显示器,7SEG-MPX4-CA是一种四个共阳二极管显示器。为了能更轻松的控制这三片显示器,本人使用了3片74HC164来驱动。74HC164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。软件方面主要包括日历程序、时间调整程序,公历转阴历程序,显示程序等。程序采用汇编语言编写,以便更简单地实现调整时间及阴历显示功能。所有程序编写完成后,在wave软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。最后总在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。 关键词: 时钟电钟;DS1302;DS18B20;动态扫描;单片机 Abstract E-calendar day time is a very wide range of tools, increasingly popular in modern society. It can be year, month, day, Sunday, hours, minutes, seconds for time, but also has a leap year compensation to a variety of functions, and the DS1302's long life, small error. For the digital electronic calendar using an intuitive digital display can simultaneously display year, month, day, Sunday, hours, minutes, seconds, and temperature and other information, but also a time-calibration and other functions. The circuit uses AT89S52 microcontroller as the core, power consumption, low-voltage work in 3V, the voltage can choose 3 ~ 5V voltage supply. The design is based on 51 series of microcontrollers to the design of electronic calendar, you can display date information on when the minutes and seconds, and weeks, with adjustable date and time functions. At the same time in the design of the theoretical basis of the MCU and peripheral expansion of knowledge of the more comprehensive preparation. The hardware and software design, there is no good basic knowledge and practical experience will be greatly limited, each feature is required to achieve the kind of hardware, procedures, how to write, how to implement such algorithms, there is no certain foundation can not be good implementation. Found during the preparation process to the existing knowledge to complete the preparation of the task alone difficult, In the help of teachers and students to complete the program part of the preparation. Calendar of the design process in hardware and software to synchronize the design. Hardware mainly by the AT89C52 microcontroller, LED display circuit, and the tune composed of the circuit when the button. In the SCM choice I used the AT89C52 microcontroller, which is suitable for many of the more complex control applications. Monitor the use of two 7SEG-MPX8-CA and a 7SEG-MPX4-CA. 7SEG-MPX8-CA is a total

本科毕业设计--基于51单片机的电子日历设计

成都电子机械高等专科学校成教院毕业设计(论文) 论文题目:基于51单片机的电子日历设计 教学点:重庆科创职业学院 指导老师:张忠雨职称:讲师 学生姓名:聂燕学号: 2011700558 专业:应用电子技术 成都电子机械高等专科学校成教院制 2012 年 3 月 9 日

成都电子机械高等专科学校成教院毕业设计(论文)任务书 题目:基于51单片机的电子日历设计 任务与要求: 通过单片机设计电子日历数码管正常显示阳历、阴历日期,显示的格式为年-月-日,利用外部按键的操作实现阳历和阴历之间的 转换,实现阴历和阳历显示的暂停、运行等功能。 时间:2011年12月15日至2012 年3月15日共12 周教学点:重庆科创职业学院 学生姓名:聂燕学号:2011700558 专业:应用电子技术 指导单位或教研室: 指导教师:张忠雨职称:讲师 成都电子机械高等专科学校成教院制

毕业设计(论文)进度计划表

摘要 设计以单片机AT89C51为核心部件的电子日历,利用74LS245作为驱动器,74LS138作为译码器使用,六个七段数码管均采用共阴极的方式,P0口作为段选码输出口,P2口作为位选码输出口。 本次设计的题目是基于单片机的电子日历设计,可以正常的显示年、月、日,还可以利用外部按键实现阴历和阳历之间的转换以及暂停等功能。电子日历具有性能稳定、精确度高、成本低、易于产品化,以及方便、实用等特点。适用于家庭、公司、机关等众多场所。为人们的日常生活、出行安排提供了方便,成为人们日常生活中不可缺少的一部分。 本次设计可分为两部分:硬件系统、软件系统。 硬件系统包括:AT89S51单片机、74LS245驱动器、74LS138译码器、RC复位电路、+5V直流电源电路、去抖电路、动态显示扫描电路。 软件系统主要有单片机的编程构成。 关键词:单片机,日历,位码,段码,显示

基于51单片机电子万年历设计

基于51单片机电子万年历设计 专业:机电设备维修与管理姓名:杜洪浦指导老师: 摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分和秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3到5V电压供电。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路以及串口下载电路等组成。在单片机的选择上使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序,显示程序等。程序采用汇编语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。 关键词时钟电钟,DS1302,液晶LCD1602,单片机 目录 1设计要求与方案论证 (2) 1.1 设计要求 (2) 1.2 系统基本方案选择和论证 (2) 1.2.1单片机芯片的选择方案和论证 (2) 1.2.2 显示模块选择方案和论证 (3) 1.2.3时钟芯片的选择方案和论证: (3) 1.3 电路设计最终方案决定 (3) 2系统的硬件设计与实现 (3) 2.1 电路设计框图 (4) 2.2 系统硬件概述 (4) 2.3 主要单元电路的设计 (4) 2.3.1单片机主控制模块的设计 (4)

基于单片机的多功能万年历毕业论文

基于单片机的多功能万年历毕业论文 目录 1 设计任务与要求 2 方案设计与论证 2.1方案一 (3) 2.2 方案二 (4) 2.3 方案三 (4) 2.4 方案论证 (5) 3 硬件单元电路设计与参数计算 3.1 主控制系统 (6) 3.2时钟振荡电路 (7) 3.3复位电路 (8) 3.4 DS1302时钟电路 (9) 3.5按键电路 (10) 3.6 显示电路 (10) 3.7蜂鸣器电路 (11) 4 流程图与各模块的程序 4.1 流程图 (12) 4.2 部分子程序 (13) 5 电路仿真调试 5.1 总原理图 (18) 5.2 整体电路仿真图以及仿真结果分析 (19) 5.3 调试 (20) 参考文献 (21) 致谢 (22) 附录 (23) 毕业设计(论文)工作容及完成时间:

工作安排如下: 1、查阅文献,翻译英文资料,书写开题报告第1---4周 2、相关资料的获取和必要知识的学习第5---9周 3、设计系统的硬件和软件模块并调试第10--14周 4、撰写论文第15--16周 5、总结,准备答辩第17周 参考文献 [1]朱月秀冷祖祁,单片机基础(第3版):航航天大学 [2] 华成英童诗白,模拟电子技术基础(第四版):高等教育 [3}建领薛园园,零基础学单片机C语言程序设计:机械工业 [4]楼然苗光飞. 单片机课程设计指导:航航天大学 [5]凤霞. C语言程序设计教程(第二版):理工大学 [6]亮侯国锐. 单片机C语言编程与实例:人民邮电 [7]义和王敏男许宏昌余春长 . 例说5单片机(C语言版):人民邮电 [8]郭天祥编.新概念51单片机C语言教程.:电子工业,2009. [9]周兴华编.手把手教你学单片机C程序设计.:航空航天大学,2008.6. [10] 谭浩强编.C程序设计:清华大学,2008.7. 信息工程系自动化专业类 0882021班 学生(签名): 填写日期:2012 年 5 月20日 指导教师(签名): 助理指导教师(并指出所负责的部分): 信息工程系主任(签名):

基于AT89C51单片机的电子万年历的设计_课程设计报告

课程设计报告 设计名称:电子万年历设计 专业班级:自动化10101班 完成时间:2013年6月9日 报告成绩:

摘要 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。 关键字AT89C51;电子万年历; DS1302

1 绪论 1.1 课题研究的背景 随着科技的快速发展,时间的流逝,从观太阳、摆钟到现在电子钟,人类不断研究,不断创新纪录。它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89C51单片机作为核心,功耗小,能在3V 的低压工作,电压可选用3~5V电压供电。 此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 1.2课题的研究目的与意义 二十一世纪是数字化技术高速发展的时代,而单片机在数字化高速发展的时代扮演着极为重要的角色。电子万年历的开发与研究在信息化时代的今天亦是当务之急,因为它应用在学校、机关、企业、部队等单位礼堂、训练场地、教学室、公共场地等场合,可以说遍及人们生活的每一个角落。所以说电子万年历的开发是国家之所需,社会之所需,人民之所需。 由于社会对信息交换不断提高的要求及高新技术的逐步发展,促使电子万年历发展并且投入市场得到广泛应用。 1.3课题解决的主要内容 本课题所研究的电子万年历是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面: (1)选用电子万年历芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。 (2)根据选用的电子万年历芯片设计外围电路和单片机的接口电路。 (3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。 (4)根据设计的硬件电路,编写控制AT89C51芯片的单片机程序。 (5)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。 (6)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。 (7)软件设计时必须要有完善的思路,要做到程序简单,调试方便。

基于单片机的电子万年历的设计文献综述

文献综述 基于单片机的电子万年历的设计 学生: 学号: 专业: 指导教师: 四川理工学院自动化与电子信息学院 二O一五年三月

前言 在当代繁忙的工作与生活中,时间与我们每一个人都有非常密切的关系,每个人都受到时间的影响。为了更好的利用我们自己的时间,我们必须对时间有一个度量,因此产生了钟表。钟表的发展是非常迅速的,从刚开始的机械式钟表到现在普遍用到的数字式钟表,即使现在钟表千奇百怪,但是它们都只是完成一种功能——计时功能,只是工作原理不同而已,在人们的使用过程中,逐渐发现了钟表的功能太单一,没有更大程度上的满足人们的需求。因此在这里,我想能不能把一些辅助功能加入钟表中。人类不断研究,不断创新纪录。发展到现在人们广泛使用的万年历。本文主要查阅近几年有关万年历的文献期刊。 诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,但是所有这些,都是以钟表数字化为基础的。因此,研究万年历及扩大其应用,有着非常现实的意义。它可以对年、月、日、周日、时、分、秒进行计时,对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒等信息,还具有时间校准等功能。

正文 1.本课题的研究意义 低功耗实时时钟电路DS1302。它可以对年、月、日、周、日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S51单片机作为核心,功耗小,能在3V的低压工作,电压可选用3—5V电压供电。 近些年我国开始重视电子万年历的开发与设计,但是中国电子万年历出现的问题中,许多不容乐观,如产业结构不合理、产业集中于劳动力密集行产品;技术密集型产品明显落后于发达工业国家;生产要素决定性作用正在消弱;产业能源消耗大、产出率低、环境污染严重、对自然资源破坏力大;企业总体规模偏小、技术创新能力薄弱;管理水平落后等。中国电子万年历产业发展已到了岔口;中国电子万年历产业生产企业急需选着发展方向 2.本课题国内外研究现状 当今社会,应用单片机的产品已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的足迹。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等,这些都离不开单片机。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的工程师和科学家。科技越发达,智能化的东西就越多。学习单片机是社会发展的必然需求,也是大学期间的必修课。 在国内单片机学习呈上升趋势,但是很多人学习时没有头绪,不知道从何下手。面对种类繁多的各类开发板,仿真器,让初学者无所事从,不但多花钱还多走不少弯路,学生学习单片机没有大的资金投入,能够做到少花钱多办事才是最好的。 8051系列是我们在大学课堂中学习的。因此本课题围绕8051系列单片机设计,从电路图绘制,PCB板设计,硬件焊接,程序设计,在线仿真到各项功能实现,目的在于让学生将课堂上学来的理论知识与实践相结合,提高对单片机的认识,学习专业软件的操作,熟悉制作过程,掌握一门技能,加强专业知

单片机课程设计--基于51单片机的万年历

单片机课程设计报告 万年历的设计

基于51单片机的万年历 摘要: 电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89C52单片机,LCD显示电路,以及调时按键电路等组成。在单片机的选择上本人使用了AT89C52单片机,该单片机适合于许多较为复杂控制应用场合。显示器使用了1602液晶显示,并且使用蜂鸣器实现了整点报警的功能,温度测试的功能实现使用了DS18B20,并实现了温度过高或过低时的温度报警。 软件方面主要包括日历程序、时间调整程序,显示程序等。程序采用C语言编写。所有程序编写完成后,在KeilC51软件中进行调试,

确定没有问题后,在Proteus软件中嵌入单片机内进行仿真,并最终实现基本要求。 综上所述此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。 一、设计要求 基本要求: 1,8 个数码管上显示,显示时间的格式为(假如当前时间是19:32:20)“19-32-20”; 2,具有日历功能; ③时间可以通过按键调整。 发挥部分: ④具有闹钟功能(可以设定多个)。 二:总体设计 电路设计框图

基于51单片机的万年历_毕业设计

基于51单片机的万年历 中文摘要 本设计万年历以AT89C51为控制中心,与温度传感器DS18B20,时钟芯片DS1302综合应用为一体,不仅能够准确显示时间、日期,闹钟设置,环境温度测量及温度高低温报警等功能。 单片机是一种集CPU、RAM、ROM、I/O接口和中断系统等于一体的器件,只需要外加电源和晶振就可实现对数字信息的处理和控制。单片机与数字万年历相结合,用于时间显示,温度测试等不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被检测数值的技术指标,从而能够大大提高产品的质量和数量。 关键词:单片机,温度传感器,C语言,液晶显示

ABSTRACT This design USES AT89C51 as calendar control center, and the temperature sensor DS18B20, the clock DS1302 chip integrated application as a whole, and not only be able to accurately display the time, date, alarm, the environment temperature measurement and high temperature, low temperature alarm functions. SCM is a collection of CPU, RAM, ROM, I/O interface and interrupt system is one of the devices, only require additional power can be used for vibration and grain is the process of digital information and control. Single-chip microcomputer and digital calendar, combining for time to show, temperature testing has not only control convenient, simple and flexible configuration advantages, and which could increase the technical index of the tested value, which can greatly improve the quality of the products and quantity. Key words:Single-chip microcomputer, Temperature Sensor,C language,Liquid crystal displ

基于51单片机的万年历设计

目录 第一章绪论 (3) 第二章设计要求及设计框图 (4) 2.1 设计要求 (4) 2.2 设计框图 (4) 第三章知识要点 (4) 3.1 LMO16L液晶模块 (4) 3.1.1 LM016L引脚说明 (5) 3.1.2 控制指令 (5) 3.1.3 基于Proteus ISIS 7的液晶模块仿真 (6) 3.2 单片机A T89C51 (8) 3.2.1 主要特性 (8) 3.2.2 管脚说明 (9) 3.2.3 振荡器特性 (11) 3.2.4 芯片擦除 (11) 3.3 时钟芯片DS1302 (11) 3.3.1 DS1302的控制字节 (12) 3.3.2 数据输入输出(I/O) (12) 3.3.3 DS1302的寄存器 (12) 3.4 DS18B20数字温度传感器 (13) 3.4.1技术性能描述 (13) 3.4.2 DS18B20主要的数据部件 (14) 3.4.3 DS18B20温度处理过程 (15) 3.4.4 DS18B20的主要特性 (17) 3.4.5 DS18B20的外形和内部结构 (17) 3.4.6 DS18B20工作原理 (18) 3.4.7 DS18B20的应用电路 (21) 3.4.8 DS18B20使用中注意事项 (23) 第四章硬件设计 (24) 4.1 Proteus软件 (24) 4.1.1 Proteus软件介绍 (24) 4.1.2 功能特点 (24) 4.1.3 革命性的特点 (24) 4.1.4 基本操作 (25) 4.1.5 选择要使用的元件 (25) 4.1.6 功能模块 (26) 4.2 基于89C51的万年历与温度显示器的硬件设计 (28) 4.2.1 设计框图 (29) 4.2.2 电路原理图 (29) 4.3 元件清单 (30) 第五章软件设计 (30)

基于单片机的多功能万年历设计说明

分类号密级U D C 中国地质大学江城学院 毕业设计(论文) 基于单片机的多功能万年历设计 姓名: 专业:电子信息工程 班级: 学号: 指导教师:荣讲师

MCU 论文主题词:多功能万年历单片机 DS1302 数码管 论文答辩日期: 答辩委员会主席:评阅教师:

原创性声明 本人呈交的毕业论文,是在导师的指导下,独立进行研究工作所取得的成果,所有数据、图片资料真实可靠。尽我所知,除文中已经注明引用的容外,本毕业论文的研究成果不包含他人享有著作权的容。对本论文所涉及的研究工作做出贡献的其他个人和集体,均已在文中以明确的方式标明。本毕业论文的知识产权归属于培养单位。 本人签名:日期:

摘要 随着当今世界经济的快速发展和信息化时代的来临,各种各样的小型智能家电产品陆续出现在我们的生活当中。日历是人们不可或缺的日常用品。但一般日历都为纸制用品,使用不便,寿命不长。电子万年历是一种非常广泛的日常计时工具,它采用智能电子控制和显示技术,改善了纸制日历的缺陷。它可以对年、月、日、星期、时、分、秒进行计时,还具有闰年补偿等多种功能。 本设计采用STC89C52单片机为核心,构成单片机控制电路,用DS1302时钟芯片计时,完成时间的自动调整和掉电保护,DS18B20检测温度,再经过单片机处理后把时间和温度信号通过MAX7219和74HC573驱动20位共阴极数码管显示。日历能显示阳历和阴历年、月、日以及星期、时、分、秒、温度。该万年历设有四个按键:S1、S2、S3、S4键,可以实现日期调整,闹钟功能,秒表功能。 关键词:多功能万年历单片机 DS1302 DS18B20 数码管

基于某51单片机地键盘盘可调万年历

开放性实验报告 题目: 基于80C51的万年历设计_ 院系:

专业班级: 学号: 姓名: 指导老师:________________________ 时间:2014年9月8号 摘要 电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周、时、分、秒进行计时,还具有闰年补偿等多种功能。本系统选用DALLAS 公司生产的日历时钟芯片DS1302来作为实时时数字万年历采用直观数字显示,可以同时显示年、月、日、周、时、分、秒等信息,还具有键盘时间校准等功能。该电路采用AT89C52单片机作为核心,用以5V电压供电。 本系统硬件部分由AT89C52单片机、DS1302时钟芯片、LCD1602液晶显示环境下以C51语言编写,包括时间设置、时间显示、时间修正等功能。在仿真的时候,以Proteus 与Keil uVision4软件为基础,编写了MCS-51单片机对LCD1602显示控制的软件,绘制其原理图,并使用Proteus软件与Keil uVision4软件建立联合仿真。本设计主要论述了原理图各个模块的作用,以及控制软件的各个模块的编程。

关键词:时钟芯片DS1302;单片机AT89C52;液晶显示1602;独立键盘等

目录 第1章绪论 (1) 1.1实时万年历的简介 (1) 1.2系统所实现的功能 (3) 第2章开发工具软件简介 (4) 2.1K EIL U V ISION4软件简介 (4) 2.2P ROTEUS软件简介 (4)

2.3K EIL U V ISION4与P ROTEUS软件联合仿真 (5) 第3章LCD1602显示控制技术 (6) 3.11602字符型LCD简介 (6) 3.2LCD1602功能 (7) 3.3 LCD1602的指令说明及时序 (8) 3.4LCD1602的RAM地址映射及标准字库表 (7) 3.5 LCD1602的一般初始化(复位)过程 (8) 第4章系统硬件概况 (13) 4.1系统概况 (13) 4.2 MCS-51单片机最小系统模块 (14) 4.3 DS1302时钟芯片控制与键盘设置时间模块 (15) 4.4 LCD1602显示模块 (16) 第5章软件控制系统概况 (18) 5.1程序流程概况 (18) 5.2 流程图 (18) 5.3 源程序代码 (19) 参考文献 (25)

基于51单片机的万年历设计

洛阳理工学院 课程设计报告课程名称单片机原理与应用 设计题目基于STC89C51万年历得设计与实现专业物联网工程 班级 学号 姓名 完成日期大约在冬季

目录 摘要 (2) 一、设计目标与内容 (3) 1、1设计目标 (3) 1、2 设计内容 (3) 1、3设计要求 (3) 1、4 本章小结 (3) 二、系统设计 (3) 2、1 电路设计框图 (3) 2、2 系统硬件概述 (4) 2、3 主要单元电路得设计 (4) 2、3、1 时钟电路模块得设计 (4) 2、3、2温度传感器电路设计 (6) 2、3、3显示模块得设计 (8) 2、4本章小结 (8) 三、系统得软件设计 (9) 3、1程序流程图 (9) 3、1、1 系统总流程图 (9) 3、1、2 温度程序流程图 (9) 3、1、3 DS1302时钟程序流程图 (10) 3、1、4 LCD显示程序流程图 (11) 3、2程序得设计 (11) 3、2、1 DS18B20测温程序 (11) 3、2、2 DS1302读写程序 (13) 3、2、3液晶显示程序 (14) 3、3本章小结 (15) 四、仿真与调试 (15) 4、1 Keil软件调试流程 (15) 4、2 Proteus软件运行流程 (17) 4、3本章小结 (18) 总结 (18) 基于STC89C51万年历得设计与实现 摘要 古人依靠日冕、漏刻记录时间,而随着科技得发展,电子万年历已经成为日渐流行得日常计时工具。 本文研究得万年历系统拟用STC89C52单片机控制,以DS1302时钟芯片计时、

DS18B20采集温度、1602液晶屏显示。系统主要由温度传感器电路,单片机控制电路,显示电路以及校正电路四个模块组成。本文阐述了系统得硬件工作原理,所应用得各个接口模块得功能以及其工作过程,论证了设计方案理论得可行性。系统程序采用C语言编写,经Keil软件进行调试后在Proteus软件中进行仿真,可以显示年、月、日、星期、时、分、秒与温度并具有校准功能与与即时时间同步得功能。 实验结果表明此万年历实现后具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪表得发展趋势,具有广阔得市场前景。 关键词:万年历单片机仿真 一、设计目标与内容 1、1设计目标 制作出可以检测温度并报警得得电子万年历。 1、2 设计内容 用keilC51编译程序。 用proteus仿真电路图。 将电路图使用万用板或其她电路板焊接实物图。 1、3设计要求 具备在液晶上显示年、月、日、星期、时、分、秒得功能。 具备年、月、日、星期、时、分、秒校准功能。 具有与即时时间同步得功能。 1、4 本章小结 通过设计程序,制作仿真,焊接实物三个步骤,以小组合作得方式来设计满足

基于单片机的万年历设计毕业设计

目录 摘要...................................................................... I Abstract ................................................................. II 第1章绪论.. (1) 1.1 课题背景和意义 (1) 1.2 课题的主要内容 (2) 第2章系统总体方案设计 (3) 2.1 单片机的选择 (3) 2.2 显示模块的方案选择 (3) 2.3 时钟芯片的选择方案 (3) 2.4 键盘的选择 (4) 2.5 最终方案的选择 (4) 第3章万年历系统硬件设计 (6) 3.1 电路设计框图 (6) 3.2 各模块硬件电路设计 (6) 3.2.1 晶振电路模块的设计 (6) 3.2.2 复位电路模块的设计 (7) 3.2.3 单片机的控制模块 (7) 3.2.4 DS1302时钟电路 (11) 3.2.5 LCD12864液晶显示电路 (13) 3.2.6 键盘模块设计 (15) 第4章万年历系统软件设计 (17) 4.1 主程序模块 (17) 4.2 LCD12864显示程序 (18) 4.3 DS1302时钟程序 (19) 4.4 农历转换程序 (20) 4.5 星期自动刷新程序 (21) 4.6 时间调整程序 (22) 第5章系统调试 (24)

5.1 硬件调试 (24) 5.2 软件测试 (24) 5.3 总体调试 (25) 结论 (26) 参考文献 (27) 致谢 (28) 附录1 设计任务书 (29) 附录2 开题报告 (31) 附录3 外文翻译 (36) 附录4 程序清单 (55)

51单片机实现万年历程序文件

51单片机实现万年历 利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。 原理图: pcb图:

源程序: #include #define uint unsigned int #define uchar unsigned char sbit beep=P2^0;//蜂鸣器控制口 sbit timeadd=P2^1;//调节时间加 sbit timesub=P2^2;//调节时间减 sbit timeclk=P2^3;//闹钟设定键 sbit timefun=P2^4;//时间设定键 sbit lcdrs=P2^5;//液晶的命令和数据控制口 sbit ledrw=P2^6;//液晶的写数据口 sbit lcden=P2^7;//液晶显示模块的使能端 sbit timeds=P3^3;//时钟芯片地址闸 sbit timerw=P3^4;//时钟芯片读写 sbit timeas=P3^5;//时钟芯片地址闸 sbit timeen=P3^6;//时钟芯片片选 uchar code table[]="20 - - week "; uchar code table1[]=" : : ";//要显示的字符串 char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1; uchar leap;

void delay(uint x){ uchar i,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } void didi() { beep=0; delay(1000); beep=1; delay(1000); } void write_(uchar ){ lcdrs=0; P0=; delay(5); lcden=1; delay(20); lcden=0; } void write_date(uchar date){ lcdrs=1; P0=date; delay(5); lcden=1; delay(20); lcden=0; } void write_sfm(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10; write_(0x80+0x40+add); write_date(0x30+shi); write_date(0x30+ge); } void write_nyr(uchar add,uchar date){ uchar shi,ge; shi=date/10; ge=date%10;

相关文档
相关文档 最新文档