基于某51单片机的万年历的设计 联系客服

发布时间 : 星期一 文章基于某51单片机的万年历的设计更新完毕开始阅读de8ba116e718964bcf84b9d528ea81c758f52e94

实用文档

uchar i;

for(i=8; i>0; i--) {

ACC = ACC >>1; //相当于汇编中的 RRC ACC7= clock_io; clock_sclk = 1; clock_sclk = 0; }

return(ACC); }

/******************************************************************** * 功 能:向时钟DS1302写入一个时间

********************************************************************/ void Clock_Write_Time(uchar address, uchar temp) {

clock_sclk=0; clock_rst=0; clock_rst=1;

Clock_Write_Byte(address); Clock_Write_Byte(temp); clock_rst=0; clock_sclk=1; }

/******************************************************************** * 功 能:从时钟DS1302读出一个时间

********************************************************************/ uchar Clock_Read_Time(uchar address) {

uchar temp=0; clock_sclk=0; clock_rst=0; clock_rst=1;

Clock_Write_Byte( address|0x01 ); temp=Clock_Read_Byte(); clock_rst=0; clock_sclk=1; return(temp); }

/******************************************************************** * 功 能:时钟初始化

********************************************************************/ void Clock_Initial(uchar *clock_time ) {

标准

实用文档

Clock_Write_Time(0x8e,0x00); //WP=0 写操作 *clock_time &= 0x7f; //最高位为 0 时钟芯片工作

Clock_Write_Time( second_address, * clock_time ); //秒 clock_time ++;

Clock_Write_Time( minute_address, * clock_time ); //分 clock_time ++;

Clock_Write_Time( hour_address, * clock_time ); //时 clock_time ++;

Clock_Write_Time( day_address, * clock_time ); //日 clock_time ++;

Clock_Write_Time( month_address, * clock_time); //月 clock_time ++;

Clock_Write_Time( year_address, * clock_time ); //年 Clock_Write_Time( 0x8e,0x80); //WP=1 写保护 }

/********************************************************************* 功 能:从时钟DS1302读出时间

********************************************************************/ void Clock_Fresh(uchar * clock_time ) {

* clock_time = Clock_Read_Time( second_address ); //读秒 clock_time ++;

* clock_time = Clock_Read_Time( minute_address ); //读分 clock_time ++;

* clock_time = Clock_Read_Time( hour_address ); //读时 clock_time ++;

* clock_time = Clock_Read_Time( day_address ); //读日 clock_time ++;

* clock_time = Clock_Read_Time( month_address ); //读月 clock_time ++;

*clock_time = Clock_Read_Time( year_address ); //读年 }

#endif

5. 显示设置程序

#ifndef _LCD_12864 #define _LCD_12864

/***********************预定义**************************************/ #define uchar unsigned char

#define uint unsigned int/***************************12864管脚配置****************************/ #define port P1 sbit rs=P3^0;

标准

实用文档

sbit rw=P3^1; sbit e=P3^2; sbit cs1=P3^6; sbit cs2=P3^7;

/******************************************************************************************** * 函数名称:Delay()

* 功 能:延迟时间=a*1ms * 入口参数: * 出口参数:无

*********************************************************************************************/ void Delay(uint a) {

uchar i; while(a--)

for(i=0;i<125;i++); }

/******************************************************************************************** * 函数名称:Lcd_Display_On() * 功 能:LCD显示开 * 入口参数:无 * 出口参数:无

*********************************************************************************************/ void Lcd_Display_On() {

port=0x3f; rs=0; rw=0; e=1; e=0; }

/******************************************************************** * 功 能:LCD显示关

********************************************************************/ void Lcd_Display_Off() {

port=0x3e; rs=0; rw=0; e=1; e=0;

标准

实用文档

}

/******************************************************************** * 功 能:LCD设置X坐标

********************************************************************/ void Lcd_Set_X(uchar x) {

port=0xb8|x; rs=0; rw=0; e=1; e=0; }

/******************************************************************** * 功 能:LCD设置Y坐标

********************************************************************/ void Lcd_Set_Y(uchar y) {

port=0x40|y; rs=0; rw=0; e=1; e=0; }

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

* 函数名称:Lcd_Set_X_Y(uchar x, uchar y ) * 功 能:LCD设置x y坐标 * 入口参数:x y * 出口参数:无

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

void Lcd_Set_X_Y(uchar x, uchar y) {

if( y<64 )

{ cs1=1; cs2=0; Lcd_Set_Y( y ); } else

{ cs1=0; cs2=1; Lcd_Set_Y( y-64 ); } Lcd_Set_X( x); }

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

* 函数名称:Lcd_Write_Command() * 功 能:写指令代码

标准

实用文档

* 入口参数:无 * 出口参数:无

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

void Lcd_Write_Command(uchar temp) {

port=temp; rs=0; rw=0; e=1; e=0; }

/******************************************************************************************** * 函数名称:Lcd_Write_Byte() * 功 能:写数据 * 入口参数:无 * 出口参数:无

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

void Lcd_Write_Byte(uchar temp) {

port=temp; rs=1; rw=0; e=1; e=0; }#endif 七、结束语

以上为本次设计的概述,此后,对设计的硬件和软件各方面还需进一步的加深,对芯片的管脚功能和用法还需有充分的了解,根据设计思路设计硬件电路。包括单片机的控制电路、时钟电路、键盘扫描电路、显示电路和闹钟电路。然后通过软件编程,实现对年、月、日、时、分、秒、星期和农历的自动调整。利用按键控制,基本实现万年历的各个功能。

通过本次课程设计,我们认识到自己的单片机知识还是不能够支持单独做出作品,需要团队协作以及网上查找资料。

八、课程设计小组分工

九、参考文献

标准