当前位置:文档之家› 12864LCD万年历

12864LCD万年历

12864LCD万年历
12864LCD万年历

12864LCD+DS1302万年历设计proteus仿真

(2011-05-18 23:09:40)

标签:

it

原理图

程序代码

//DS1302与12864设计的可调式电子日历与时钟//

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

extern void LCD_Initialize();

extern void Display_A_Char_8x16(ucharP,ucharL,uchar *M)reentrant; extern void Display_A_WORD(ucharP,ucharL,uchar *M)reentrant;

//在调整日期时间时,用该位决定是否反白显示//

extern bit Reverse_Display;

sbit SDA =P1^0; //DS1302数据线

sbit CLK =P1^1; //DS1302时钟线

sbit RST =P1^2; //DS1302复位线

sbit K1 =P3^4; //选择

sbit K2 =P3^5; //加

sbit K3 =P3^6; //减

sbit K4 =P3^7; //确定

uchartCount =0;

//一年中每月的天数,2月的天数由年份决定

ucharMonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};

//所读取的日期时间

ucharDateTime[7];

//当前调整的时间对象:秒,分,时,日,月,年(0,1,2,3,4,6)

//5对应星期,星期调节由年月日调整自动完成

char Adjust_Index=-1;

//水平与垂直偏移

ucharH_Offset=10,V_Page_Offset=0;

//年月日,星期,时分秒汉字点阵(16*16)------

uchar code DATE_TIME_WORDS[]=

{/

/

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, /

/

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,

/

/

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,

/

/

0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x2A,0x3E,0x00,0x00,0x00, 0x00,0x48,0x46,0x41,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x49,0x41,0x40,0x00,

/

/

0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,

0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00,

/

/

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,

/

/

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,

/

/

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,

/

/

0x00,0x02,0x02,0xF2,0x12,0x12,0x12,0x12,0xF2,0x02,0x02,0x02,0xFE,0x02,0x02,0x00, 0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x07,0x10,0x20,0x40,0x3F,0x00,0x00,0x00,

/

/

0x20,0x21,0xEE,0x04,0x00,0x00,0xFF,0x29,0xA9,0xBF,0xA9,0xA9,0x01,0xFF,0x00,0x00, 0x00,0x00,0x1F,0x88,0x44,0x30,0x0F,0x00,0x0F,0x04,0x04,0x4F,0x80,0x7F,0x00,0x00,

/

/

0x00,0x02,0x02,0x02,0x02,0x82,0x7E,0x22,0x22,0x22,0x22,0xF2,0x22,0x02,0x02,0x00,

0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x60,0x20,0x1F,0x00,0x00,0x00,0x00,

/

/

0x00,0x00,0xFE,0x02,0x22,0x22,0x22,0x22,0xFA,0x22,0x22,0x22,0xE2,0x02,0x02,0x00, 0x40,0x30,0x0F,0x00,0x40,0x20,0x18,0x06,0x01,0x00,0x20,0x60,0x3F,0x00,0x00,0x00,

/

/

0x00,0x02,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0xC2,0x82,0x02,0x00,0x00,0x00, 0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x30,0x20,0x00,

/

/

0x42,0x42,0xFE,0x42,0x42,0xE0,0x00,0xFF,0x00,0x42,0x42,0xFE,0x42,0x42,0x42,0x00, 0x10,0x10,0x0F,0x88,0x49,0x20,0x18,0x07,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x00,

/

/

0x00,0xFE,0x22,0x52,0x8E,0x00,0xC4,0xB4,0x8C,0xE7,0x84,0x84,0x84,0x84,0x04,0x00, 0x00,0xFF,0x02,0x04,0x23,0x10,0x0C,0x40,0x80,0x7F,0x00,0x02,0x04,0x18,0x30,0x00,

/

0x00,0x10,0x10,0x92,0x72,0xA2,0xA2,0xF2,0xAA,0xAA,0x66,0xA2,0x12,0x18,0x00,0x00, 0x10,0x08,0x06,0x01,0x04,0x44,0x84,0x7F,0x04,0x04,0x04,0x01,0x06,0x18,0x08,0x00,

};

//星期几的汉字点阵(16*16)

uchar code WEEKDAY[]=

{/

/

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

/

//

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/

//

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

/

/

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

/

//

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

//

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

/

/

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

};

//半角数字点阵(8*16)

uchar code DIGITS[]={//

//

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

/

//

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/

//

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

/

/

0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

/

//

0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,

//

0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,

/

/

0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,

/

/

0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

/

/

0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,

/

/

0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, };

//向DS1302写、读一字节--------

//向DS1302写入一字节

void Write_A_Byte_TO_DS1302(uchar x)

{uchar i;

for (i=0;i<8;i++)

{SDA=x&1;CLK=1;CLK=0;x>>=1;}

}

//从DS1302读取一字节

uchar Get_A_Byte_FROM_DS1302()

{uchari,b,t;

for(i=0;i<8;i++)

{b>>=1;t=SDA;b|=t<<7;CLK=1;CLK=0;}

//BCD码转换

return b/16*10+b;}

//DS1302指定位置读数据

ucharRead_Data(ucharaddr)

{uchardat;

RST=0;CLK=0;RST=1;

Write_A_Byte_TO_DS1302(addr);

dat=Get_A_Byte_FROM_DS1302();

CLK=1;RST=0;

return dat;}

//向DS1302某地址写入数据

void Write_DS1302(ucharaddr,uchardat)

{CLK=0;RST=1;

Write_A_Byte_TO_DS1302(addr);

Write_A_Byte_TO_DS1302(dat);

CLK=0;RST=0;}

//设置时间

void SET_DS1302()

