基于LCD1602的数字钟程序设计(C语言)

#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit fmq=P2^0;
sbit RS=P2^5;
sbit RW=P2^6;
sbit E=P2^7;
sbit k1=P3^2;
sbit k2=P3^3;
sbit k3=P3^4;

uchar kaiji0[]="Come On";
uchar kaiji1[]="baby !";

uchar chen[11]="1006043129 "; //diyihang
uchar cui[11]="1006043130 "; //dierhang80};
uchar table[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, //年
0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11, //月
0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00}; //日

uchar i=68,x;
uchar code pinlv[]={131,110,98, 87, 73, 87, 110,98, 131,0,110,
98, 87, 73, 73, 65, 98, 87,87,87,73,65,73,65,55,58,
65,73,65,87,110,98,87,73,110,131,110,98,87,65,73,73,
0,87,65,65,73,82,87,98,87,73,131,110,98,0,110,98,87,
73,65,55,58,65,73,87,65,65};
uint code jiepai[]={110,131,147,494,196,165,131,294,440,1,131,147,
165,588,196,440,294,660,330,165,196 ,880,588,220,262,
124,110,196,220,330,131,147,495,196,262,220,131,147,
165,220,784,392,2,660, 660,220,196,175,330,588,495,196,
110,131,147,2,131,147,330,392,440,524,247,220,196,165,880, 880};
uchar year,mon,day,hour,min,sec,count,flag,m,j=0;
uchar zifu[]={'0','1','2','3','4','5','6','7','8','9',':',0x00,0x01,0x02,' '};
uchar time[8];
uchar date[11];

void update();
void chaifen();
void display();
void yanzou(unsigned char pinlv,unsigned int jiepai);

void delay(uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}

void lcd_wcom(uchar com)//xiemingling
{
RS=0;
RW=0;
P0=com;
delay(5);
E=1;
E=0;
}

void lcd_wdat(uchar dat)//xieshuju
{
RS=1;
RW=0;
P0=dat;
delay(5);
E=1;
E=0;
}

void lcd_init()//chushihua
{
lcd_wcom(0x38);
lcd_wcom(0x0c);
lcd_wcom(0x06);
lcd_wcom(0x01);
}

void DDRAM_Address_Set(uchar DDRAM_Address)
{
lcd_wcom(DDRAM_Address);
}



void Displaystrings0(uchar Address,uchar *p)
{
uchar length;
length=7;
DDRAM_Address_Set(Address);
for(;length;length--)
lcd_wdat(*(p++));
}

void Displaystrings1(uchar Address,uchar *p)
{
uchar length;
length=6;
DDRAM_Address_Set(Address);
for(;length;length--)
lcd_wdat(*(p++));
}

void Displaystrings2(uchar Address,uchar *p)
{
uchar length;
length=11;
DDRAM_Address_Set(Address);
for(;length;length--)
lcd_wdat(*(p++));
}

void Displaystrings3(uchar Address,uchar *p)
{
uchar length;
length=10;
DDRAM_Address_Set(Address);
for(;length;length--)
lcd_wdat(*(p++));
}

void Displaystrings4(uchar Address,uchar *p)
{
uchar length;
length=11;
DDRAM_Address_Set(Address);
for(;length;length--)
lcd_wdat(*(p++));
}


void main()
{
hour=23;min=59;sec=50;count=0;flag=0;
year=2;mon=12;day=30;
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
TR0=1;
EA=1;
ET0=1;

lcd_init();

lcd_wcom(0x40);
for(m=0;m<24;m++)
{
lcd_wdat(table[m]);
}

Displaystrings0(0x82,kaiji0);
Displaystrings1(0xC2,kaiji1);

delay(3000);

while(

1)
{
if(k1==0)
{
while(k1==0);
if(++j==3)
j=0;
}
if(j==1)
{
if(flag==1)
{
flag=0;
update();
chaifen();
}
Displaystrings3(0x82,time);
Displaystrings4(0xC2,date);
lcd_wcom(0x8f);
lcd_wdat(0x54);
delay(5);

if(k2==0)
{
while(k2==0);
if(++min==60)
{
min=0;
if(++hour==24)
hour=0;
}
}

if(k3==0)
{
while(k3==0);
if(--min==-1)
{
min=59;
if(--hour==-1)
{
hour=23;
}
}
}

}
if(j==0)
{
lcd_wcom(0xcf);
lcd_wdat(zifu[14]);
Displaystrings2(0x82,chen);
Displaystrings2(0xC2,cui);
delay(5);
}
if(j==2)
{
if(flag==1)
{
flag=0;
update();
chaifen();
}
Displaystrings3(0x82,time);
Displaystrings4(0xC2,date);
lcd_wcom(0x8f);
lcd_wdat(zifu[14]);
lcd_wcom(0xcf);
lcd_wdat(0x44);
delay(5);

if(k2==0)
{
while(k2==0);
if(++day==31)
{
day=1;
if(++mon==13)
{
mon=1;
++year;
}
}
}

if(k3==0)
{
while(k3==0);
if(--day==0)
{
day=30;
if(--mon==0)
{
mon=12;
year--;
}
}
}
}

if(hour==0&&min==0&&sec==0)
{
for(x=0;x{
yanzou(pinlv[x],jiepai[x]);
if(flag==1)
{
flag=0;
update();
chaifen();
}
Displaystrings3(0x82,time);
Displaystrings4(0xC2,date);
}
fmq=0;
}
}

}

/*-------zhongduan--------*/
void timer0_isr()interrupt 1
{
TH0=0x3C;
TL0=0xB0;
if(++count==20)
{
flag=1;
count=0;
}
}
/*---------gengxin---------*/
void update()
{
if(++sec==60)
{
sec=0;
if(++min==60)
{
min=0;
if(++hour==24)
{
hour=0;
if(++day==31)
{
day=1;
if(++mon==13)
{
mon=1;
++year;
}
}
}
}
}
}
/*-------chaifen------*/
void chaifen()
{
time[0]=zifu[hour/10];
time[1]=zifu[hour%10];
time[2]=zifu[10];
time[3]=zifu[min/10];
time[4]=zifu[min%10];
time[5]=zifu[10];
time[6]=zifu[sec/10];
time[7]=zifu[sec%10];
time[8]=zifu[14];
time[9]=zifu[14];
time[10]=zifu[14];
time[11]=zifu[14];
time[12]=zifu[14];

date[0]=zifu[2];
date[1]=zifu[0];
//date[2]=zifu[year/10];
date[2]=zifu[1];
date[3]=zifu[year%10];
//date[3]=zifu[3];
date[4]=zifu[11];
date[5]=zifu[mon/10];
date[6]=zifu[mon%10];
date[7]=zifu[12];
date[8]=zifu[day/10];
date[9]=zifu[day%10];
date[10]=zifu[13];
//date[11]=zifu[14];
//date[12]=zifu[14];
}

void yanzou(unsigned char pinlv,unsigned int jiepai)
{
unsigned char pl;
unsigned int jp;
if(jiepai==1)
delay(250); //1/2 拍暂停

,即 1/2 拍的 0
else if(jiepai==2)
delay(500); //1 拍暂停,即 1 拍的 0
else
{
for(jp=0;jp{
fmq=0;
for(pl=0;pl;
fmq=1;
for(pl=0;pl;
}
}
}

相关文档
最新文档