您的位置:首页 > 服装鞋帽 > 男装 > 12864显示的万年历

12864显示的万年历

luyued 发布于 2011-03-09 18:16   浏览 N 次  

#include"reg52.h" //uint与uchar在intrins.h已定义
#include
#include
int leap(uint year);
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;
sbit PSB = P2^3;
sbit RES = P2^5;
sbit BF = P0^7;
sbit k4=P1^7;
sbit k1=P1^4;
sbit k2=P1^5;
sbit k3=P1^6;
sbit k5=P3^2;
sbit k6=P3^3;
sbit k7=P3^4;
sbit k8=P3^5;
sbit sp=P3^6;
uchar h,m,s,t,d;
uchar shi,fen,miao,v;
uchar code tab[]={"兔年吉祥!!"};
uchar code td[]={"合家欢乐!!"};
uchar code ta[]={"0123456789-:"};
uchar i,k,j,c;
uint year;
uchar month,day;
void delay(uint n)
{
while(n--) for(i=0;i<116;i++);
}
void lay(uint z)
{
while(z--) _nop_();
}
void beep()
{
sp=0;
lay(40);
sp=1;
lay(40);
}
void beep1(uchar o)
{
while(o--)
{
for(i=0;i<9;i++){beep();}
delay(80);
for(i=0;i<9;i++){beep();}
delay(400);
}
}
bit test(void)
{
bit result;
RS=0;
RW=1;
E=1;
lay(2);
result=BF;
lay(4);
E=0;
return result;
}
void writer(uchar x,bit y) //y=1;写数据,y=0,写命令
{
while(test()==1);
RW=0;
RS=y;
P0=x;
lay(8);
E=1;
lay(4);
E=0;
}
void nint() //定时器初始化
{
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
year=2011;
month=3;
day=2;
h=12;
m=30;
s=30;
}
void lcdint() //12864液晶初始化
{
delay(40);
PSB=1;
delay(1);
RES=0;
delay(1);
RES=1;

lay(110);
writer(0x30,0);
lay(110);
writer(0x30,0);
lay(110);
writer(0x08,0);
lay(110);
writer(0x10,0);
lay(110);
writer(0x0c,0);
lay(110);
writer(0x01,0);
lay(110);
writer(0x06,0);
lay(110);
// writer(0x40,0);
// lay(110);
}
void change()//调整时间和日期
{
if(k4==0)
{
delay(10);
if(k4==0)
{
for(c=0;c<7;c++) {beep();}
TR0=0;
d++;
}
while(!k4);
}
if(d==2)
{
TR0=1;
}
if(d==3)
{
d=0;
TR0=1;
}
if(k8==0)
{
delay(11);
if(k8==0)
{
for(c=0;c<7;c++) {beep();}
v++;
}
}
if(v==2)
{
v=0;
}
//调整时间
if(k1==0&d==1)
{
delay(10);
if(k1==0&d==1) //小时加
{
h++;
for(c=0;c<7;c++) {beep();}
if(h==24)
{
h=0;
}
while(!k1);
}
}
if(k2==0&d==1) //分钟加
{
delay(10);
if(k2==0&d==1)
{
m++;
for(c=0;c<7;c++) {beep();}
if(m==60)
{
m=0;
}
while(!k2);
}
}
if(k3==0&d==1) //秒钟加
{
delay(10);
if(k3==0&d==1)
{
s++;
for(c=0;c<7;c++) {beep();}
if(s==60)
{
s=0;
}
while(!k3);
}
}
if(k5==0&d==1) //小时减
{
delay(10);
if(k5==0&d==1)
{
for(c=0;c<7;c++) {beep();}
h--;
if(h==-1)
{
h=23;
}
while(!k5);
}
}
if(k6==0&d==1)//分钟减
{
delay(10);
if(k6==0&d==1)
{
for(c=0;c<7;c++) {beep();}
m--;
if(m==-1)
{
m=59;
}
while(!k6);
}
}
if(k7==0&d==1)//秒钟减
{
delay(10);
if(k7==0&d==1)
{
for(c=0;c<7;c++) {beep();}
s--;
if(s==-1)
{
s=59;
}
while(!k7);
}
}
/******************************************/
/******************************************/
// 调整日期
/******************************************/
/******************************************/
if(k1==0&d==2)
{
delay(10);
if(k1==0&d==2)
{
year++;
for(c=0;c<7;c++) {beep();}
if(year==2501)
{
year=0;
}
while(!k1);
}
}
if(k2==0&d==2)
{
delay(10);
if(k2==0&d==2)
{
month++;
for(c=0;c<7;c++) {beep();}
if(month==13)
{
month=1;
}
while(!k2);
}
}

if(k3==0&d==2)
{
delay(10);
if(k3==0&d==2)
{
day++;
for(c=0;c<7;c++) {beep();}
while(!k3);
}
}

if(k5==0&d==2)
{
delay(10);
if(k5==0&d==2)
{
for(c=0;c<7;c++) {beep();}
year--;
if(year==-1)
{
year=2500;
}
while(!k5);
}
}
if(k6==0&d==2)
{
delay(10);
if(k6==0&d==2)
{
for(c=0;c<7;c++) {beep();}
month--;
if(month==0)
{
month=12;
}
while(!k6);
}
}

if(k7==0&d==2)
{
delay(10);
if(k7==0&d==2)
{
for(c=0;c<7;c++) {beep();}
day--;
while(!k7);
}
}

switch(month) //日期限制
{
case 4:
case 6:
case 9:
case 11:if(day>30)day=1;break;//4,6,9,11月30天;
case 2 :
{if (leap(year)) //闰年2月29天;
while(day>29)day=1;
else
while(day>28)day=1;//非闰年28天;
}break;
default:if(day>31)day=1; //1,3,5,7,8,10,12月31天;
}

}
/******************************************/
//闹铃设置
/******************************************/
void change1()
{

if(k1==0&v==1)
{
delay(10);
if(k1==0&v==1)
{
shi++;
for(c=0;c<7;c++) {beep();}
if(shi==24)
{
shi=0;
}
while(!k1);
}
}
if(k2==0&v==1)
{
delay(10);
if(k2==0&v==1)
{
fen++;
for(c=0;c<7;c++) {beep();}
if(fen==60)
{
fen=0;
}
while(!k2);
}
}
if(k3==0&v==1)
{
delay(10);
if(k3==0&v==1)
{
miao++;
for(c=0;c<7;c++) {beep();}
if(miao==60)
{
miao=0;
}
while(!k3);
}
}
if(k5==0&v==1)
{
delay(10);
if(k5==0&&v==1)
{
for(c=0;c<7;c++) {beep();}
shi--;
if(shi==-1)
{
shi=23;
}
while(!k5);
}
}
if(k6==0&v==1)
{
delay(10);
if(k6==0&v==1)
{
for(c=0;c<7;c++) {beep();}
fen--;
if(fen==-1)
{
fen=59;
}
while(!k6);
}
}
if(k7==0&v==1)
{
delay(10);
if(k7==0&v==1)
{
for(c=0;c<7;c++) {beep();}
miao--;
if(miao==-1)
{
miao=59;
}
while(!k7);
}
}
}
void doing() //闹铃
{
if((shi==h)&&(fen==m)&&(miao==s))
{
beep1(5);
}
}
/******************************************/
//显示调整闹钟时间
/******************************************/
void bt()
{

writer(0x99,0);
lay(400);
writer(ta[shi/10],1);
lay(400);
writer(ta[shi%10],1);
lay(400);
writer(ta[11],1);
lay(400);
writer(ta[fen/10],1);
lay(400);
writer(ta[fen%10],1);
lay(400);
writer(ta[11],1);
lay(400);
writer(ta[miao/10],1);
lay(400);
writer(ta[miao%10],1);
lay(400);
// writer(tt[12],1);
}
/******************************************/
/******************************************/
//显示兔年吉祥
/******************************************/
/******************************************/
void show1(uchar code *add1)
{
writer(0x81,0);
delay(1);
for(k=0;k<10;k++)
{
writer(*add1,1);
add1++;
}
}
/******************************************/
//合家欢乐
/******************************************/
void show3(uchar code *add3)
{
writer(0x99,0);
for(j=0;j<10;j++)
{
writer(*add3,1);
add3++;
}
}
void play()
{
show1(tab);
delay(1);
}
/******************************************/
//显示时间
/******************************************/
void timer()
{
writer(0x89,0);
delay(1);
writer(ta[h/10],1);
delay(1);
writer(ta[h%10],1);
delay(1);
writer(ta[11],1);
delay(1);
writer(ta[m/10],1);
delay(1);
writer(ta[m%10],1);
delay(1);
writer(ta[11],1);
delay(1);
writer(ta[s/10],1);
delay(1);
writer(ta[s%10],1);
delay(1);
}
/******************************************/
//显示年月日
/******************************************/
void display()
{
writer(0x91,0);
lay(400);
writer(ta[year/1000],1);
lay(400);
writer(ta[year/100%10],1);
lay(400);
writer(ta[year/10%10],1);
lay(400);
writer(ta[year%10],1);
lay(400);
writer(ta[10],1);
lay(400);
writer(ta[month/10],1);
lay(400);
writer(ta[month%10],1);
lay(400);
writer(ta[10],1);
lay(400);
writer(ta[day/10],1);
lay(400);
writer(ta[day%10],1);
lay(400);
}
void distime()
{
if(v==1) {bt();}
else {show3(td);}
}
int leap(uint year) //判断闰年
{
int leap;
if(year%4==0&&year%100!=0||(year%400==0))
leap=1;
else leap=0;
return(leap);
}
///主函数
void main()
{
nint();
lcdint();
while(1)
{
play();
lay(200);
display();
lay(200);
timer();
lay(200);
distime();
lay(200);
doing();
lay(200);
change();
lay(200);
change1();
lay(200);
}
}
void timer0() interrupt 1 //定时器0中断
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++ ;
if(t==19)
{
t=0;
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
{
h=0;
day++;
}
switch(month)
{
case 4:
case 6:
case 9:
case 11: if(day>30){day=1;month++;} break;//4,6,9,11月都是30天
case 2:{if(leap(year))
if(day>29){month++;day=1;} //闰年29天;
else
if(day>28){month++;day=1;}//非半闰年28天;
}break;
default:if(day>31){month++;day=1;}//1,3,5,7,8,10,12月30天;
if(month>12) //1年;
{year++;
month=1;
}
}
}
}
}
}

广告赞助商