51单片机实现万年历程序文件

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机实现万年历

利用AT89S52单片机的P0口来和另外几个口来控制1602液晶的显示和P1口还有其它口来控制ds12887时钟芯片。设置四个按键,1个定义为时间设置功能键,一个定义为闹钟设置功能键,另外两个用来调节时间的增减。

原理图:

pcb图:

源程序:

#include

#define uint unsigned int

#define uchar unsigned char

sbit beep=P2^0;//蜂鸣器控制口

sbit timeadd=P2^1;//调节时间加

sbit timesub=P2^2;//调节时间减

sbit timeclk=P2^3;//闹钟设定键

sbit timefun=P2^4;//时间设定键

sbit lcdrs=P2^5;//液晶的命令和数据控制口

sbit ledrw=P2^6;//液晶的写数据口

sbit lcden=P2^7;//液晶显示模块的使能端

sbit timeds=P3^3;//时钟芯片地址闸

sbit timerw=P3^4;//时钟芯片读写

sbit timeas=P3^5;//时钟芯片地址闸

sbit timeen=P3^6;//时钟芯片片选

uchar code table[]="20 - - week ";

uchar code table1[]=" : : ";//要显示的字符串

char num,shi,fen,miao,nian=2000,yue,ri,week,numfun,anumfun,flag,flag1; uchar leap;

void delay(uint x){

uchar i,j;

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

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

}

void didi()

{

beep=0;

delay(1000);

beep=1;

delay(1000);

}

void write_(uchar ){

lcdrs=0;

P0=;

delay(5);

lcden=1;

delay(20);

lcden=0;

}

void write_date(uchar date){

lcdrs=1;

P0=date;

delay(5);

lcden=1;

delay(20);

lcden=0;

}

void write_sfm(uchar add,uchar date){ uchar shi,ge;

shi=date/10;

ge=date%10;

write_(0x80+0x40+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

void write_nyr(uchar add,uchar date){ uchar shi,ge;

shi=date/10;

ge=date%10;

write_(0x80+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

void write_zhou(uchar add,uchar date) {

write_(0x80+add);

write_date(0x30+date);

}

void write_ds(uchar add,uchar date){ timeen=0;

timeas=1;

timeds=1;

timerw=1;

P1=add;

timeas=0;

timerw=0;

P1=date;

timerw=1;

timeas=1;

timeen=1;

}

uchar read_ds(uchar add){

uchar ds_date;

timeas=1;

timeds=1;

timerw=1;

timeen=0;

P1=add;

timeas=0;

timeds=0;

P1=0xff;

ds_date=P1;

timeds=1;

timeas=1;

timeen=1;

return ds_date;

}

void keyscan(){

if(flag1==1)//用来关闭闹钟铃声

{

if(timeadd==0)

{

delay(5);

if(timeadd==0)

{

while(!timeadd==0);

flag1=0;

}

}

if(timesub==0)

{

delay(5);

if(timesub==0)

{

while(!timesub==0);

flag1=0;

}

}

}

if(timefun==0)

{

delay(5);

if(timefun==0)

{

while(!timefun);

flag=1;

numfun++;

if(numfun==1)

{

write_(0x80+0x40+0x0a);

write_(0x0f);

}

if(numfun==2)

{

write_(0x80+0x40+0x07);

write_(0x0f);

}

if(numfun==3)

{

write_(0x80+0x40+0x04);

write_(0x0f);

}

if(numfun==4)

{

相关文档
最新文档