万年历单片机c语言,万年历单片机c语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#define uchar unsigned char

#define uint unsigned int

sbit RS=P2^0;

sbit RW=P2^1;

sbit E=P2^2;

unsigned char code table1[]={"2013-02-29 WEN"};

unsigned char code table2[]={"23:59:55"};

unsigned char code table3[]={"SUNMONTUSWENTHRFRISAT"};

uchar shi=23,fen=59,miao=55,a=3,ri=29,yue=2,nian=13;

unsigned char cnt_w=0;

void shiADD();

void fenADD();

void miaoADD();

void shiDEC();

void fenDEC();

void miaoDEC();

void delay(uint x) //延时函数

{

while(x--)

{;}

}

void WrCommand(uchar comm)

{

delay(300);

RS=0; //进行指令的操作

RW=0; //进行写的操作

E=1;

P0=comm;

E=0;

}

void WrData(uchar dat)

{

delay(300);

RS=1;

RW=0;

E=1;

P0=dat;

E=0;

}

void LCD_init()

{

unsigned char num;

WrCommand(0x01); //清屏

WrCommand(0x38); //设置16*2显示,5*7点阵,8位数据接口

WrCommand(0x06); //光标右移

WrCommand(0x0c); //开显示,不显示光标

WrCommand(0x80+1);

for(num=0;num<14;num++)

{

WrData(table1[num]);

delay(300);

}

WrCommand(0xc0+4);

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

{

WrData(table2[num]);

delay(300);

} //显示开及光标设置

}

void T0_init()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

ET0=1;

TR0=1;

}

void writetime(uchar add,uchar t) //将时间用1602液晶显示的函数

{

uchar n,m;

n=t%10;

m=t/10;

WrCommand(0xc0+add);

WrData(0x30+n);

WrCommand(0xc0+add-1);

WrData(0x30+m);

}

void writedate(uchar add,uchar date)//将日期用1602液晶显示的函数

{

uchar i,j;

i=date/10;

j=date%10;

WrCommand(0x80+add);

WrData(0x30+j);

WrCommand(0x80+add-1);

WrData(0x30+i);

}

void xingqi(uchar z) //星期显示函数

{

WrCommand(0x80+0x0c);

WrData(table3[3*z]);

WrCommand(0x80+0x0d);

WrData(table3[3*z+1]);

WrCommand(0x80+0x0e);

WrData(table3[3*z+2]);

}

void KeyScan()

{

uchar KeyValue,temp;

KeyValue=P1;

if(KeyValue!=0xff)

{

delay(20);

KeyValue=P1;

if(KeyValue!=0xff)

{

do{

temp=P1;

}while(temp!=0xff);

switch(KeyValue)

{

case 0xfe:cnt_w++;

if(cnt_w>=4)

cnt_w=0;

break;

case 0xfd:switch(cnt_w)

{

case 1:shiADD();

break;

case 2:fenADD();

break;

case 3:miaoADD();

break;

default:break;

}

break;

case 0xfb:switch(cnt_w)

{

case 1:shiDEC();

break;

case 2:fenDEC();

break;

case 3:miaoDEC();

break;

default:break;

}

break;

case 0xf7:TR0=!TR0;

break;

default: break;

}

}

}

}

void main()

{

unsigned char year;

LCD_init();

T0_init();

EA=1;

while(1)

{

KeyScan();

if(miao>=60)

{

miao=0;

fen++;

}

writetime(11,miao);

if(fen>=60)

{

fen=0;

shi++;

}

writetime(8,fen);

if(shi>=24)

{

shi=0;

a++;

ri++;

}

writetime(5,shi);

if(a>=7)

{

a=0;

}

xingqi(a);

if(yue==1||yue==3||yue==5||yue==7||yue==8||yue==10||yue==12)

{

if(ri>31)

{

ri=1;

yue++;

}

else

{

if(yue==4||yue==6||yue==9||yue==11)

{

if(ri>30)

{

ri=1;

yue++;

}

}

}

}

writedate(10,ri);

if(yue==2)

{

if((year%4==0&&year%100!=0)||year%400==0)

{

if(ri>29)

{

ri=1;

yue++;

}

}

}

else

{

if(ri>28)

{

ri=1;

yue++;

}

}

writedate(10,ri);

if(yue>=13)

{

yue=1;

nian++;

}

writedate(7,yue);

if(nian>=100)

{

nian=0;

}

writedate(7,yue);

writedate(4,nian);

}

}

uchar cnt_ms;

void T0_ISR() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

cnt_ms++;

if(cnt_ms==20)

{

cnt_ms=0;

miao++;

}

}

void shiADD()

{

shi++;

if(shi>=24)

{

shi=0;

}

}

void fenADD()

{

fen++;

if(fen>=60)

{

fen=0;

shiADD();

}

}

void miaoADD()

{

miao++;

if(miao>=60)

{

miao=0;

fenADD();

}

}

void shiDEC()

{

if(shi==0)

shi=23;

else

shi--;

}

void fenDEC()

{

if(fen==0)

fen=59;

else

fen--;

}

void miaoDEC()

{

if(miao==0)

miao=59;

else

miao--;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值