51单片机时钟
来源:互联网 发布:知乎什么是互联网数据 编辑:程序博客网 时间:2024/06/05 01:53
可以调时间,包括平年润年的情况
#include
#define uchar unsigned char
sbit rs=P2^6;
sbit rw=P2^5;
sbit en=P2^7;
sbit keyen=P2^0;
sbit keyfu=P2^1;
sbit keyjia=P2^2;
sbit keyjian=P2^3;
ucharyear=12,month=2,day=29,week=7;
char hour=23,min=59,sec=50;
uchar count,t,jud;
uchar wek[][3]={" ","Mon","Tue","Wen","Thi","Fri","Sta","Sun"};
void delayms(int a)
{
int x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
rs=0;
rw=0;
en=0;
P0=com;
delayms(2);
en=1;
delayms(2);
en=0;
delayms(2);
}
void write_dat(uchar dat)
{
rs=1;
rw=0;
en=0;
P0=dat;
delayms(2);
en=1;
delayms(2);
en=0;
delayms(2);
}
void write_zfc(uchar *ch)
{
while(*ch!=0)
write_dat(*ch++);
}
void write_nyr(uchar add,uchardat)
{
uchar shi=dat/10,ge=dat;
write_com(0x80+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
void write_sfm(uchar add,uchardat)
{
uchar shi=dat/10,ge=dat;
write_com(0x80+0x40+add);
write_dat(0x30+shi);
write_dat(0x30+ge);
}
void write_week(uchar dat)
{
write_com(0x80+13);
write_zfc(wek[dat]);
}
void init_1602()
{
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80+2);
write_zfc("20 - - ");
write_com(0x80+0x40+6);
write_zfc(": :");
write_nyr(4,year);
write_nyr(7,month);
write_nyr(10,day);
write_week(week);
write_sfm(4,hour);
write_sfm(7,min);
write_sfm(10,sec);
}
int is(uchar year)
{
int temp=20*100+year;
if((temp%4==0&&temp0!=0)||(temp@0==0))
return 1;
return 0;
}
void keyscan()
{
if(keyen==0)
{
jud=1;
delayms(20);
while(!keyen);
TR0=0;
if(t==0)
{
write_com(0x80+0x40+11);
write_com(0x0f);
}
if(t==1)
{
write_com(0x80+0x40+8);
write_com(0x0f);
}
if(t==2)
{
write_com(0x80+0x40+5);
write_com(0x0f);
}
if(t==3)
{
write_com(0x80+13);
write_com(0x0f);
}
if(t==4)
{
write_com(0x80+11);
write_com(0x0f);
}
if(t==5)
{
write_com(0x80+8);
write_com(0x0f);
}
if(t==6)
{
write_com(0x80+5);
write_com(0x0f);
}
t++;
if(t>6)
t=0;
}
if(keyfu==0)
{
delayms(20);
while(!keyfu);
TR0=1;
write_com(0x80+0x40+11);
write_com(0x0c);
jud=t=0;
}
if(jud==1&&keyjia==0)
{
delayms(20);
while(!keyjia);
if(t==1)
{
sec++;
if(sec>59)
sec=0;
write_sfm(10,sec);
write_com(0x80+0x40+11);
}
if(t==2)
{
min++;
if(min>59)
min=0;
write_sfm(7,min);
write_com(0x80+0x40+8);
}
if(t==3)
{
hour++;
if(hour>23)
hour=0;
write_sfm(4,hour);
write_com(0x80+0x40+5);
}
if(t==4)
{
week++;
if(week>7)
week=1;
write_week(week);
write_com(0x80+13);
}
if(t==5)
{
day++;
if(day>31)
day=1;
write_nyr(10,day);
write_com(0x80+11);
}
if(t==6)
{
month++;
if(month>12)
month=1;
write_nyr(7,month);
write_com(0x80+8);
}
if(t==0)
{
year++;
write_nyr(4,year);
write_com(0x80+5);
}
}
if(jud==1&&keyjian==0)
{
delayms(20);
while(!keyjian);
if(t==1)
{
sec--;
if(sec<0)
sec=59;
write_sfm(10,sec);
write_com(0x80+0x40+11);
}
if(t==2)
{
min--;
if(min<0)
min=59;
write_sfm(7,min);
write_com(0x80+0x40+8);
}
if(t==3)
{
hour--;
if(hour<0)
hour=23;
write_sfm(4,hour);
write_com(0x80+0x40+5);
}
if(t==4)
{
week--;
if(week<1)
week=7;
write_week(week);
write_com(0x80+13);
}
if(t==5)
{
day--;
if(day<1)
day=31;
write_nyr(10,day);
write_com(0x80+11);
}
if(t==6)
{
month--;
if(month<1)
month=12;
write_nyr(7,month);
write_com(0x80+8);
}
if(t==0)
{
year--;
write_nyr(4,year);
write_com(0x80+5);
}
}
}
void main()
{
t=jud=0;
init_1602();
TMOD=0X10;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
ET0=1;
TR0=1;
while(1)
{
keyscan();
if(count==200)
{
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
day++;
week++;
if(week=8)
week=1;
if(is(year)==1)
{
switch(month)
{
case 1:case 3:case 5:case 7:case 8:case10:case 12:
if(day>31)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
write_nyr(4,year);
}
write_nyr(7,month);
}break;
case 4:case 6:case 9:case11:
if(day>30)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
write_nyr(4,year);
}
write_nyr(7,month);
}break;
default :
if(day>29)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
write_nyr(4,year);
}
write_nyr(7,month);
}break;
}
}
else
{
{
case 1:case 3:case 5:case 7:case 8:case10:case 12:
if(day>31)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
write_nyr(4,year);
}
write_nyr(7,month);
}break;
case 4:case 6:case 9:case11:
if(day>30)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
write_nyr(4,year);
}
write_nyr(7,month);
}break;
default :
if(day>28)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
write_nyr(4,year);
}
write_nyr(7,month);
}break;
}
}
write_nyr(10,day);
write_week(week);
}
write_sfm(4,hour);
}
write_sfm(7,min);
}
write_sfm(10,sec);
}
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
count++;
}
阅读全文
0 0
- 51单片机时钟程序
- 51单片机时钟输出
- 51单片机可调时钟
- 51单片机时钟
- 51单片机实现时钟
- 51单片机—串口时钟
- 51单片机—实时时钟
- 51单片机控制的电子时钟系统
- 51单片机(AT89C52)DS1302时钟芯片程序
- 利用51单片机制作的电子时钟
- 51单片机DS1302实时时钟驱动程序
- 51单片机—定时器显示时钟
- 51单片机DS1302时钟芯片简单程序
- 51单片机完成时钟形式显示
- 51单片机(计时器+时钟应用)
- 51单片机-1602液晶显示的时钟代码
- 基于51单片机的电子时钟
- 【单片机】51单片机时钟——利用中断
- 斑斓的盐滩美景 克里米亚“腐…
- 好简单的八路抢答器完成啦
- 十进制转二进制(包括负数)
- I'm not iron man
- fork()函数的理解
- 51单片机时钟
- 关于24C16
- 24c16
- FCC-Front End Development Responsive Design with Bootstrap
- LCD简易计算器
- 寻找春天 九宫格日记-2014.07.14
- 负数的二进制表示方法
- 百米计时器LCD1602显示
- 定时器中断