测品娱乐
您的当前位置:首页基于lcd1602的万年历源程序详细

基于lcd1602的万年历源程序详细

来源:测品娱乐
#include

#define uchar unsigned char

sbit rs=P1^2;

sbit rw=P1^1;

sbit en=P1^0;

uchar code table[]=\" 2012-03-15 blue\";

uchar code table1[]=\" 10:34:56 sky\";

uchar code table2[]={31,28,31,30,31,30,31,30,30,31,30,31}; uchar code table3[]={31,29,31,30,31,30,31,30,30,31,30,31}; uchar count=0;

uchar hour=10;

uchar min=34;

uchar sec=56;

//平年

//闰年

uchar t;

uchar year1=20;

uchar year2=12;

uchar month=03;

uchar day=15;

void delay(uchar m) {

uchar i,j;

for(i=m;i>0;i--)

for(j=5;j>0;j--)

;

}

void wr_com(uchar com) //延时子程序

//写命令子程序

{

rs=0;

rw=0;

en=0;

P2=com;

delay(1);

en=1;

delay(5);

en=0;

}

void wr_dat(uchar dat)//写数据子程序

{

rs=1;

rw=0;

en=0;

P2=dat;

delay(1);

en=1;

delay(5);

en=0;

}

void init()

{

en=0;

wr_com(0x38); wr_com(0x0c); //设置16*2显示,5*7点阵,8位数据接口//开显示,显示光标,光标闪烁

wr_com(0x06); //当读或写一个字符后地址指针自动加1,整屏不移动

//数据指针清零,所有显示清零

wr_com(0x80+0x00); //设置数据指针地址

for(t=0;t<16;t++) {

wr_dat(table[t]);

delay(1);

}

wr_com(0x80+0x40);

for(t=0;t<15;t++) {

wr_dat(table1[t]);

delay(1);

//写入第一行数据

//写入第二行数据

}

}

void timer_init() //开定时器0

{

TMOD=0X01;

TH0=(65535-10000)/256;

TL0=(65535-10000)%256;

EA=1;

ET0=1;

TR0=1;

}

void hour_sfm(uchar add,uchar da) {

//刷新时间函数

uchar shi,ge;

shi=da/10;

ge=da%10;

wr_com(0x80+0x40+add);

wr_dat(0x30+shi);

wr_dat(0x30+ge);

}

void month_sfm(uchar add,uchar da) {

uchar shi,ge;

shi=da/10;

ge=da%10;

wr_com(0x80+add);

//刷新时间函数

wr_dat(0x30+shi);

wr_dat(0x30+ge);

}

void main()

{

init();

timer_init();

while(1)

{

if(count==100) {

count=0;

sec++;

//计数100次为一秒

if(sec>=59) //到一分了吗?

{

sec=0;

min++;

if(min>=59) //到一小时了吗

{

min=0;

hour++;

{

if(hour>=23) //到一天了吗

hour=0;

day++;

}

hour_sfm(2,hour);

}

hour_sfm(5,min);

}

hour_sfm(8,sec);

}

if((year1*100+year2)%4==0&(year1*100+year2)%100!=0) {

if(day>=table3[month-1]) //天数到了吗

{

day=1;

month++;

//是闰年吗

if(month==13) {

month=1;

year2++;

if(year2>=99) {

year2=0;

year1++;

month_sfm(1,year1); }

month_sfm(3,year2); }

month_sfm(6,month); //月数到了吗

//年的低位满了吗

//进入年高位刷新函数

//进入年低位刷新函数

//进入月刷新函数

}

month_sfm(9,day); }

else

{

if(day>=table2[month-1]) {

day=1;

month++;

if(month==13) {

month=1;

year2++;

//进入年日刷新函数

//天数到了吗

//月数到了吗

if(year2>=99) //年的低位满了吗

{

year2=0;

year1++;

month_sfm(1,year1); }

month_sfm(3,year2); }

month_sfm(6,month); } month_sfm(9,day); }

}

//进入年高位刷新函数

//进入年低位刷新函数

//进入月刷新函数

//进入日刷新函数

}

void timer0() interrupt 1 //定时器服务程序

{

TH0=(65535-10000)/256;

TL0=(65535-10000)%256; //重装初值

count++; //计数器加1

}

因篇幅问题不能全部显示,请点此查看更多更全内容