当前位置:文档之家› LCD1602的日期显示程序

LCD1602的日期显示程序

/*********************************************************
**********************************************************
** 注: **
** 1.本程序基于STC12C5A60S2单片机来实现的. **
** 2.本程序采用11.0592MHZ的晶振。 **
** 3.本程序时钟存在一定的误差(每天产生1-5s的误差)**
** 4.程序输出端口选择: **
** P1^0 液晶的数据、命令选择端; **
** P1^1 液晶的读、写选择端; **
** P1^2 液晶使能信号端; **
** P0 口为数据输出端。 **
** 5.本程序时间初始化为: **
** 2014-04-20 **
** 12:30:00 **
**********************************************************
**********************************************************/
#include
#define uchar unsigned char//宏定义(无符号字符型)
#define uint unsigned int//宏定义(无符号短整型)
sfr AUXR = 0x8E;//特殊功能寄存器设定(使定时器按照1T的机械周期来运行)

sbit LCDRS = P1^0;//位定义,1602液晶的数据/命令选择
sbit LCDRW = P1^1;//位定义,1602液晶的读写选择
sbit LCDEN = P1^2;//位定义,1602液晶使能信号


uchar num=0;//全局变(控制时序)
/*此处定义年月日、时分秒的全局控制变量*/
uint y1,y2,y3,y4,mo1,mo2,d1,d2,h1,h2,mi1,mi2,s1,s2;

/*定义两组显示字符*/
uchar code table_Digital[]="0123456789";
uchar code table[]=" -:.";

void delay(uint z)
{ /*液晶显示延时函数*/
uint x, y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{ /*写命令函数*/
LCDRS=0;
P0=com;
delay(5);
LCDEN=1;
delay(5);
LCDEN=0;
}
void write_date(uchar date)
{ /*写数据函数*/
LCDRS=1;
P0=date;
delay(5);
LCDEN=1;
delay(5);
LCDEN=0;
}

void lcd_init()
{ /*液晶初始化函数*/
LCDRW=0;
LCDEN=0;
write_com(0x38);
write_com(0x0c);
write_com(0x01);
}

void Time_init(void)
{ /*日期及时间初始化函数,此处对变量直接赋值即可设定你所需要的时间*/
y1=2;
y2=0;
y3=1;
y4=4;
mo1=0;
mo2=4;
d1=2;
d2=0;
h1=1;
h2=2;
mi1=3;
mi2=0;
s1=0;
s2=0;

}

void show(void)
{ /*显示初始化函数,亦可用于控制液晶更新实时时间*/
write_com(0x80);
write_date(table[0]);
write_com(0x83);
write_date(table_Digital[y1]);
write_com(0x84);
write_date(table_Digital[y2]);
write_com(0x85);
write_date(table_Digital[y3]);
write_com(0x86);
write_date(table_Digital[y4]);
write_com(0x87);
write_date(table[1]);
write_com(0x88);
write_date(table_Digital[mo1]);
write_com(0x89);
write_date(table_Digital[mo2]);
write_com(0x8a);
write_date(table[1]);
write_com(0x8b);
write_date(table_Digital[d1]);
write_com(0x8c);
write_date(table_Digital[d2]);
/*以上显示年月日*/

/*以下显示时分秒*/
write_com(0xc4);
write_date(table_Digital[h1]);
write_com(0xc5);
write_date(table_Digital[h2]);
wri

te_com(0xc6);
write_date(table[2]);
write_com(0xc7);
write_date(table_Digital[mi1]);
write_com(0xc8);
write_date(table_Digital[mi2]);
write_com(0xc9);
write_date(table[2]);
write_com(0xca);
write_date(table_Digital[s1]);
write_com(0xcb);
write_date(table_Digital[s2]);

}
void InitTimer0(void)
{ /*中断初始化函数*/
TMOD = 0x01;
TH0 = 0x28;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Time24H();//24小时时间函数的声明
void Calendar();//日期控制函数的声明
void main()
{ /*主程序*/
AUXR = AUXR|0x80; // 启动T0, 1T Mode
InitTimer0();//中断初始化
lcd_init();//液晶显示初始化
Time_init();//时序控制初始化

while(1)
show();//不断刷新显示数据

}
void Timer0Interrupt(void) interrupt 1
{ /*每5000us中断一次*/
TH0 = 0x28;
TL0 = 0x00;
num++;
if(num==200)
{
num=0;
Time24H();
}
}
void Time24H()
{ /*一天的时间控制*/
s2++;
if(s2>9)
{
s2=0;
s1++;
num=num+2;
if(s1>5)
{
num=num+3;
s1=0;
mi2++;
if(mi2>9)
{
num=num+3;
mi2=0;
mi1=mi1+1;
if(mi1>5)
{
num=num+3;
mi1=0;
h2++;
if(h1<2)
if(h2>9)
{
h2=0;
h1++;
}
if(h1==2)
if(h2>3)
{
h2=0;
h1=0;
Calendar();
}

}
}
}
}
}
void Calendar(void)
{ /*日期的控制*/
d2++;
if(d2>9)
{
d2=0;
d1++;
if(d1>3)
{
d1=0;
mo2++;
if(mo1<1)
if(mo2>9)
{
mo2=0;
mo1=1;
}
else if(mo1==1)
if(mo2>2)
{
mo2=1;
mo1=0;
y4++;
if(y4>9)
{
y4=0;
y3++;
if(y3>9)
{
y3=0;
y2++;
if(y2>9)
{
y2=0;
y1++;
}
}
}
}

}
}
}

相关主题
文本预览
相关文档 最新文档