找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12168|回复: 18
打印 上一主题 下一主题
收起左侧

单片机旋转电子钟制作 带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, 下载次数: 184, 下载积分: 黑币 -5

评分

参与人数 1黑币 +5 收起 理由
5760985 + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏16 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:112242 发表于 2016-9-10 08:54 | 只看该作者
好资料先收藏以后有空再做,
回复

使用道具 举报

板凳
ID:136460 发表于 2016-9-12 20:55 | 只看该作者
51有你更精彩
回复

使用道具 举报

地板
ID:134810 发表于 2016-9-20 16:17 来自手机 | 只看该作者
早就看过这个高大上的东西,原来是51做的,要试一下
回复

使用道具 举报

5#
ID:196897 发表于 2017-5-5 13:07 | 只看该作者
好资料先收藏以后有空再做,
回复

使用道具 举报

6#
ID:198504 发表于 2017-5-9 09:35 来自手机 | 只看该作者
感觉好厉害。
回复

使用道具 举报

7#
ID:229326 发表于 2017-9-5 15:07 | 只看该作者
可否给份资料
回复

使用道具 举报

8#
ID:232386 发表于 2017-9-12 18:22 | 只看该作者
楼主可以告诉我你是怎么把程序烧进去的么
回复

使用道具 举报

9#
ID:238958 发表于 2017-10-12 20:10 | 只看该作者
刚好也要做这东西
回复

使用道具 举报

10#
ID:279798 发表于 2018-1-25 22:54 | 只看该作者
先保存下来,回头做做。
回复

使用道具 举报

11#
ID:298016 发表于 2018-4-21 22:52 | 只看该作者
好资料收藏了
回复

使用道具 举报

12#
ID:99130 发表于 2018-6-4 18:00 | 只看该作者
13028848122 发表于 2017-9-12 18:22
楼主可以告诉我你是怎么把程序烧进去的么

先做一个下载板,装上单片机,接好线,下载一个烧录器,选择单片机型号,点击烧录,给下载板通电,下载成功。这是STC单片机的大致步骤。不过要注意单片机的接线,还要有串口转USB线,不转也行,只是转USB更方便,还有一根USB电源线
回复

使用道具 举报

13#
ID:517489 发表于 2019-4-22 18:29 来自手机 | 只看该作者
779380649@qq.com 谢谢大佬
回复

使用道具 举报

14#
ID:560864 发表于 2019-6-12 14:19 | 只看该作者
有没有大佬下载了能给我一份??
回复

使用道具 举报

15#
ID:606097 发表于 2019-9-1 17:27 来自手机 | 只看该作者
alexjohnny 发表于 2019-6-12 14:19
有没有大佬下载了能给我一份??

请尊重别人的劳动成果好吧!
回复

使用道具 举报

16#
ID:317206 发表于 2020-2-13 17:26 | 只看该作者
你好,有PCB文件吗?我资料下载了么有PCB文件
回复

使用道具 举报

17#
ID:82732 发表于 2021-12-19 09:24 | 只看该作者
非常值得学习,好好学习一下,谢谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表