微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 1302+1602时钟显示

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();
         
         }
        
        
        
        }                  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top