1302+1602时钟显示
时间:10-02
整理:3721RD
点击:
/**************************************1302+lcd液晶显示时钟***********************************************************/
/*******************绝世好剑----制作**************************************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sclk=P3^6;
sbit rest=P3^5;
sbit sda=P3^4;
sbit e=P2^7;
sbit rw=P2^5;
sbit rd=P2^6;
uchar a[81];
uchar code table1[]="week";
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/*******************************************/
void write_byte(uchar a)
{
uint i;
for(i=0;i<8;i++)
{
sclk=0;
sda=(a>>i)&0x01;
sclk=1;
}
}
/*******************************************/
uchar read_byte(void)
{
uint i;
uchar b;
b=0;
for(i=0;i<8;i++)
{
if(sda)
b|=0x80;
else
b|=0x00;
sclk=0;
b>>=1;
_nop_();
_nop_();
_nop_();
sclk=1;
}
return b;
}
/*******************************************/
void write_date(uchar add,uchar date)
{
rest=0;
sclk=0;
rest=1;
write_byte(add);
write_byte(date);
sclk=1;
rest=0;
}
/**************************读数据***********************/
uchar read_date(uchar add)
{
uchar t;
rest=0;
sclk=0;
rest=1;
write_byte(add);
t=read_byte();
rest=0;
sclk=1;
return (t);
}
/*****************************写1302的初始值*************************************************/
void set_1302()
{
write_date(0x8e,0x00);
write_date(0x80,0x59);
write_date(0x82,0x59);
write_date(0x84,0x23);
write_date(0x86,0x21);//日
write_date(0x88,0x06); //月份
write_date(0x8a,0x05); //星期
write_date(0x8c,0x13); //年份
write_date(0x8e,0x80);
}
/*********************将读出来的数据赋给数组*/
void get_date()
{
a[0]=read_date(0x81)/16;
a[1]=read_date(0x81)%16;
a[2]=read_date(0x83)/16;
a[3]=read_date(0x83)%16;
a[4]=read_date(0x85)/16;
a[5]=read_date(0x85)%16;
a[6]=read_date(0x87)/16;
a[7]=read_date(0x87)%16;
a[8]=read_date(0x89)/16;
a[9]=read_date(0x89)%16;
a[10]=read_date(0x8b)%16;
a[11]=read_date(0x8d)/16;
a[12]=read_date(0x8d)%16;
}
/************************1602************************/
void write_lcd_date(uchar date)
{
rd=1;
P0=date;
delay(5);
e=1;
delay(5);
e=0;
delay(5);
}
/************************1602************************/
void write_lcd_com(uchar com)
{
rd=0;
P0=com;
delay(5);
e=1;
delay(5);
e=0;
delay(5);
}
/************************1602************************/
void init()
{
sclk=0;
rest=0;
rw=0;
write_lcd_com(0x38);
write_lcd_com(0x01);
write_lcd_com(0x06);
write_lcd_com(0x0c);
}
/************************1602***显示*********************/
void display()
{
uchar i;
write_lcd_com(0x80);
//write_lcd_com(0x32);
write_lcd_date(0x30+a[11]);
write_lcd_date(0x30+a[12]);
write_lcd_date(0xb0);//"-"
write_lcd_date(0x30+a[8]);
write_lcd_date(0x30+a[9]);
write_lcd_date(0xb0);//"-"
write_lcd_date(0x30+a[6]);
write_lcd_date(0x30+a[7]);
//"-"
write_lcd_date(0x20);
for(i=0;i<4;i++)
{
write_lcd_date(table1);
}
write_lcd_date(0x30+a[10]);
write_lcd_com(0x80+0x40);
write_lcd_date(0x20);
write_lcd_date(0x20);
write_lcd_date(0x20);
write_lcd_date(0x20);
write_lcd_date(0x30+a[4]);
write_lcd_date(0x30+a[5]);
write_lcd_date(0x3a);
write_lcd_date(0x30+a[2]);
write_lcd_date(0x30+a[3]);
write_lcd_date(0x3a);
write_lcd_date(0x30+a[0]);
write_lcd_date(0x30+a[1]);
}
/*********************************主函数*******************************/
void main()
{
init();
set_1302();
while(1)
{
get_date();
display();
}
}
/*******************绝世好剑----制作**************************************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit sclk=P3^6;
sbit rest=P3^5;
sbit sda=P3^4;
sbit e=P2^7;
sbit rw=P2^5;
sbit rd=P2^6;
uchar a[81];
uchar code table1[]="week";
void delay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/*******************************************/
void write_byte(uchar a)
{
uint i;
for(i=0;i<8;i++)
{
sclk=0;
sda=(a>>i)&0x01;
sclk=1;
}
}
/*******************************************/
uchar read_byte(void)
{
uint i;
uchar b;
b=0;
for(i=0;i<8;i++)
{
if(sda)
b|=0x80;
else
b|=0x00;
sclk=0;
b>>=1;
_nop_();
_nop_();
_nop_();
sclk=1;
}
return b;
}
/*******************************************/
void write_date(uchar add,uchar date)
{
rest=0;
sclk=0;
rest=1;
write_byte(add);
write_byte(date);
sclk=1;
rest=0;
}
/**************************读数据***********************/
uchar read_date(uchar add)
{
uchar t;
rest=0;
sclk=0;
rest=1;
write_byte(add);
t=read_byte();
rest=0;
sclk=1;
return (t);
}
/*****************************写1302的初始值*************************************************/
void set_1302()
{
write_date(0x8e,0x00);
write_date(0x80,0x59);
write_date(0x82,0x59);
write_date(0x84,0x23);
write_date(0x86,0x21);//日
write_date(0x88,0x06); //月份
write_date(0x8a,0x05); //星期
write_date(0x8c,0x13); //年份
write_date(0x8e,0x80);
}
/*********************将读出来的数据赋给数组*/
void get_date()
{
a[0]=read_date(0x81)/16;
a[1]=read_date(0x81)%16;
a[2]=read_date(0x83)/16;
a[3]=read_date(0x83)%16;
a[4]=read_date(0x85)/16;
a[5]=read_date(0x85)%16;
a[6]=read_date(0x87)/16;
a[7]=read_date(0x87)%16;
a[8]=read_date(0x89)/16;
a[9]=read_date(0x89)%16;
a[10]=read_date(0x8b)%16;
a[11]=read_date(0x8d)/16;
a[12]=read_date(0x8d)%16;
}
/************************1602************************/
void write_lcd_date(uchar date)
{
rd=1;
P0=date;
delay(5);
e=1;
delay(5);
e=0;
delay(5);
}
/************************1602************************/
void write_lcd_com(uchar com)
{
rd=0;
P0=com;
delay(5);
e=1;
delay(5);
e=0;
delay(5);
}
/************************1602************************/
void init()
{
sclk=0;
rest=0;
rw=0;
write_lcd_com(0x38);
write_lcd_com(0x01);
write_lcd_com(0x06);
write_lcd_com(0x0c);
}
/************************1602***显示*********************/
void display()
{
uchar i;
write_lcd_com(0x80);
//write_lcd_com(0x32);
write_lcd_date(0x30+a[11]);
write_lcd_date(0x30+a[12]);
write_lcd_date(0xb0);//"-"
write_lcd_date(0x30+a[8]);
write_lcd_date(0x30+a[9]);
write_lcd_date(0xb0);//"-"
write_lcd_date(0x30+a[6]);
write_lcd_date(0x30+a[7]);
//"-"
write_lcd_date(0x20);
for(i=0;i<4;i++)
{
write_lcd_date(table1);
}
write_lcd_date(0x30+a[10]);
write_lcd_com(0x80+0x40);
write_lcd_date(0x20);
write_lcd_date(0x20);
write_lcd_date(0x20);
write_lcd_date(0x20);
write_lcd_date(0x30+a[4]);
write_lcd_date(0x30+a[5]);
write_lcd_date(0x3a);
write_lcd_date(0x30+a[2]);
write_lcd_date(0x30+a[3]);
write_lcd_date(0x3a);
write_lcd_date(0x30+a[0]);
write_lcd_date(0x30+a[1]);
}
/*********************************主函数*******************************/
void main()
{
init();
set_1302();
while(1)
{
get_date();
display();
}
}