{uchar i;

Write_DS1302(0x8E,0x00);

//秒分时日月年依次写入

for(i=0;i<7;i++)

{//秒的起始地址10000000(0x80),

//后续依次是分,时,日,月,周,年,写入地址每次递增2 Write_DS1302(0x80+2*i,(DateTime[i]/10<<4)|(DateTime[i])); }

Write_DS1302(0x8E,0x80);

}

//读取当前日期时间

void GetTime()

{uchar i;

for(i=0;i<7;i++)

{DateTime[i]=Read_Data(0x81+2*i);

}

}

//判断是否为闰年

ucharisLeapYear(uint y)

{return(y%4==0&&y0!=0)||(y@0==0);}

//----------------------------------------

void RefreshWeekDay()

{uinti,d,w=5;

for(i=2000;i<2000+DateTime[6];i++)

{d=isLeapYear(i)?366:365;

w=(w+d)%7;}

d=0;

for (i=1;i

d+=MonthsDays[i];

d+=DateTime[3];

DateTime[5]=(w+d)%7+1;}

//年月日时分秒++--

void DateTime_Adjust(char x)

{switch(Adjust_Index)

{case 6://年00-99

if(x==1&&DateTime[6]<99) DateTime[6]++;

if(x==-1&&DateTime[6]>0)DateTime[6]--;

//获取2月天数

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28; //如果年份变化后当前月份的天数大于上限则设为上限

DateTime[3]=MonthsDays[DateTime[4]];

RefreshWeekDay();//刷新星期

break;

case 4://月01-12

if(x==1&&DateTime[4]<12)DateTime[4]++;

if(x==-1&&DateTime[4]>1)DateTime[4]--;

//获取2月天数

MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28;

//如果年份变化后当前月份的天数大于上限则设为上限

if(DateTime[3]>MonthsDays[DateTime[4]])

DateTime[3]=MonthsDays[DateTime[4]];

RefreshWeekDay();//刷新星期

break;

case 3://日00-28/29/30/31;调节前首先根据年份得出该年中2月的天数MonthsDays[2]=isLeapYear(2000+DateTime[6])?29:28;

//根据当前月份决定调节日期的上限

if(x==1&&DateTime[3]

if(x==-1&&DateTime[3]>0)DateTime[3]--;

RefreshWeekDay();//刷新星期

break;

case 2://时

if(x==1&&DateTime[2]<23)DateTime[2]++;

if(x==-1&&DateTime[2]>0)DateTime[2]--;

break;

case 1://分

if(x==1&&DateTime[1]<59)DateTime[1]++;

if(x==-1&&DateTime[1]>0)DateTime[1]--;

break;

case 0://秒

if(x==-1&&DateTime[0] >0) DateTime[0]--;

break;}}

//定时器0每秒刷新LCD显示

void T0_INT() interrupt 1

{TH0=-50000/256;

TL0=-50000%6;

if(++tCount!=2)return;

tCount=0;

//年(后两位)

Reverse_Display=Adjust_Index==6;

Display_A_Char_8x16(V_Page_Offset,16+H_Offset,DIGITS+DateTime[6]/10*16); Display_A_Char_8x16(V_Page_Offset,24+H_Offset,DIGITS+DateTime[6]*16);

//月

Reverse_Display=Adjust_Index==4;

Display_A_Char_8x16(V_Page_Offset,48+H_Offset,DIGITS+DateTime[4]/10*16); Display_A_Char_8x16(V_Page_Offset,56+H_Offset,DIGITS+DateTime[4]*16);

//日

Reverse_Display=Adjust_Index==3;

Display_A_Char_8x16(V_Page_Offset,80+H_Offset,DIGITS+DateTime[3]/10*16); Display_A_Char_8x16(V_Page_Offset,88+H_Offset,DIGITS+DateTime[3]*16);

//星期

Reverse_Display=Adjust_Index==5;

Display_A_Char_8x16(V_Page_Offset+3,104+H_Offset, WEEKDAY+DateTime[5]*16-16);

//时

Reverse_Display=Adjust_Index==2;

Display_A_Char_8x16(V_Page_Offset+6,16+H_Offset,DIGITS+DateTime[2]/10*16); Display_A_Char_8x16(V_Page_Offset+6,24+H_Offset,DIGITS+DateTime[2]*16);

//分

Reverse_Display=Adjust_Index==1;

Display_A_Char_8x16(V_Page_Offset+6,48+H_Offset,DIGITS+DateTime[1]/10*16); Display_A_Char_8x16(V_Page_Offset+6,56+H_Offset,DIGITS+DateTime[1]*16);

//秒

Reverse_Display=Adjust_Index==0;

Display_A_Char_8x16(V_Page_Offset+6,80+H_Offset,DIGITS+DateTime[0]/10*16); Display_A_Char_8x16(V_Page_Offset+6,88+H_Offset,DIGITS+DateTime[0]*16);} //键盘中断(INT0)

void EX_INT0() interrupt 0

{

if (K1 == 0) //选择调整对象

{

if (Adjust_Index == -1 || Adjust_Index == 0) Adjust_Index = 7;

Adjust_Index--;

if (Adjust_Index == 5) Adjust_Index = 4; //跳过对星期的调整

}

else

if (K2 == 0)

DateTime_Adjust( 1); //加

else

if (K3 == 0)

DateTime_Adjust( -1 ); //减

else

if (K4 == 0) //确定

{

SET_DS1302();

Adjust_Index = -1;

}

}

void main()

{

//液晶初始化

LCD_Initialize();

//显示年的固定前两位

Display_A_Char_8x16(V_Page_Offset,0+H_Offset,DIGITS+2*16);

Display_A_Char_8x16(V_Page_Offset,8+H_Offset,DIGITS);

//显示固定汉字:年月日,星期,时分秒

Display_A_WORD(V_Page_Offset,32+H_Offset,DATE_TIME_WORDS+0*32); Display_A_WORD(V_Page_Offset,64+H_Offset,DATE_TIME_WORDS+1*32); Display_A_WORD(V_Page_Offset,96+H_Offset,DATE_TIME_WORDS+2*32); Display_A_WORD(V_Page_Offset+3,72+H_Offset,DATE_TIME_WORDS+3*32); Display_A_WORD(V_Page_Offset+3,88+H_Offset,DATE_TIME_WORDS+4*32); Display_A_WORD(V_Page_Offset+6,32+H_Offset,DATE_TIME_WORDS+5*32); Display_A_WORD(V_Page_Offset+6,64+H_Offset,DATE_TIME_WORDS+6*32); Display_A_WORD(V_Page_Offset+6,96+H_Offset,DATE_TIME_WORDS+7*32); Display_A_WORD(V_Page_Offset+2,0+H_Offset,DATE_TIME_WORDS+8*32); Display_A_WORD(V_Page_Offset+2,16+H_Offset,DATE_TIME_WORDS+9*32); Display_A_WORD(V_Page_Offset+2,32+H_Offset,DATE_TIME_WORDS+10*32); Display_A_WORD(V_Page_Offset+2,48+H_Offset,DATE_TIME_WORDS+11*32); Display_A_WORD(V_Page_Offset+4,0+H_Offset,DATE_TIME_WORDS+12*32); Display_A_WORD(V_Page_Offset+4,16+H_Offset,DATE_TIME_WORDS+13*32); Display_A_WORD(V_Page_Offset+4,32+H_Offset,DATE_TIME_WORDS+14*32); Display_A_WORD(V_Page_Offset+4,48+H_Offset,DATE_TIME_WORDS+15*32);

//允许INT0,T0中断

IE=0x83;

IP=0x01;

IT0=0x01;

TH0=-50000/256;

TL0=-50000/256;

TR0=1;

while(1)

{

//如果未执行调整操作则正常读取当前时间

if(Adjust_Index==-1)GetTime();

}

}

// 名称:12864LCD显示驱动程序(不带字库)//------------------------------------------------------------- #include

#include

#define unchar unsigned char

#define uint unsigned int

#define LCD_DB_PORT P0 //液晶DB0-DB7 #define LCD_START_ROW 0xC0 //起始行

#define LCD_PAGE 0xB8 //页指令

#define LCD_COL 0x40 //列指令

//液晶引脚定义

sbit DI =P2^0 ;

sbit RW =P2^1 ;

sbit E =P2^2 ;

sbit CS1 =P2^3 ;

sbit CS2 =P2^4 ;

sbit rst =P2^5 ;

bit Reverse_Display =0;

//----------------------------------------------------------- //检查LCD是否忙

//-----------------------------------------------------------

bit LCD_Check_Busy ()

{

LCD_DB_PORT =0xFF;

RW =1; _nop_(); DI =0;

E =1;_nop_(); E =0;

return (bit) (P0 & 0x80);

}

//-----------------------------------------------------------

// 向LCD发送命令

//-----------------------------------------------------------

void LCD_Write_Command( unchar c)

{

while (LCD_Check_Busy ());

LCD_DB_PORT =0xFF; RW =0; _nop_();DI =0;

LCD_DB_PORT = c; E =1; _nop_();E =0;

}

//-----------------------------------------------------------

//向LCD发送数据

//-----------------------------------------------------------

//向LCD发送数据

void LCD_Write_Data(uchar d )

{

while(LCD_Check_Busy());

LCD_DB_PORT = 0xFF;

RW = 0; _nop_();DI = 1;

//根据Reverse_Display决定是否反相显示

if (! Reverse_Display) LCD_DB_PORT = d; else LCD_DB_PORT = ~d;

E = 1 ;_nop_(); E = 0;

}

//初始化LCD

void LCD_Initialize()

{

CS1 = 1; CS2 = 1;

LCD_Write_Command(0x38);

LCD_Write_Command(0x0F);

LCD_Write_Command(0x01);

LCD_Write_Command(0x06);

LCD_Write_Command(LCD_START_ROW);}

void Common_Show(ucharP,ucharL,ucharW,uchar *r)reentrant {

uchar i;

if(L<64)//显示在左半屏或左右半屏

{

CS1=1; CS2=0;

LCD_Write_Command( LCD_PAGE+P);

LCD_Write_Command(LCD_COL + L);

if(L+W<64)

{

for(i=0;i

}

else//如果月结则跨越左右半屏显示

{

for(i=0;i<64-L;i++) LCD_Write_Data(r[i]);

CS1=0;CS2=1;

LCD_Write_Command(LCD_PAGE+P);

LCD_Write_Command(LCD_COL);

for(i=64-L;i

}

}

else // 全屏显示在右半屏

{

CS1=0;CS2=1;

LCD_Write_Command(LCD_PAGE + P);

LCD_Write_Command(LCD_COL+L-64);

for (i=0;i

LCD_Write_Data(r[i]);

}

}

//显示一个8X16点阵字符

//

void Display_A_Char_8X16(ucharP,ucharL,uchar *M) reentrant {

Common_Show( P, L, 8, M );

Common_Show( P +1,L,8,M+8 );

}

//显示一个16x16点阵汉字

void Display_A_WORD(ucharP,ucharL,uchar *M) reentrant {

Common_Show( P, L, 16, M); //显示汉字上半部分

Common_Show( P + 1,L, 16, M +16); //显示汉字下半部分}

基于AT89C51的数字万年历设计

江西理工大学南昌校区 毕业设计(论文) 题目:基于AT89C51的数字万年历设计 系别:信息工程系 专业:电气自动化 班级:09电子自动化1班 学生: 学号:09321131 指导教师:职称:助教

摘要 电子万年历是一种日常广泛应用的计时工具,在现代社会中越来越流行。数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周、时、分、秒、温度等信息,还具有时间校准等功能。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步。 本文中万年历的设计过程在硬件与软件方面进行同步设计,硬件部分主要由AT89C51单片机,液晶显示电路,复位电路,时钟电路,稳压电路电路等组成。在单片机的选择上使用了AT89C51单片机,该单片机适合于许多较为复杂控制应用场合,显示器使用液晶LCD1602。软件方面主要包括日历程序、液晶驱动程序、显示程序等,这些程序采用C语言编写。所有程序编写完成后,在Keil C51软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。并且利用Protel软件进行制图,画出PCB图并且制作出实物。 关键词: 时钟电钟;液晶LCD1602;单片机

ABSTRACT E-calendar is a very extensive daily timing tool, more popular in modern society. For digital electronic calendar using intuitive digital display, simultaneously displays year, month, day, day, hour, minute, second, temperatures and other information, also with a time calibration capabilities. The third revolution is a single-chip digital timing technology ( electronic calendar ), so that the timing product walk time difference from graded narrowing to 1/ 6000000 of a second, from the original traditional pointer timing for the development of people's daily more familiar luminous digital display, intuitive and clear, and the increase of the full automatic date, week, temperature and other daily auxiliary information display function, which is more in line with consumer needs. Therefore, the electronic calendar brings a watch industry a big progress. Synchronizing design of calendar is based on hardware and software design. Hardware part by AT89C51 microcontroller, circuit for LCD, reset circuit, clock circuits, voltage-stabilizing circuit and serial download circuits and other components of the circuit. On the choice of using single-chip microcomputer AT89C51 microcontroller, the microcontroller is suitable for a host of complex control applications. Monitor LCD LCD1602. Software includes calendar, LCD drivers, display program. Programs using a language. All the programming is completed, Kiel C51 debugging software, sure no problem, in Proteus software embedded in single-chip microcomputer in the simulation. And the use of Portal software for drawing and draw the PCB. Keywords : clock electric clock II

数字万年历的制作

数字万年历的制作 数字显示万年历,它采用一枚专用软封装的时钟芯片,驱动15只红色共阳极数码管,可同时显示公历年、月、日、时、分、星期,以及农历月、日,还有秒点显示和整点报时、定时闹钟功能,使用220V市电供电,预留有备用电池座,外形尺寸为长21cm×宽14.5cm×厚3cm,最厚处6cm,适合放置在办公桌面上使用,具有很好的实用性。成品外观如图1所示。 图1 图2 原理简介 电路原理图如图2所示,为了读图方便,连线稍作了简化。从图中可以看出,IC1是一枚专用时钟芯片,Y1是32768Hz的晶振,为芯片提供时基频率信号,经过芯片内部处理后,输出各显示位的驱动信号,经过PNP(8550)型三极管做功率放大后驱动各数码管显示。芯片采用了动态扫描的输出

方式,由于人眼存在视觉暂留现象,且扫描速度比较快,因此看上去所有数码管都是在显示的。这种方式可以有效减少芯片的输出引脚数量,简化了线路,降低了功耗。 在电源部分中,整流二极管VD1~VD4组成了桥式整流电路,将变压器输出的交流电转换为直流电,经C6滤波后,送至三端稳压块7805,输出5V直流稳压电源,为电路供电。VD3和VD8组成互相隔离的供电电路,目的是在市电停电时,后备纽扣电池通过VD3,自动为芯片IC1提供后备电源,保证芯片计时数据不中断。同时由于VD8、VD9的存在,后备电池将不再向数码管供电,以节约后备电池的耗电量。由于芯片自身耗电较低,因此靠纽扣电池也可以维持芯片在很长时间里,内部计时不中断。当市电恢复后,7805输出经过VD8、VD9分别向芯片和数码管供电,由于DV3的存在,且纽扣电池电压为3V,低于7805输出的5V,因此纽扣电池将自动停止供电,7805输出也不会对纽扣电池充电。 VT9是唯一一只NPN(8050)型三极管,用于驱动喇叭,做为整点报时和定闹发声。LED10、LED14是用于秒点显示的发光二极管,LED11和LED12分别是整点报时显示和定闹显示的发光二极管,均为红色。 图3是万年历的全套散件的照片。表1是元器件清单。 图3 表1 元器件清单 序号元件名称参数元件数量序号元件名称参数元件数量 1 电阻10Ω 1 21 三极管8050 1 2 电阻33Ω8 22 三端稳压块7805 1 3 电阻47Ω 3 23 晶振32768Hz 1 4 电阻75Ω7 24 IC1软封装芯片 1 5 电阻100Ω 1 25 0.5’数码管红11 6 电阻150Ω8 26 0.8’数码管红 4

推荐-电子万年历的设计与制作课程设计 精品

华南农业大学 电子工程学院应用物理系 课程设计(报告)任务书 设计题目:电子万年历的设计与制作 任务与要求(请按所选题目自行总结) 任务:设计一个电子万年历,利用实时时钟芯片ds1302和51单片机制作实时时钟。 要求: 1.使用LCD1602显示屏显示日期和时间; 2.能够显示新历和农历; 3. 包括时钟模块,能够显示实时时钟; 4. 要有时间设置按键部分; 5. 完成硬件电路的设计后,编写程序,实现时间和日期的显示等功能; 6. 调试程序,完成功能验证,写出完整的课程设计。 实验器材: 1.单片机最小系统:单片机(插座),晶振,电阻,电容,按键; 2.电源模块:自锁开关,LED灯,USB插座; 3.按键模块:按键; 4.1602显示模块:1602(排母),电位器,电容; 5.RTC模块:DS1302芯片(插座),晶振,CR2032电池(插座); 6.DIY小部件:漆包线,杜邦线,排针,排母,IC插座,电阻包,电容包,烙铁套装; 开始日期20XX 年 3 月 4 日完成日期20XX 年3 月 23 日

电子万年历设计 摘要:本系统是由单片机最小系统、电源模块、按键模块、LCD1602显示模块及RTC模块组成的电子万年历系统。通过时钟模块实时进行时间和日期的计数,进而传递给单片机处理,单片机再将其传递给LCD1602模块显示当前时间,另设有按键模块可以完成时间设置以及日期查询等功能操作。其设计简单,性能优良,时间设置可调,同时同步显示农历和星期,具有较强的实用性。本文先简要介绍每个模块的工作原理,再作整个系统电路的综合分析,说明该电子万年历的实现过程。 Summary:This system,electronic calendar system,is posed of SCM minimum system, power supply module, keys module, LCD1602 display module and RTC module .Through RTC module for counting the time and date, and then transmit to SCM for processing,and then send it to the LCD1602 module to show the current time, also operates key modules can be pleted time setting and operating date query function.Its simple design, excellent performance, adjustable time setting, synchronous display lunar calendar and week at the same time, has strong practicability.This paper first briefly introduces the working principle of each module, and then a prehensive analysis of the circuit.The last,illustrate the whole system implementation process of the electronic calendar. 关键词:万年历,计时,显示,农历 Keywords: calendar、timing、display、

用EXCEL制作新年万年历

用EXCEL制作新年万年历 新年伊始,制作一个新年万年历送给别人新年的祝福,这份心意是非常重要的。制作新年万年历有很多办法,但用Office的Excel表格制作你又试过没?下面给大家介绍用Excel 制作万年历。 今天我们介绍用Excel制作万年历的方法。这个新年万年历可以显示当月的月历,还可以随意查阅任何日期所属的月历,非常方便。如果你愿意,还可以让它在特殊的日子里显示不同的提醒文字,一起来试试吧! 本文所涉及到的函数有: 1、AND (logical1,logical2, ...) 2、DATE (year,month,day) 3、DAY (serial_number) 4、IF (Logical,Value_if_true,Value_if_false) 5、INT (number) 6、MONTH (serial_number) 7、NOW () 8、OR (logical1,logical2, ...) 1、启动EXCEL2003,新建一个工作表,取名保存(如万年历.xls),并在相应的单元格中,输入如图1所示的文本。

2、同时选中B1、C1、D1单元格,按“格式”工具栏上的“合并及居中”按钮,将其合并成一个单元格,并输入公式:=TODAY()。 选中B1(合并后的)单元格,执行“格式→单元格”命令,打开“单元格格式”对话框(如图2),在“数字”标签中的“分类”下面选中“日期”选项,再在右侧“类型”下面选中“二○○一年三月十四日”选项,“确定”退出,将日期设置成中文形式。 注意:TODAY()函数用于提取当前系统日期,请将系统日期一定要调整准确哟。 3、选中F1单元格,输入公式:=IF(WEEKDAY(B1,2)=7,"日",WEEKDAY(B1,2));选中H1单元格,输入公式:=NOW()。

简单万年历设计

信电学院 电子信息工程专业CDIO一级项目项目设计说明书(2013/2014学年第一学期) 项目名称:简单万年历的设计 专业班级:电子信息工程 学生姓名: 学号: 指导教师: 设计周数:一周 设计成绩: 2013 年12 月29 日

目录 1项目设计目的及任务--------------------------------------------------------------2 2 设计方案--------------------------------------------------------------2 3 电路仿真与分析--------------------------------------------------------------9 4项目设计心得-------------------------------------------------------------17 5参考文献-------------------------------------------------------------17

1.项目设计目的及任务 用51单片机或52单片机为主体,设计并制作一台数字万年历。基本要求有时钟显示(时/分/秒);日期、星期显示,可设定月份;上电即可显示当前系统的时间该系统的设计电路是以 AT89C51单片机为核心控制器,其外围电路主要包括时钟模块,液晶模块,和与电脑主机通信模块等。通过 PC 机在 Internet 上同步时间,整个系统使用C语言进行编程,实现其设计的各种功能。输出方式灵活、功耗低、计时准确、性能稳定、维护方便等优点。实用电子时钟是一个时间控制系统,既能作为一般的时间显示器,同时可以根据需要扩展其功能。系统上电自检后,实时实现小时、分钟、秒以及日历的显示等指示信息的显示,通过按键可实现校对时间等功能。 2 设计方案 2.1总方案设计:设计简单万年历一般有三个可行方案,方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。方案二:用可编程逻辑器件(PLD)实现。这种方案与前一种相比,可靠性增加,同时可以很好的完成时钟的功能。同时这种方案只能选用数码管显示,显示的效果不够理想,无法很好的完成扩展功能的要求。同时,系统的灵活性不够。方案三:采用单片机作为系统的控制核心。随着国内超大规模集成电路的出现,微处理器及其外围芯片有了迅速的发展。集成技术的最新发展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器及其他控制部件集成在一个芯片之中,制成单片计算机。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路及必要的通道接口就可以构成各种计算机应用系统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。我们选用的是方案三。因为单片机的出现,并在各技术领域中得到如此迅猛的发展,与单片机构成计算机应用系统所形成的下述特点有关:

用EXCEL制作新年万年历

用EXCEL制作新年万年历(修正版) 新年伊始,制作一个新年万年历送给别人新年的祝福,这份心意是非常重要的。制作新年万年历有很多办法,但用Office的Excel表格制作你又试过没?下面给大家介绍用Excel制作万年历。 今天我们介绍用Excel制作万年历的方法。这个新年万年历可以显示当月的月历,还可以随意查阅任何日期所属的月历,非常方便。如果你愿意,还可以让它在特殊的日子里显示不同的提醒文字,一起来试试吧! 本文所涉及到的函数有: 1、AND (logical1,logical2, ...) 2、DA TE (year,month,day) 3、DAY (serial_number) 4、IF (Logical,Value_if_true,Value_if_false) 5、INT (number) 6、MONTH (serial_number) 7、NOW () 8、OR (logical1,logical2, ...) 1、启动EXCEL2003,新建一个工作表,取名保存(如万年历.xls),并在相应的单元格中,输入如图1所示的文本。 2、同时选中B1、C1、D1单元格,按“格式”工具栏上的“合并及居中”按钮,将其合并成一个单元格,并输入公式:=TODAY()。 选中B1(合并后的)单元格,执行“格式→单元格”命令,打开“单元格格式”对话框(如图2),在“数字”标签中的“分类”下面选中“日期”选项,再在右侧“类型”下面选中“二○○一年三月十四日”选项,“确定”退出,将日期设置成中文形式。

注意:TODAY()函数用于提取当前系统日期,请将系统日期一定要调整准确哟。 3、选中F1单元格,输入公式:=IF(WEEKDAY(B1,2)=7,"日",WEEKDAY(B1,2));选中H1单元格,输入公式:=NOW()。 选中F1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“特殊”选项,再在右侧“类型”下面选中“中文小写数字”选项,“确定”退出,将“星期数”设置成中文小写形式;选中H1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“时间”选项,再在右侧“类型”下面选中一款时间格式,“确定”退出。 注意:①上述前面一个公式的含义是:如果(IF)当前日期(B1)是星期“7”(WEEKDAY(B1,2)=7),则在F1单元格中显示“日”,否则,直接显示出星期的数值(WEEKDAY(B1,2))。 ②上述第二个函数(NOW())用于提取当前系统日期和时间,也请将系统日期和时间调整准确。 4、在I1、I2单元格分别输入1900、1901,然后同时选中I1、I2单元格,用“填充柄”向下拖拉至I151单元格,输入1900—2050年份序列。 同样的方法,在J1至J12单元格中输入1—12月份序列。 5、选中D13单元格,执行“数据→有效性”命令,打开“数据有效性”对话框(如图3),按“允许”右侧的下拉按钮,选中“序列”选项,在“来源”下面的方框输入:=$I$1:$I$151,“确定”退出。 同样的操作,将F15单元格数据有效性设置为“=$J$1:$J$12”序列。 注意:经过这样的设置以后,当我们选中D15(或F15)单元格时,在单元格右侧出现一个下拉按钮,按此下拉按钮,即可选择年份(或月份)数值,快速输入需要查询的年、月值。 6、选中A2单元格(不一定非得是A2哟),输入公式:=IF(F13=2,IF(OR(D13/400=INT(D13/400),AND(D13/4=INT(D13/4),D13/100=INT(D13/100))),29,28),IF(OR(F13=4,F13=6,F13=9,F13=11),30,31)),用于获取查询“月份”所对应的天数(28、29、30、31)。 注意:上述函数的含义是:如果查询“月份”为“2月”(F13=2)时,并且“年份”数能被400整除[D13/400=INT(D13/400)],或者(OR)“年份”能被4整除,但不能被100整除[AND(D13/4=INT(D13/4),D13/100 INT(D13/100))],则该月为29天(也就是我们通常所说的“闰年”),否则为28天。如果“月份”不是2月,但是“4、6、9、11”月,则该月为30天。其他月份天数为31天。 7、选中B2单元格,输入公式:=IF(WEEKDAY(DATE($D$13,$F$13,1),2)=B3,1,0)。再次选中B2单元格,用“填充柄”将上述公式复制到C2—H2单元格中。 注意:①上述B2公式的含义是:如果“查询年月”的第1天是星期“7”(WEEKDAY(DATE)($D$13,$F$13,1),2)=B3)时,在该单元格显示“1”,反之显示“0”),为“查询年月”获取一个对

用Excel怎样制作万年历

可以把Excel表格内容设置为桌面背景么? 悬赏分:10 - 解决时间:2007-2-15 08:32 由于经常要查一个Excel表,就想如果把它设置为桌面背景就会很方便了,求教高手,怎么做才能办到? 提问者:firtre - 三级 最佳答案 文件-另存为网页-在桌面上点右键-属性-桌面-自定义桌面-web-钩上就搞定了 用Excel怎样制作万年历 Excel 2010-02-07 15:18:53 阅读578 评论29 字号:大中小 准备工作,制作如下电子表格:

第一步:在C2中输入=TODAY()回车。TODAY()函数用于提取当前系统日期。 第二步:在F2中输入=IF(WEEKDAY(C2,2)=7,"日",WEEKDAY(C2,2)) 回车。 第三步:在H2中输入 =NOW() 回车。NOW()用于提取当前系统时间。 第四步:在D14中设置下拉菜单,数值为1900—2029。参见“怎样制作下拉菜单”

第五步:在F14中设置下拉菜单,数值为1—12。

将查询日期调为当前日期,如下图:

第六步:在A3中输入: =IF(F14=2,IF(OR(D14/400=INT(D14/400),AND(D14/4=INT(D14/4),D14/100<>INT(D14/100))),29, 28),IF(OR(F14=4,F14=6,F14=9,F14=11),30,31))回车。 第七步:B3中输入=IF(WEEKDAY(DATE($D$14,$F$14,1),2)=B4,1,0)回车。选中B3向右复制公式 至H3。 第八步:B6中输入=IF(B3=1,1,0)回车。 第九步:在B7中输入=H6+1回车,选中B7,向下复制公式至B9。 第十步:在B10中输入=IF(H9>=A3,0,H9+1)回车。 第十一步:在B11中输入=IF(H10>=A3,0,IF(H10>0,H10+1,0))回车。 第十二步:在C6中输入=IF(B6>0,B6+1,IF(C3=1,1,0))回车。 第十三步:在C7中输入=B7+1回车。 第十四步:选中C7向下复制公式至C9。 第十五步:在C10中输入=IF(B10>=$A$3,0,IF(B10>0,B10+1,IF(C6=1,1,0)))回车。 第十六步:选中C6,向右复制公式至H6。 选中C7,向右复制公式至H7。 选中C8,向右复制公式至H8。

基于PFGA的万年历的设计

郑州大学西亚斯国际学院 本科毕业论文(设计) 题目基于FPGA的万年历的设计 指导教师周晓平职称讲师 学生姓名陈重学号20111521131 专业电子信息工程班级电信(1)班 院(系)电子信息工程学院 完成时间2015年4月7号

基于FPGA的万年历的设计 摘要 基于FPGA的万年历的设计,基本功能是用来显示年月日时分秒及时间修改功能。数字日历是采用数字电路实现对ho、mi、se计时的装置,主要包括组合逻辑电路与时序电路,主要完成的功能是使用VerilogHDL语言,在QuartusII上完成电路设计,模拟程序开发,基本功能是能够显示/修改ho、mi、se,主要有:主要遥控模块、时间及其数据显示调设、时间多路选择、显示调整、日期的自动工作与设置、秒表计时模块、钟表模块、频率选取模块、译码器组成万年历的系统电路设计。软件模拟直接在FPGA软件上进行编译仿真与实验开发板共同完成。对于程序的编写使用VerilogHDL语言,根据不同模块的功能和各个模块之间的相互作用控制关系进行编译仿真。 电子万年历是采用的是以秒表计时显示时间的工具,大量运用于居室、办公室、商场、汽车站、火车站等场合。与古老的钟表进行比较拥有较好的精准性、灵活性、美观性、并拥有较长的使用年限。数字万年历主要包括组合逻辑电路与时序电路,还能展现自动报警、定时广播信息等功能。数字电子万年历采用软件开发模拟,使开发生产的成本大大降低,而且功能上有很强的灵活性,如果想改变它的功能只需要在软件上进行修改就能完成。相对于老式钟表来讲精度大大增加,并且维修改动更为方便,也不用像日历一样每天翻页,使人们的的生活更加方便。因此研究数字万年历有非常重要现实意义,匹配当前电子仪器的开发优势,对于当前市场也有相当大的潜力。 关键词FPGA /万年历/VerilogHDL/QuartusII

电子万年历的设计与仿真

摘要 单片机技术发展迅速,由于他的微小、易用、多功能在智能仪器、家用电器、电子通信、工业控制等方面应用广泛。单片机是集CPU ,RAM ,ROM,定时,计数和多种接口于一体的微控制器,它体积小、成本低、功能强,而51系列单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用从而达到学习、设计、开发软、硬的能力。 电子万年历主要采用AT89S52单片机作为主控核心,由DS1302时钟芯片提供时钟、LED动态扫描显示屏显示。AT89S52单片机功耗小、电压可选用2.0~6V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进行计时;数字显示是采用的LCD液晶显示屏来显示,可以同时显示年、月、日、星期、时、分、秒和温度等信息。 关键词:万年历;AT89S52单片机;1602液晶显示屏;DS1302时钟芯片;温度。

ABSTRACT Single chip microcomputer development is rapid, because of his tiny, is easy to use,and multi-function in intelligent instrument, home appliances, electronic communication, industry control, wide application. SCM is set for the CPU, RAM, ROM, time, count and a variety of interface in one of the micro controller. Its small size, low cost, the function is strong, and 51 series microcontroller is the most typical of single chip microcomputer and the most representative of a kind. The graduation design through to its study, application, so as to study, design, and develop the ability of soft and hard. The electronic calendar mainly USES the AT89S52 SCM as the master its core, and the DS1302 clock chip provide clock, LED dynamic scanning display shows. AT89S52 SCM power consumption is small, voltage can choose 2.0 ~ 6 V voltage power supply; DS1302 clock chip is the United States out Juan DALLAS has fine current charge function of low power consumption real time clock chip, it can be to year, month, day, week, when, minutes and seconds for timing; Digital display is USES LED LCD screen to display, can also shows that year, month, day, week, when, minutes and seconds and temperature and other information. KEY WORDS Calendar;AT89S52 SCM;1602 LCD; DS1302 clock chip;temperature

简易万年历的设计设计

漳州师范学院 简易万年历的设计 系别:物理与电子信息工程系 专业:电子信息科学与技术 2013年6月

目录 1. 设计任务 (4) 1.1设计任务 (4) 1.2设计要求 (4) 2.设计方案 (4) 2.1设计思路 (4) 2.2方案比较与论证 (4) 2.2.1 数码管显示模块 (4) 2.2.2 温度传感器的选择 (5) 2.2.3 时钟计时的选择 (5) 2.3系统结构框图 (6) 3.各功能模块设计 (6) 3.1显示模块原理 (6) 3.2参数计算 (7) 3.3独立式按键模块 (7) 3.4时钟模块 (8) 3.4.1 DS1302特性介绍 (8) 3.4.2 DS1302引脚介绍 (8) 3.4.3 DS1302有关日历、时间的寄存器 (9) 3.4.4 DS1302控制字介绍 (9) 3.4.5 DS1302单字节读写时序介绍 (10) 3.4.6 DS1302操作指令介绍 (11) 3.4.7 DS1302与单片机接口电路 (11) 3.5温测模块 (11) 3.5.1 单总线介绍 (11) 3.5.2 DS18B20特性介绍 (12) 3.5.3 DS18B20管脚介绍 (12) 3.5.4 DS18B20内部结构 (12) 3.5.5 DS18B20温度转化示例 (13) 3.5.6 DS18B20时序介绍 (13) 3.5.7 DS18B20操作步骤 (15) 3.5.8 DS18B20与单片机的接口电路 (16) 3.6总系统原理图 (16) 4.软件设计 (16) 4.1I/O口分配 (17) 4.2按键扫描 (17)

5.流程图 (17) 5.1主程序流程图 (17) 5.2 WORK0模块流程图 (18) 5.3 WORK1模块流程图 (18) 5.4 WORK2模块流程图 (19) 5.5获取温度子程序流程图 (19) 5.6按键扫描 (20) 5.7中断服务子程序 (21) 5.8显示方式1 (21) 5.9初始化DS1302子程序流图 (22) 5.10温显模块子程序流图 (22) 5.11读取时间模块子程序流图 (23) 6.程序代码 (23) 6.1主程序部分 (23) 6.2包含文件部分 (31) 6.3包含文件部分 (33) 7.调试要点 (41) 7.1硬件调试 (41) 7.2软件调试 (41) 7.3结果分析及设计工作总结 (41) 8.参考文献及附件 (42) 8.1参考文献 (42) 8.2元器件清单 (42) 8.3PCB版图 (42) 8.4实物图正面 (43) 8.5实物图背面 (44)

用EXCEL制作一份万年历

用EXCEL制作一份万年历 [导读]今天我们介绍用Excel制作万年历的方法。这个万年历可以显示当月的月历,还可以随意查阅任何日期所属的月历,非常方便。如果你愿意,还可以让它在特殊的日子里显示不同的提醒文字,一起来试试吧! 本文所涉及到的函数有: 1、AND (logical1,logical2, ...) 2、DATE (year,month,day) 3、DAY (serial_number) 4、IF (Logical,Value_if_true,Value_if_false) 5、INT (number) 6、MONTH (serial_number) 7、NOW () 8、OR (logical1,logical2, ...) 1、启动EXCEL2003,新建一个工作表,取名保存(如万年历.xls),并在相应的单元格中,输入如图1所示的文本。 2、同时选中B1、C1、D1单元格,按“格式”工具栏上的“合并及居中”按钮,将其合并成一个单元格,并输入公式:=TODAY()。

选中B1(合并后的)单元格,执行“格式→单元格”命令,打开“单元格格式”对话框(如图2),在“数字”标签中的“分类”下面选中“日期”选项,再在右侧“类型”下面选中“二○○一年三月十四日”选项,“确定”退出,将日期设置成中文形式。 注意:TODAY()函数用于提取当前系统日期,请将系统日期一定要调整准确哟。 3、选中F1单元格,输入公式:=IF(WEEKDAY(B1,2)=7,"日",WEEKDAY(B1,2));选中H1单元格,输入公式:=NOW()。 选中F1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“特殊”选项,再在右侧“类型”下面选中“中文小写数字”选项,“确定”退出,将“星期数”设置成中文小写形式;选中H1单元格,打开“单元格格式”对话框,在“数字”标签中的“分类”下面选中“时间”选项,再在右侧“类型”下面选中一款时间格式,“确定”退出。 注意:①上述前面一个公式的含义是:如果(IF)当前日期(B1)是星期“7”(WEEKDAY(B1,2)=7),则在F1单元格中显示“日”,否则,直接显示出星期的数值(WEEKDAY(B1,2))。 ②上述第二个函数(NOW())用于提取当前系统日期和时间,也请将系统日期和时间调整准确。 4、在I1、I2单元格分别输入1900、1901,然后同时选中I1、I2单元格,用“填充柄”

电子万年历设计

课程论文论文题目基于单片机的电子万年历设计 课程名称单片机原理及接口技术 专业年级 2014级自动化3班 学生姓名孙宏远贾腾飞 学号 2016年12 月3 日

摘要: 本文介绍了基于AT89C51单片机的多功能电子万年历的硬件结构和软硬件设计方法。系统以AT89C51单片机为控制器,以串行时钟日历芯片DS1302记录日历和时间,它可以对年、月、日、时、分、秒进行计时,还具有闰年补偿等多种功能。万年历采用直观的数字显示,可以在LED上同时显示年、月、日、周日、时、分、秒,还具有时间校准等功能。此万年历具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,具有广阔的市场前景。。 关键词:AT89C51单片机,DS1602时钟芯片,LCD1602显示屏。串口通信。 一:引言 本设计的基于单片机控制的电子万年历,具有年、月、日、星期、时、分、秒的显示等功能,实现过程就是由主控制发送信息给DS1302时钟芯片再由时钟芯片反馈给单片机,再由主控制器传送给LCD1602显示屏显示信息。并且可以在键盘设置模块输入修改时间,当键盘设置时间、日期时,单片机主控制根据输入信息,通过串口通信传送给DS1302时钟芯片,DS1302芯片读取当前新信息产生反馈传送给单片机,然后单片机根据控制最后输送显示信息到LCD1602液晶显示屏模块上显示。 二:硬件设计: 2.0.硬件的设计总框图 2.1 DS1032时钟电路 DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。芯片如图。 DS1302的内部主要由移位寄存器、指令和控制逻辑、振荡分频电路、实时时钟以及RAM组成。每次操作时,必须首先把CE置为高电平。再把提供地址和命令信息的8位装入移位寄存器。数据在SCLK的上升沿串行输入。无论是读周期还是写周期发生,也无论传送方式是单字节还是多字节,开始8位将指定内部何处被进行访问。在开始 8个时钟周期把含有地址信息的命令字装入移位寄存器之后。紧随其后的时钟在读操作时输出数据。 2.2 LCD1602与AT89C52的引脚接线 LCD1602采用总线式与单片机相连,AT89c52的P1口直接与液晶模块的数据总线D0~D7相连;P2 口的0,1,2脚分别与液晶模块的RS、RW、E脚相连。滑动变阻器用于调整液晶显示的亮度。电路如图

基于单片机的万年历的设计与制作

基于单片机的万年历的设计与制作 摘要: 单片机应用技术飞速发展,纵观我们现在生活的各个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。单片机是集CPU 、RAM 、ROM、定时、计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小。对于数字电子万年历采用直观的数字显示,可以同时显示年、月、日、周、时、分、秒和温度等信息,还具有时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。 本设计是基于51系列的单片机进行的电子万年历设计,可以显示年月日时分秒及周信息,具有可调整日期和时间功能。在设计的同时对单片机的理论基础和外围扩展知识进行了比较全面准备。在硬件与软件设计时,没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要哪种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。 万年历的设计过程在硬件与软件方面进行同步设计。硬件部分主要由AT89S52单片机,LCD1602显示电路,以及调时按键电路等组成。单片机使用了AT89S52单片机,该单片机适合于许多较为复杂控制应用场合。显示由LCD1602并行输出。软件方面主要包括日历程序、时间调整程序,显示程序等。程序采用C语言编写,以便更简单地实现调整时间功能。所有程序编写完成后,在Keil 软件中进行调试,确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。最后在老师同学的帮助以及自己的努力下完成了此次电子万年历的设计。 关键词: 时钟电钟;DS1302;动态扫描;51单片机 Abstract SCM application technology develop rapidly, looking around us now in all spheres of life, from missiles, navigation equipment, to the various instruments on the aircraft control from a computer network communications and data transmission, industrial automation to real-time process control and data processing, and our lives extensive use of the smart card, electronic pets, which is inseparable from the microcontroller. Monolithic single-chip is the set of CPU, RAM, ROM, the timing,

java万年历制作

一、设计内容和要求 1、简单万年历的基本要求 本程序的要求为:1.使用图形用户界面;2.本程序能够实现日期与星期的查 询。 2、需要实现的主要功能 (1). 能够显示实现1800-2100年的日期,包括公历、农历、星期、二十四节气。 (2). 能够按照月份格式显示,或按照星期格式显示。 (3). 能够显示系统时间。 (4). 能够设置闹钟。 (5). 能够查询若干国际大城市(分布在不同时区)的时间。 二、系统分析与概要设计 1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否 为闰年,是闰年,该年的总天数为366,否则,为365。然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。 2. 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为 星期几,若是7,则为星期日。 3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几 后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。 4. 如果年份小于1900年则程序不予判断 5.公历与农历的换算。公历年对应的农历数据,每年三字节,格式第一字 节BIT7-4 位表示闰月月份,值为0 为无闰月,算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在闰年又不到3 月份上述之和要减一天再除7星期数为0。 6、系统时间的设置。直接从系统得到时间,设置字体,背景,显示框架

万年历设计项目设计方案

万年历设计项目设计方案 第一章绪论 1.1课题研究的意义 万年历是我国古代传说中最古老的一部太阳历。为纪念历法编撰者万年功绩,便将这部历法命名为“万年历”。而现在所使用的万年历,实际上就是记录一定时间范围内(比如100年或更多)的具体阳历或阴历的日期的年历,方便有需要的人查询使用,与原始历法并无直接联系。而随着微电子技术的高速发展,人类用于计时的工具也在不断发展更新,单片机技术的出现使得万年历有了新的发展方向。单片机以其体积小、功能全、性价比高等诸多优点,在工业控制、家用电器、通信设备、信息处理、尖端武器等各种测控领域的应用中独占鳌头,单片机开发技术已成为电子信息、电气、通信、自动化、机电一体化等专业技术人员必须掌握的技术。目前世界上单片机年产量已达十多亿片,通常是当年微处理器产量的4-5倍以上。用最少的芯片就能实现最强大的功能,这是将来电子产品的主流方向,它将无可置疑地一步步取代其它同类产品,其数量之大和应用面之广,是其它任何类型的计算机所无法比拟的。 以基于单片机的万年历作为设计的课题,因为它有很好的开放性和可发挥性,对作者的要求比较高,不仅考察了对单片机的掌握能力而且强调了对单片机扩展的应用。另外液晶显示的万年历已经越来越流行,特别适合在家庭居室、办公室、大厅、会议室、车站和广场等地方使用,它具有显示清晰直观、走时准确、可以进行夜视等功能,并且还可以扩展出其它多种功能。所以,电子万年历作为设计课题很有价值。 1.2本课题主要的研究工作 本论文主要研究基于单片机的万年历设计。当程序执行后,LCD显示即时时间、年月日、星期、温度。设置3个操作键:K1:设置键;K2:上调键;K3:下调键。本设计的主要内容:1、了解单片机技术的发展现状,熟悉万年历各模块的工作原理;2、选择适当的芯片和元器件,确定系统电路,绘制电路原理图,尤其是各接口电路;3、熟悉单片机使用方法和C语言的编程规则,编写出相应模块的应用程序;4、分别在各自的模块中调试

相关主题
文本预览
相关文档 最新文档