标题: 单片机旋转电子钟制作 带PCB原理图,源程序 [打印本页]

作者: 51黑ff    时间: 2016-9-8 01:59
标题: 单片机旋转电子钟制作 带PCB原理图,源程序
旋转电子钟制作资料分享给大家

元件名称型号封装数量参数
单片机U1LQFP 441STC89C52
时钟芯片U2DIP 41DS1302
贴片电阻RO-R19O805201K
贴片电阻R22-R25O8O5410K
贴片LEDO8O5O8O520
电阻R20AXIAL0.21470
瓷片电容C1-C4O8O5433P
红外接收Q1TO-2201 3P
晶振X1CC2111.0592 MHZ
晶振X2CC2132.768 MHZ
排插J1SIP1SIP4
电感线圈L2(次级)L10180匝
钮扣电池座BattayAXIAL0.913V
                              无线供电部份
三极管Q1TO921B772
三极管Q2TO9219013
电容C1CC41222
电阻R-R3RW103470
电阻R4RW10110K
二极管D1-D2DW1021N4007
二极管D3LED1红外发射
插口J1-J2CON222P
电感L1(初级线圈)L101100匝


PCB原理图,源程序都有,想要的同学可以下去参考下。本人做成功了。就不上图了。做的不好看。电源部分没做成


















































  1. /***************************************************************************************************/
  2. //指针式时钟 简单版 有待改进!
  3. #include
  4. #define uchar unsigned char    //宏定义
  5. #define uint unsigned int
  6. //sbit KEY=P3^2 ;
  7. //sbit led1=P1^0 ;

  8. sbit ACC0=ACC^0;           //1bit数据存储位
  9. sbit ACC7=ACC^7;

  10. sbit T_CLK=P3^5;                    //DS1302引脚连接
  11. sbit T_IO =P3^6;
  12. sbit T_RST=P3^7;

  13. uchar i=1 ;
  14. uint Pt,S ;
  15. uint D=0 ;
  16. uchar miao,Cent,Hour,Month,Day,Week,miaot,centt,hourt;
  17. void du1302();
  18. /*******************************************************************************/
  19. /*外部中断0处理函数*/
  20. void intersvr0(void)interrupt 0 using 0
  21. {
  22.    
  23. //        D=D+(S-180);
  24.     //D=0;
  25.     //修正值
  26.    // Pt=580;
  27.     //得到定时器T0的初设值
  28.     S=0;
  29.            
  30.     //计数器清零,将重新计数

  31. }

  32. /*定时中断0处理函数*/
  33. void timer0(void)interrupt 1 using 1
  34. {
  35.     TH0=(65536-630)/256 ;
  36.     TL0=(65536-630)%256 ;
  37.     //设置定时器T0的初设值
  38.     S++;
  39.     //计数
  40.     switch(S)
  41.     {
  42.         case 15 :
  43.         //0点
  44.         case 30 :
  45.         //1点
  46.         case 45 :
  47.         //2点
  48.         case 60 :
  49.         //3点
  50.         case 75 :
  51.         //4点
  52.         case 90 :
  53.         //5点
  54.         case 105 :
  55.         //6点
  56.         case 120 :
  57.         //7点
  58.         case 135 :
  59.         //8点
  60.         case 150 :
  61.         //9点
  62.         case 165 :
  63.         //10点
  64.         case 1 :
  65.         //11点
  66.         P0=0xF8 ;
  67.         while(i--);
  68.         break ;
  69.     }
  70.     //0-180   0-60
  71.     if((miaot==S/3)&&(S%3==1))
  72.     {
  73.         P0=0X07 ;
  74.         P2=0X00 ;
  75.         P1=0X00 ;
  76.         while(i--);
  77.     }
  78.     //0-180   0-60
  79.     if((centt==S/3)&&(S%3==1))
  80.     {
  81.         P0=0XFF ;
  82.         P2=0X00 ;
  83.         P1=0X00 ;
  84.                while(i--);
  85.     }
  86.    
  87.     //0-180   0-60
  88.     if((hourt==S/3)&&(S%3==1))
  89.     {
  90.         P0=0XFF ;
  91.         P2=0X0F ;
  92.         P1=0X00 ;
  93.         while(i--);
  94.     }

  95.     P0=0XFF ;
  96.     P1=0XFF ;
  97.     P2=0XFF ;
  98. }
  99. /*******************DS1302读写程序**********************************
  100. /********************************************************************
  101. 函 数 名:RTInputByte()
  102. 功    能:实时时钟写入一字节
  103. 说    明:往DS1302写入1Byte数据 (内部函数)
  104. 入口参数:d 写入的数据
  105. 返 回 值:无  
  106. ***********************************************************************/
  107. void RTInputByte(uchar d)
  108. {
  109.     uchar h;
  110.     ACC = d;
  111.     for(h=8; h>0; h--)
  112.     {
  113.         T_IO = ACC0;           /*相当于汇编中的 RRC */
  114.         T_CLK = 1;
  115.         T_CLK = 0;
  116.         ACC = ACC >> 1;
  117.     }
  118. }
  119. /********************************************************************
  120. 函 数 名:RTOutputByte()
  121. 功    能:实时时钟读取一字节
  122. 说    明:从DS1302读取1Byte数据 (内部函数)
  123. 入口参数:无  
  124. 返 回 值:ACC
  125. 设    计:zhaojunjie           日    期:2002-03-19
  126. 修    改:                     日    期:
  127. ***********************************************************************/
  128. uchar RTOutputByte(void)
  129. {
  130.     uchar h;
  131.     for(h=8; h>0; h--)
  132.     {
  133.         ACC = ACC >>1;         /*相当于汇编中的 RRC */
  134.         ACC7 = T_IO;
  135.         T_CLK = 1;
  136.         T_CLK = 0;
  137.     }
  138.     return(ACC);
  139. }
  140. /********************************************************************
  141. 函 数 名:W1302()
  142. 功    能:往DS1302写入数据
  143. 说    明:先写地址,后写命令/数据 (内部函数)
  144. 调    用:RTInputByte() , RTOutputByte()
  145. 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
  146. 返 回 值:无
  147. ***********************************************************************/
  148. /*void W1302(uchar ucAddr, uchar ucDa)
  149. {
  150.     T_RST = 0;
  151.     T_CLK = 0;
  152.     T_RST = 1;
  153.     RTInputByte(ucAddr);       /* 地址,命令 */
  154. /*   RTInputByte(ucDa);       /* 写1Byte数据*/
  155. /*   T_CLK = 1;
  156.     T_RST = 0;
  157. /*}
  158. /********************************************************************
  159. 函 数 名:R1302()
  160. 功    能:读取DS1302某地址的数据
  161. 说    明:先写地址,后读命令/数据 (内部函数)
  162. 调    用:RTInputByte() , RTOutputByte()
  163. 入口参数:ucAddr: DS1302地址
  164. 返 回 值:ucData :读取的数据
  165. ***********************************************************************/
  166. uchar R1302(uchar ucAddr)
  167. {
  168.     uchar ucData;
  169.     T_RST = 0;
  170.     T_CLK = 0;
  171.     T_RST = 1;
  172.     RTInputByte(ucAddr);             /* 地址,命令 */
  173.     ucData = RTOutputByte();         /* 读1Byte数据 */
  174.     T_CLK = 1;
  175.     T_RST = 0;
  176.     return(ucData);
  177. }

  178. /********************************************************************
  179. 函 数 名:Set1302()
  180. 功    能:设置初始时间
  181. 说    明:先写地址,后读命令/数据(寄存器多字节方式)
  182. 调    用:W1302()
  183. 入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
  184.                                7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
  185. 返 回 值:无
  186. ***********************************************************************/
  187. /*void Set1302(uchar *pClock)
  188. {
  189.     uchar h;
  190.     uchar ucAddr = 0x80;
  191.     W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
  192.   /*  for(h =7; h>0; h--)
  193.     {
  194.   /*      W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */
  195.   /*      pClock++;
  196.         ucAddr +=2;
  197.   /*  }
  198.         W1302(0xc0,0x01);
  199.         W1302(0XC2,0X03);                        //初始自动转换显示时间为3秒。
  200.     W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/

  201. /*}
  202. /******************读取DS1302中的时间****************/
  203. void du1302()
  204. {
  205.       miao=R1302(0x81);  //对取 秒 分 时 日 月 星期 年
  206.           Cent=R1302(0x83);         
  207.           Hour=R1302(0x85);
  208.           //Day=R1302(0x87);
  209.           //Month=R1302(0x89);
  210.           //Week=R1302(0x8b);

  211.          
  212. }
  213. /*****主函数*****/
  214. void main(void)
  215. {
  216.     TMOD=0x01 ;
  217.     //定时器0和1工作方式都为1
  218.     EX0=1 ;
  219.     //开外部中断0
  220.     IT0=1 ;
  221.     //外部中断0设置为下降沿中断
  222.     ET0=1 ;
  223.     //定时器0开中断
  224.     // ET1=1;   //定时器1开中断
  225.     TH0=(65536-630)/256 ;
  226.     TL0=(65536-630)%256 ;
  227.     TR0=1 ;
  228.     EA=1 ;
  229.     //开总中断
  230.    
  231.     //无限循环
  232.     while(1)
  233.     {
  234.           du1302();
  235.         miaot=miao/16*10+miao%16 ;
  236.         centt=Cent/16*10+Cent%16 ;
  237.         hourt=Hour/16*10+Hour%16 ;
  238.         
  239.     }
  240. }
  241. /*****END*****/
