專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

LCD1602液晶屏+DS1302時鐘芯片的電子時鐘

作者:佚名   來源:本站原創(chuàng)   點擊數:  更新時間:2012年02月22日   【字體:


 程序源代碼下載地址:http://www.torrancerestoration.com/f/1320dsf.rar


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

uchar code tab1[]="DS1302";
uchar code tab2[]="Week-";
uchar code tab3[]="0123456789";
uchar xdw[13];

sbit SCK=P2^0;
sbit AB=P2^1;
sbit RS=P2^2;
sbit RW=P2^3;
sbit EN=P2^4;
sbit RST=P2^5;
sbit SCLK=P2^6;
sbit DS=P2^7;


void DS1302_xie_hs(uchar dat);
void DS1302_xie_1byte(uchar add,uchar tdat);
uchar DS1302_du_hs(void);
uchar DS1302_du_1byte(uchar add);
void LCM1602_xie_cmd_hs(uchar cmd);
void LCM1602_xie_dat_hs(uchar dat);
void display();
void dushuju();
void inti();
void delay(uint z);

void DS1302_xie_hs(uchar dat)
{
 uint i,num;
 num=dat;
 for(i=0;i<8;i++)
 {
  DS=(bit)(num&0x01);
  SCLK=1;
  SCLK=0;
  num>>=1;
 }
}

void DS1302_xie_1byte(uchar add,uchar tdat)
{
 RST=0;
 SCLK=0;
 RST=1;
 DS1302_xie_hs(add);
 DS1302_xie_hs(tdat);
 SCLK=1;
 RST=0;
}

uchar DS1302_du_hs(void)
{
 uchar i,num;
 for(i=0;i<8;i++)
 {
  num>>=1;
  if(DS)
  num|=0x80;
  SCLK=1;
  SCLK=0;
 }
 return(num);
}

uchar DS1302_du_1byte(uchar add)
{
 uchar tmp;
 RST=0;
 SCLK=0;
 RST=1;
 DS1302_xie_hs(add);
 tmp=DS1302_du_hs();
 SCLK=1;
 RST=0;
 return(tmp);
}

void LCM1602_xie_cmd_hs(uchar cmd)
{
 uchar i,num;
 RS=0;
 RW=0;
 EN=0;
 
 RS=0;
 RW=0;
 EN=1;
 num=cmd;
 for(i=0;i<8;i++)
 {
  AB=(bit)(num&0x01);
  SCK=0;
  SCK=1;
  num>>=1;
 }
 EN=0;
}

void LCM1602_xie_dat_hs(uchar dat)
{
 uchar i,num;
 RS=0;
 RW=0;
 EN=0;
 
 RS=1;
 RW=0;
 EN=1;
 num=dat;
 for(i=0;i<8;i++)
 {
  AB=(bit)(num&0x01);
  SCK=0;
  SCK=1;
  num>>=1;
 }
 EN=0;
}

void display()
{
 uchar i,j,tmp;

 LCM1602_xie_cmd_hs(0x80+0x08);
 for(i=0;i<3;i++)
 {
  for(j=0;j<2;j++)
  {
   LCM1602_xie_dat_hs(tab3[xdw[i*2+j]]);
   delay(2);
  }

 }
}

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

void inti()
{
 RS=0;
 RW=0;
 EN=0;
 SCLK=0;

 LCM1602_xie_cmd_hs(0x38);
 LCM1602_xie_cmd_hs(0x0c);
 LCM1602_xie_cmd_hs(0x06);

 DS1302_xie_1byte(0x8e,0x00);
 DS1302_xie_1byte(0x80,0x00);
 DS1302_xie_1byte(0x82,0x29);
 DS1302_xie_1byte(0x84,0x22);
 DS1302_xie_1byte(0x86,0x24);
 DS1302_xie_1byte(0x88,0x01);
 DS1302_xie_1byte(0x8a,0x02);
 DS1302_xie_1byte(0x8c,0x12);
 DS1302_xie_1byte(0x8e,0x80);
}

void dushuju()
{
uchar seg;
seg=DS1302_du_1byte(0x8d);
xdw[0]=seg>>4;
xdw[1]=seg&0x0f;

seg=DS1302_du_1byte(0x89);
xdw[2]=seg>>4;
xdw[3]=seg&0x0f;

seg=DS1302_du_1byte(0x87);
xdw[4]=seg>>4;
xdw[5]=seg&0x0f;

seg=DS1302_du_1byte(0x85);
xdw[6]=seg>>4;
xdw[7]=seg&0x0f;

seg=DS1302_du_1byte(0x83);
xdw[8]=seg>>4;
xdw[9]=seg&0x0f;

seg=DS1302_du_1byte(0x81);
xdw[10]=seg>>4;
xdw[11]=seg&0x0f;

seg=DS1302_du_1byte(0x8b);
xdw[12]=seg&0x0f;
}

void main()
{
 inti();
 while(1)
 {
  dushuju();
  display();
 }
}
關閉窗口

相關文章