基于单片机51系列及DS1302时钟芯片数字电子钟的制作。求电路总原理图、PCB图、程序以及元件清单。 100

完全不懂,只有来麻烦大家了。题目:基于单片机51系列及DS1302时钟芯片数字电子钟的制作基本任务和要求:1、本设计是以单片机为核心设计一个多功电子表,具有时钟和日期显示... 完全不懂,只有来麻烦大家了。
题目:基于单片机51系列及DS1302时钟芯片数字电子钟的制作
基本任务和要求:

1、本设计是以单片机为核心设计一个多功电子表,具有时钟和日期显示功能。做时钟时在6位LED 显示器上显示时、分、秒,显示日期时在6位LED 显示器上显示年、月、日。可以手动调节时、分、秒。
2、1小时误差小于5秒。
3、设计电源部分。

现在买好的元器件清单。不知道够不够。
AT89C52单片机 1块 ,1602液晶显示器 1快
10K直排上拉电阻 1排 ,单片机插座 1块
稳压管LM7805 1个 ,30Pf瓷片电容 2个
104瓷片电容 2个 ,22uf电解电容 1个
2000uf电解电容 1个 ,220uf电解电容 1个
9V变压器 1个 ,整流桥 1个
排针 1排 ,轻触开关 4个
10K电阻 1个 ,5K电阻 1个
10欧电阻 1个 ,PCB覆铜板10*15 1块

求帮忙设计个电路总原理图、PCB图、程序以及元件清单(元件尽可能以上面清单为基础,不够再添加)。
发到邮箱1140280188@qq.com
我积分比较少,只有100分全给了。懂的大大来帮下忙吧。谢谢。-3-
展开
 我来答
xyak8899
2012-12-10 · TA获得超过5.1万个赞
知道大有可为答主
回答量:3万
采纳率:4%
帮助的人:1.8亿
展开全部

这是1602电路,和时钟电路。

 

元件基本差不多。电路如图

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

sbit ds1302_RST =P2^0;

sbit ds1302_IO  =P2^1;

sbit ds1302_SCLK=P2^2;

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;

sbit A1=P3^0;

sbit A2=P3^1;

sbit A3=P3^2;

sbit A4=P3^3;

sbit A5=P3^4;

sbit A6=P3^5;

sbit key1=P3^6;

sbit key2=P3^7;

uchar now_time[3],wei,d[3]={0,0,0};

uchar code s[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e

};

void delay(uint x)

{

 uchar i;

  for(x;x>0;x--)

   for(i=0;i<100;i++);

}

void disp()

{

    P1=s[now_time[2]/16];

 A1=d[2];

 delay(5);

 A1=1;

  P1=s[now_time[2]%16];

 A2=d[2];

 delay(5);

 A2=1;

  P1=s[now_time[1]/16];

 A3=d[1];

 delay(5);

 A3=1;

  P1=s[now_time[1]%16];

 A4=d[1];

 delay(5);

 A4=1;

 P1=s[now_time[0]/16];

 A5=d[0];

 delay(5);

 A5=1;

 P1=s[now_time[0]%16];

 A6=d[0];

 delay(5);

 A6=1;

}

/***********************************************************************/

uchar  read_Byte()

{

   uchar i;

   for(i=8;i>0;i--)

   {

     ACC=ACC>>1;

     ACC7=ds1302_IO;

     ds1302_SCLK=1;

     ds1302_SCLK=0;     

   } 

   return(ACC);

}

 

void  write_Byte(uchar tdata)

{

   uchar i;

   ACC=tdata;

   for(i=8;i>0;i--)

   {

     ds1302_IO=ACC0;

     ds1302_SCLK=1;

     ds1302_SCLK=0;

     ACC=ACC>>1;

   }

}

/***********************************************************************************/

void write_data_ds1302(uchar taddr,uchar tdata)

{

   ds1302_RST=0;

   ds1302_SCLK=0;

   ds1302_RST=1;

   write_Byte(taddr);

   write_Byte(tdata); 

   ds1302_RST=0;

   ds1302_SCLK=1;

}


uchar read_data_ds1302(uchar taddr)

   uchar tdata;

   

   ds1302_RST=0;

   ds1302_SCLK=0;

   ds1302_RST=1;

   write_Byte(taddr);

   tdata=read_Byte(); 

   ds1302_RST=0;

   ds1302_SCLK=1;

   return(tdata);

}

/***********************************************************************************/

void get_ds1302() 

{

    uchar k;

    uchar taddr = 0x81;

    for (k=0; k<3; k++)

    {

        now_time[k] = read_data_ds1302(taddr);

        taddr+=2;

    }

}

/***********************************************************************************/

void init_ds1302()

{

    ds1302_RST=0;

    ds1302_SCLK=0;

 A1=1;

 A2=1;

 A3=1;

 A4=1;

 A5=1;

 A6=1; 

 write_data_ds1302(0x80,0x00);

}

/***********************************************************************************/

void  Time();

/***********************************************************************************/

main()

    init_ds1302();

  while(1)

   {

    disp();

   get_ds1302();

   if(key1==0);

      { delay(10);

        if(key1==0)

       Time();

      }

   } 

}

void timer() interrupt 3

{

    uchar i;i++;

   TH1=(65535-50000)/256;

   TL2=(65535-50000)%256;

  if(i==50)

 {

   d[wei]=1;

 }

 if(i==100)

  { i=0;

    d[wei]=0;

  }

}

 /***********************************************************************************/


 void   Time()

 { 

    uchar temp;

    uint r=0,p=1; 

   wei=2;

    TMOD=0x01;

   EA=1;

   ET1=1;

   TH1=(65535-50000)/256;

   TL2=(65535-50000)%256;

   TR1=1;

    for(r=0;r<50;r++)

 disp();

 

  while( key1 )

   { 

   wei=2;

   disp();

   if(key2==0)

   {

    disp();

    if(key2==0)

    {

       temp=now_time[2]/16*10+now_time[2]%16;

     temp++;

     if(temp>=24)

      temp=0;

     now_time[2]=temp/10*16+temp%10;

     write_data_ds1302(0x84,now_time[2]); 

    }

    while(!key2);

   } 

   

  } 

      wei=1;   

     d[2]=0;

  for(r=0;r<50;r++)

   disp();

     

  while(key1 )

   { disp();

   if(key2==0)

   { 

     disp();

     if(key2==0)

      {

       temp=now_time[1]/16*10+now_time[1]%16;

       temp++;

       if(temp>=60)

        temp=0;

       now_time[1]=temp/10*16+temp%10;

       write_data_ds1302(0x82,now_time[1]); 

      }

       while(!key2);

    } 

  }

      wei=0;

   d[1]=0;

 

  for(r=0;r<50;r++)

   disp();

 

  while(key1 )

   {

   disp();

   if(key2==0)

    {

     now_time[0]=0;

     write_data_ds1302(0x80,now_time[0]); 

    } 

 

  }   TR1=0;

 

    d[0]=0;

 

  for(r=0;r<30;r++)

   disp();

 

 }

按图安装即可,祝你成功。

xachf
2012-12-11 · TA获得超过316个赞
知道小有建树答主
回答量:263
采纳率:0%
帮助的人:216万
展开全部
你已经使用了LCD1602,就已经不是使用6位LED显示了,如果使用6位LED,则LCD1602不必使用。其它问题,网上资料已经很多了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式