复制代码







旋转LED资料.zip

4.18 MB, 下载次数: 185, 下载积分: 黑币 -5


作者: xdl0129    时间: 2016-9-10 08:54
好资料先收藏以后有空再做,
作者: 东北那谁    时间: 2016-9-12 20:55
51有你更精彩
作者: dxa572862121    时间: 2016-9-20 16:17
早就看过这个高大上的东西,原来是51做的,要试一下
作者: tangloong    时间: 2017-5-5 13:07
好资料先收藏以后有空再做,
作者: wangyy99123    时间: 2017-5-9 09:35
感觉好厉害。
作者: ningdachun    时间: 2017-9-5 15:07
可否给份资料
作者: 13028848122    时间: 2017-9-12 18:22
楼主可以告诉我你是怎么把程序烧进去的么
作者: kyo123    时间: 2017-10-12 20:10
刚好也要做这东西
作者: tianliangl    时间: 2018-1-25 22:54
先保存下来,回头做做。
作者: 386912599    时间: 2018-4-21 22:52
好资料收藏了
作者: 越快乐越堕落    时间: 2018-6-4 18:00
13028848122 发表于 2017-9-12 18:22
楼主可以告诉我你是怎么把程序烧进去的么

先做一个下载板,装上单片机,接好线,下载一个烧录器,选择单片机型号,点击烧录,给下载板通电,下载成功。这是STC单片机的大致步骤。不过要注意单片机的接线,还要有串口转USB线,不转也行,只是转USB更方便,还有一根USB电源线
作者: 779380649    时间: 2019-4-22 18:29
779380649@qq.com 谢谢大佬
作者: alexjohnny    时间: 2019-6-12 14:19
有没有大佬下载了能给我一份??
作者: 铁蛋的设计作品    时间: 2019-9-1 17:27
alexjohnny 发表于 2019-6-12 14:19
有没有大佬下载了能给我一份??

请尊重别人的劳动成果好吧!
作者: 714960877    时间: 2020-2-13 17:26
你好,有PCB文件吗?我资料下载了么有PCB文件
作者: wgw020    时间: 2021-12-19 09:24
非常值得学习,好好学习一下,谢谢分享




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1