zjr10000
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit ledlk
=P1^0;
sbit smglk
=P1^1;
sbit smgbitlk
=P1^2;

sbit rs
=P3^4;
sbit en
=P1^5;


sbit sclk
=P0^0;
sbit rst
=P0^1;
sbit io
=P0^2;

uchar author[]
="2000-00-00  ";
uchar mail[]
="00:00:00";

uchar sec,min,hour,year,month,day,week;
void delayms(int ms)
{
    
char i,j;
    
for(i=0;i<ms;i++)
        
for(j=0;j<120;j++);
}

void write_command(uchar com)
{
    en
=0;
    rs
=0;
    P2
=com;
    delayms(
5);   //time must be enough
    en=1;
    delayms(
5);
    en
=0;
    delayms(
5);
}

void write_date(uchar date)
{
    en
=0;
    rs
=1;
    P2
=date;
    delayms(
5);
    en
=1;
    delayms(
5);
    en
=0;
}

void init1602()
{
    write_command(
0x38);
    write_command(
0x0c);
    write_command(
0x06);
    write_command(
0x01);
}
void init()
{
    ledlk
=0;
    smglk
=0;
}

void write_address_date(uchar address,uchar date)
{
    uchar i;
    rst
=0;
    sclk
=0;
    rst
=1;
    
for(i=0;i<8;i++)
    {
        io
=address&0x01;
        sclk
=1;
        sclk
=0;
        address
>>=1;
    }
    delayms(
5);
    
for(i=0;i<8;i++)
    {    
        io
=date&0x01;
        sclk
=1;    
        sclk
=0;
        date
>>=1;
        
    }
    sclk
=1;
}

uchar read_address_date(uchar address)
{
    uchar i,tmp,date
=0x00;
    rst
=0;
    sclk
=0;
    rst
=1;
    
for(i=0;i<7;i++)
    {    
        io
=address&0x01;
        sclk
=1;
        sclk
=0;
        address
>>=1;
    }    
    io
=address&0x01;
    sclk
=1;
    delayms(
5);
    
for(i=0;i<8;i++)
    {
        date
=date>>1;
        sclk
=0;
        tmp
=io;
        date
=(tmp<<7)|date;
        sclk
=1;
    }
    
return date;
}

void set1302()
{
    write_address_date(
0x8e,0x00);

    write_address_date(
0x8c,0x09);
    write_address_date(
0x8a,0x04);
    write_address_date(
0x88,0x07);
    write_address_date(
0x86,0x16);
    write_address_date(
0x84,0x12);
    write_address_date(
0x82,0x59);    
    
    write_address_date(
0x80,0x00);
    write_address_date(
0x8e,0x80);
}

void read1302()
{
    sec
=read_address_date(0x81);
    min
=read_address_date(0x83);
    hour
=read_address_date(0x85);
    year
=read_address_date(0x8d);
    month
=read_address_date(0x89);
    day
=read_address_date(0x87);
    week
=read_address_date(0x8b);
    
}

    
void timeread()
{
    uchar s1,s2,m1,m2,h1,h2,y1,y2,mo1,mo2,d1,d2,w;
    read1302();
    s1
=sec&0xf0;
    s1
>>=4;    
    s2
=sec&0x0f;
    m1
=min&0xf0;
    m1
>>=4;
    m2
=min&0x0f;
    h1
=hour&0xf0;
    h1
>>=4;
    h2
=hour&0x0f;
    y1
=year&0xf0;
    y1
>>=4;
    y2
=year&0x0f;
    mo1
=month&0xf0;
    mo1
>>=4;
    mo2
=month&0x0f;
    d1
=day&0xf0;
    d1
>>=4;
    d2
=day&0x0f;
    w
=week&0x0f;
    
    mail[
0]=h1+\'0\';
    mail[
1]=h2+\'0\';
    mail[
3]=m1+\'0\';
    mail[
4]=m2+\'0\';
    mail[
6]=s1+\'0\';
    mail[
7]=s2+\'0\';

    author[
2]=y1+\'0\';
    author[
3]=y2+\'0\';
    author[
5]=mo1+\'0\';
    author[
6]=mo2+\'0\';
    author[
8]=d1+\'0\';
    author[
9]=d2+\'0\';
    author[
11]=w+\'0\';
}
            
    
void main()
{
    uchar i;
    init();
    init1602();
    set1302();
    
while(1)
    {
        timeread();    
        write_command(
0x80);
        
for(i=0;i<sizeof(author)-1;i++)
        {
            write_date(author[i]);
            delayms(
5);
        }
        write_command(
0x80+0x40);
        delayms(
5);
        
for(i=0;i<sizeof(mail)-1;i++)
        {
            write_date(mail[i]);
            delayms(
5);
        }
        delayms(
100);
    }
}    

分类:

技术点:

相关文章:

  • 2021-12-30
  • 2022-12-23
  • 2021-10-27
  • 2021-07-31
  • 2021-12-30
  • 2021-12-30
  • 2021-08-16
猜你喜欢
  • 2021-12-30
  • 2021-05-03
  • 2021-12-30
  • 2021-10-05
  • 2021-08-30
  • 2021-12-30
  • 2021-12-30
相关资源
相似解决方案