单片机万年历实训
{
ﻩshort year;//待选
char month;
charmday;
charweek;
charhour;
ﻩcharminute;
char second;
}time;
structtime_char//time的字符型
{
char ch_year[4];
charch_month[2];
char ch_mday[2];
charflag_ok=0;//key_up与key_down的功能选择
charflag_mean=0;
char flag_set=0;//key_up与key_down的功能标识
charflag_year_leap=0;
//短语
//codecharstring_time[]="Settingtime?\0";
code char string_hour[]="Settinghour? \0";
codecharstring_minute[]="Settingminute?\0";
code char string_second[]="Setting second? \0";
//年月日时分秒的定义
struct DATA_TIME
else return0;
}
//星期的判断
void de_week(void)
{
int i,j,day=0;
charmweek;
for(i=2000;i<time.year;i++)
{
if(leep_year(i))day+=366;
elseday+=365;
}
for(j=1;j<time.month;j++)
pt[1]=DATA-pt[0]*10+0x10;
}
voidtran_4_ch(char*pt,intDATA)
{
pt[0]=DATA/1000;
pt[1]=DATA/100-pt[0]*10;
pt[2]=DATA/10-pt[0]*100-pt[1]*10;
pt[3]=DATA-pt[0]*1000-pt[1]*100-pt[2]*10;
{
if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
pt[0]+=0x30;
pt[1]+=0x30;
pt[2]+=0x30;
pt[3]+=0x30;
}
//格式转换的实现
voidtran_ch(void)
{
tran_4_ch(time_ch.ch_year ,time.year);
tran_2_ch(time_ch.ch_month,time.month);
charch_week[1];
charch_hour[2];
charch_minute[2];
char ch_second[2];
}time_ch;
/***************子函数****************/
//LCD的延时程序
void LCD_delay(void)
{
chari,j;
for(i=100;i>=0;i--)for(j=0;j<20;j++);
显示年、月、日、时、分、秒(24小时制)
时间可调,年份2000——9999
2012年10月9日
*******************************************/
#include<reg51.h>
/******全局变量的定义与设置******/
sbitkey_mean=P1^0;ﻩ//按键的定义
}
//向LCD写指令函数
void wcmd(charcmd)
{
RS=0;
RW=0;
E=1;
LCD_delay();
PORT=cmd;
LCD_delay();
E=0;
}
//向LCD写数据函数
voidwdata(charDATA)
{
RS=1;
RW=0;
E=1;
LCD_delay();
PORT=DATA;
tran_2_ch(time_ch.ch_mday,time.mday );
//tran_2_ch(time_ch.ch_week,time.week*10+1);
time_ch.ch_week[0]=time.week+0x30;
tran_2_ch(time_ch.ch_hour,time.hour);
单片机万年历实训
———————————————————————————————— 作者:
————————————————————————————————日期:
单片机万年历实训
仿真图:
原理图:
程序:
/******************************************
使用LCD1602与单片机实现的时钟与日期
tran_2_ch(time_ch.ch_minute,time.minute);
tran_2_ch(time_ch.ch_second,time.second);
}
//是否是闰年
char leep_year(intyear)//如果是闰年则flag_year_leep=1,否则=0
{
if((year%400==0)||year%4==0&&year%100!=0)return1;
codechar string_year[]="Setting year? \0";
codecharstring_month[]= "Settingmonth?\0";
codecharstring_mday[]="Setting day?\0";
code char string_week[]="Settingweek? \0";
sbitkey_ok=P1^1;
sbit key_set=P1^2;
sbitRS=P1^5;//LCD控制端口
sbitRW=P1^6;ﻩﻩﻩ
sbitE=P1^7;ﻩﻩﻩ
sfrPORT=0xa0;
char flag_sec=0;//值为20代表1s
charflag_en_ok=0;
charflag_en_key=0;ﻩ//值为1表示键盘有效,否则无效
LCD_delay();
E=0;
}
//写字符串
voidwstring(char *pt,chari)// i为字符的个数,不带\0
{
char j;
for(j=0;j<i;j++)
{
wdata(pt[j]);
}
}
//时Байду номын сангаас数据的格式转换
voidtran_2_ch(char*pt,charDATA)
{
pt[0]=DATA/10+0x30;