标题: 自己做板,32X64双色点阵时钟制作。有程序 [打印本页]

作者: huwen    时间: 2013-10-16 15:25
标题: 自己做板,32X64双色点阵时钟制作。有程序
看到网上有人做32X64双色点阵时钟,效果不错,于是咱也买了几块点阵屏,做了起来,话说,看着简单自己做起来那是相当的难啊,由于是第一次自己做PCB,在第一次感光上循环了很多次(因为不是用的紫外线灯),左后终于曝光成功了。可惜过程中都是接触液体,而且我仅靠双手是无法顺利完成制作和照相的工作,照片就无法上传了,仅附完成照片和成功的照片。PS:因为是第一次做这个东西,很多都不了解,在制作PCB上面浪费了很多时间,哈哈哈。看视频!http://player.youku.com/player.php/sid/XNDk0NjQ0ODQw/v.swf




最后放上视频视频效果!有需要资料的,请跟帖问我要,有建议的也灰常欢迎提出来,我也仅仅是个刚刚学51的菜鸟而已

点阵程序.rar (91.95 KB, 下载次数: 435)

作者: ▓逍〓遥◆    时间: 2013-10-31 16:56
不错,51黑有你更精彩!!!!!

下面是楼主的源码:
  1. #include <STC12C5A60S2.h>
  2. //#include <STC12C5410AD.h>
  3. //#include <STC90C58RD.h>
  4. //#include <REG52.H>
  5. //extern void delay1(unsigned int time);

  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. //this is for 1632
  9. sbit     T_CLK      = P3^5;   /*实时时钟时钟线引脚7 */
  10. sbit     T_IO       = P3^6;   /*实时时钟数据线引脚6 */
  11. sbit     T_RST      = P3^7;   /*实时时钟复位线引脚5 */
  12. sbit     ACC0=ACC^0;
  13. sbit     ACC1=ACC^1;
  14. sbit     ACC2=ACC^2;
  15. sbit     ACC3=ACC^3;
  16. sbit     ACC4=ACC^4;
  17. sbit     ACC5=ACC^5;
  18. sbit     ACC6=ACC^6;
  19. sbit     ACC7=ACC^7;


  20. /*******************************************************************  
  21. *
  22. * 名称: v_RTInputByte
  23. * 说明:
  24. * 功能: 往DS1302写入1Byte数据
  25. * 调用:
  26. * 输入: ucDa 写入的数据
  27. * 返回值: 无
  28. ***********************************************************************/
  29. void  v_RTInputByte(uchar  ucDa)  
  30. {                              
  31.     uchar  i;
  32.     ACC = ucDa;
  33.     for(i=8; i>0; i--)
  34.     {
  35.          T_IO = ACC0;          /*相当于汇编中的  RRC  */
  36. //                 delay(20);       
  37.          T_CLK = 1;
  38. //                 delay(20);       
  39.          T_CLK = 0;
  40. //                 delay(20);       
  41.          ACC = ACC >> 1;   
  42.      }     
  43. }
  44. /********************************************************************  
  45. *
  46. * 名称: uchar uc_RTOutputByte
  47. * 说明:
  48. * 功能: 从DS1302读取1Byte数据
  49. * 调用:
  50. * 输入:
  51. * 返回值: ACC
  52. ***********************************************************************/
  53. uchar uc_RTOutputByte(void)  
  54. {                             
  55.     uchar i;
  56.     for(i=8; i>0; i--)
  57.     {
  58.          ACC = ACC >>1;       /*相当于汇编中的  RRC  */
  59.          ACC7 = T_IO;
  60. //                 delay(20);       
  61.          T_CLK = 1;
  62. //                 delay(20);       
  63.          T_CLK = 0;
  64. //                 delay(20);       
  65.     }     
  66.     return(ACC);
  67. }
  68. /********************************************************************  
  69. *
  70. * 名称: v_W1302
  71. * 说明: 先写地址,后写命令/数据
  72. * 功能: 往DS1302写入数据
  73. * 调用: v_RTInputByte()
  74. * 输入: ucAddr: DS1302地址, ucDa: 要写的数据
  75. * 返回值: 无
  76. ***********************************************************************/
  77. void  v_W1302(uchar ucAddr, uchar ucDa)
  78. {
  79.     T_RST = 0;
  80. //        delay(20);       
  81.     T_CLK = 0;
  82. //        delay(20);       
  83.     T_RST = 1;
  84. //        delay(20);       
  85.     v_RTInputByte(ucAddr);      /* 地址,命令 */
  86.     v_RTInputByte(ucDa);        /* 写1Byte数据*/
  87.     T_CLK = 1;
  88. //        delay(20);       
  89.     T_RST =0;
  90. //        delay(20);       
  91. }
  92. /********************************************************************  
  93. *
  94. * 名称: uc_R1302
  95. * 说明: 先写地址,后读命令/数据
  96. * 功能: 读取DS1302某地址的数据
  97. * 调用: v_RTInputByte() , uc_RTOutputByte()
  98. * 输入: ucAddr: DS1302地址
  99. * 返回值: ucDa :读取的数据
  100. ***********************************************************************/
  101. uchar  uc_R1302(uchar ucAddr)
  102. {
  103.     uchar ucDa;
  104.     T_RST = 0;
  105. //        delay(20);       
  106.     T_CLK = 0;
  107. //        delay(20);       
  108.     T_RST = 1;
  109. //        delay(20);       
  110.     v_RTInputByte(ucAddr);      /* 地址,命令 */
  111.     ucDa = uc_RTOutputByte();   /* 读1Byte数据 */
  112.     T_CLK = 1;
  113. //        delay(20);       
  114.     T_RST =0;
  115. //        delay(20);       
  116.     return(ucDa);
  117. }
  118. /********************************************************************  
  119. *
  120. * 名称: v_BurstW1302T
  121. * 说明: 先写地址,后写数据(时钟多字节方式)
  122. * 功能: 往DS1302写入时钟数据(多字节方式)
  123. * 调用: v_RTInputByte()
  124. * 输入: pSecDa: 时钟数据地址    格式为: 秒 分 时 日 月 星期 年 控制
  125. *                 8Byte  (BCD码)        1B 1B 1B 1B 1B  1B  1B  1B
  126. * 返回值: 无
  127. ***********************************************************************/
  128. /*void  v_BurstW1302T(uchar *pSecDa)
  129. {
  130.     uchar  i;
  131.     v_W1302(0x8e,0x00);       // 控制命令,WP=0,写操作?
  132.     T_RST = 0;
  133.     T_CLK = 0;
  134.     T_RST = 1;
  135.     v_RTInputByte(0xbe);      // 0xbe:时钟多字节写命令
  136.     for (i=8;i>0;i--)         //8Byte = 7Byte 时钟数据 + 1Byte 控制
  137.     {
  138.         v_RTInputByte(*pSecDa);// 写1Byte数据
  139.         pSecDa++;
  140.     }
  141.     T_CLK = 1;
  142.     T_RST =0;
  143. }                         */
  144. /********************************************************************  
  145. *
  146. * 名称: v_BurstR1302T
  147. * 说明: 先写地址,后读命令/数据(时钟多字节方式)
  148. * 功能: 读取DS1302时钟数据
  149. * 调用: v_RTInputByte() , uc_RTOutputByte()
  150. * 输入: pSecDa: 时钟数据地址          格式为: 秒 分 时 日 月 星期 年
  151. *                       7Byte  (BCD码)        1B 1B 1B 1B 1B  1B  1B
  152. * 返回值: ucDa :读取的数据
  153. ***********************************************************************/
  154. /*void  v_BurstR1302T(uchar *pSecDa)
  155. {
  156.     uchar i;
  157.     T_RST = 0;
  158.     T_CLK = 0;
  159.     T_RST = 1;
  160.     v_RTInputByte(0xbf);      // 0xbf:时钟多字节读命令
  161.     for (i=8; i>0; i--)      
  162.     {
  163.         *pSecDa = uc_RTOutputByte();   // 读1Byte数据
  164.          pSecDa++;
  165.     }
  166.     T_CLK = 1;
  167.     T_RST =0;
  168. }                         */
  169. /********************************************************************  
  170. *
  171. * 名称: v_BurstW1302R
  172. * 说明: 先写地址,后写数据(寄存器多字节方式)
  173. * 功能: 往DS1302寄存器数写入数据(多字节方式)
  174. * 调用: v_RTInputByte()
  175. * 输入: pReDa: 寄存器数据地址
  176. * 返回值: 无
  177. ***********************************************************************/
  178. /*id  v_BurstW1302R(uchar *pReDa)
  179. {
  180.     uchar  i;
  181.     v_W1302(0x8e,0x00);       // 控制命令,WP=0,写操作
  182.     T_RST = 0;
  183.     T_CLK = 0;
  184.     T_RST = 1;
  185.     v_RTInputByte(0xfe);      // 0xbe:时钟多字节写命令
  186.     for (i=31;i>0;i--)        //31Byte  寄存器数据   
  187.     {
  188.         v_RTInputByte(*pReDa);        // 写1Byte数据
  189.         pReDa++;
  190.     }
  191.     T_CLK = 1;
  192.     T_RST =0;
  193. }          */
  194. /********************************************************************  
  195. *
  196. * 名称: uc_BurstR1302R
  197. * 说明: 先写地址,后读命令/数据(寄存器多字节方式)
  198. * 功能: 读取DS1302寄存器数据
  199. * 调用: v_RTInputByte() , uc_RTOutputByte()
  200. * 输入: pReDa: 寄存器数据地址
  201. * 返回值: 无
  202. ***********************************************************************/
  203. /*void  v_BurstR1302R(uchar *pReDa)
  204. {
  205.     uchar i;
  206.     T_RST = 0;
  207.     T_CLK = 0;
  208.     T_RST = 1;
  209.     v_RTInputByte(0xff);      // 0xbf:时钟多字节读命令
  210.     for (i=31; i>0; i--)       //31Byte  寄存器数据   
  211.     {
  212.         *pReDa = uc_RTOutputByte();   //读1Byte数据
  213.          pReDa++;
  214.     }
  215.     T_CLK = 1;
  216.     T_RST =0;
  217. }                                 */

  218. void  Set_Charge(void)  
  219. {
  220.     v_W1302(0x8e,0x00);          /* 控制命令,WP=0,写操作?*/
  221.     v_W1302(0x90,0xaa);          /* 控制命令,WP=0,写操作?*/
  222.     v_W1302(0x8e,0x80);  /* 控制命令,WP=1,写保护?*/
  223.         v_W1302(0x90,0xa5);
  224. }

  225. /********************************************************************  
  226. *
  227. * 名称: v_Set1302
  228. * 说明:
  229. * 功能: 设置初始时间
  230. * 调用: v_W1302()
  231. * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
  232. *                       7Byte  (BCD码)        1B 1B 1B 1B 1B  1B  1B
  233. * 返回值: 无
  234. ***********************************************************************/
  235. void  Set_Time(uchar *pSecDa)  
  236. {
  237.     uchar i;
  238.     uchar ucAddr = 0x80;
  239.    
  240.     v_W1302(0x8e,0x00);          /* 控制命令,WP=0,写操作?*/
  241.     for(i =7;i>0;i--)
  242.     {
  243.         v_W1302(ucAddr,*pSecDa);  /* 秒 分 时 日 月 星期 年 */
  244.    
  245.         pSecDa++;
  246.         ucAddr +=2;
  247.      }
  248.      v_W1302(0x8e,0x80);  /* 控制命令,WP=1,写保护?*/
  249. }
  250. /********************************************************************  
  251. *
  252. * 名称: v_Get1302
  253. * 说明:
  254. * 功能: 读取DS1302当前时间
  255. * 调用: uc_R1302()
  256. * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
  257. *                              7Byte  (BCD码)        1B 1B 1B 1B 1B  1B  1B
  258. * 返回值: 无
  259. ***********************************************************************/
  260. void Read_Time(uchar ucCurtime[])      
  261. {
  262.     uchar  i;
  263.     uchar  ucAddr = 0x81;
  264.     for (i=0;i<7;i++)
  265.     {
  266.          ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
  267.          ucAddr += 2;
  268.     }
  269. }

  270. void Write_RAM(unsigned char *s,unsigned char startbyte,unsigned char length)
  271. {
  272.     uchar i;
  273.     uchar ucAddr;   
  274.    
  275.         ucAddr=0xc0+startbyte*2;

  276.         v_W1302(0x8e,0x00);          /* 控制命令,WP=0,写操作?*/
  277.     for(i =0;i<length;i++)
  278.     {
  279.         v_W1302(ucAddr,*s);
  280.    
  281.         s++;
  282.         ucAddr +=2;
  283.      }
  284.      v_W1302(0x8e,0x80);  /* 控制命令,WP=1,写保护?*/

  285. }

  286. void Read_RAM(unsigned char *s,unsigned char startbyte,unsigned char length)
  287. {
  288.     uchar  i;
  289.     uchar  ucAddr;
  290.        
  291.         ucAddr=0xc1+startbyte*2;
  292.     for (i=0;i<length;i++)
  293.     {
  294.          s[i] = uc_R1302(ucAddr);
  295.          ucAddr += 2;
  296.     }
  297. }

复制代码

作者: longlong899    时间: 2013-10-31 22:54
楼主头像挺帅的,呵呵
作者: jldqc    时间: 2013-11-1 10:30
真的不错,51黑有你更精彩!!
作者: 雨蝶的伤    时间: 2014-1-31 15:53
我想学习一下...可以给我资料吗...386245215@qq.com
作者: liujing    时间: 2014-2-21 16:24
高端上档次!
作者: Hugo801122    时间: 2014-2-22 01:02
牛哦,厉害!
作者: autumn888    时间: 2014-3-7 08:09
好东西,目前正在研究中
作者: zenghl    时间: 2014-4-6 14:23
不错,下了看看。
作者: a651738901    时间: 2014-4-28 22:14
谢谢楼主慷慨,谢谢了
作者: 涟漪    时间: 2014-4-28 22:18
高手啊,我也有几块双色屏改天试试,感谢分享
作者: dyun1988    时间: 2014-5-17 21:02

谢谢分享,借鉴学习学习,顶一个
作者: 周安松    时间: 2014-9-13 06:09
谢谢楼主分享!
作者: xing3198    时间: 2014-9-18 21:39
谢谢分享,借鉴学习学习,顶一个
作者: ljhn431    时间: 2014-9-19 09:14
好靓的东东,可惜我做不出来
作者: liangpin521    时间: 2014-10-13 12:07
谢谢 分享 呵呵  顶你
作者: smsr001    时间: 2015-2-16 14:29
太酷了,先收藏着,以后说不定可以用上,谢谢楼主
作者: 沉浸其中    时间: 2015-6-3 11:34
我期末要做一个点阵屏的作品,下回去看看
作者: yzl    时间: 2015-6-3 14:21
我也想做一个32*64双色点阵时钟制作请指教
作者: 496964453    时间: 2015-6-3 21:34
51hei论坛有你更精彩
作者: stxlpeng    时间: 2015-6-8 09:17
请问楼主,你的屏是啥借口的?
作者: stxlpeng    时间: 2015-6-8 09:17
啥接口
作者: stxlpeng    时间: 2015-6-8 15:27
能把资料发我QQ 625756413@qq.com
作者: amwguh86    时间: 2015-6-20 03:43
支持,
作者: dzljp    时间: 2015-6-20 23:26
收藏了
谢谢楼主的无私奉献
作者: 王红杰    时间: 2015-7-18 13:47
我想做一个给我姐当结婚礼物 ,,楼主,求助你啊 ,全部资料。1410309996@qq.com
作者: 飘摇的棉    时间: 2015-7-19 22:12
看看怎么样
作者: fslgh123    时间: 2015-9-8 17:17
谢谢分享,支持创作
作者: 飞鸟无痕    时间: 2015-10-10 21:14
为什么没有蜂鸣器呢?
作者: 飞鸟无痕    时间: 2015-10-10 21:15
非常好,改天我也做一个。
作者: moose    时间: 2015-10-12 11:48
楼主厉害
作者: wdq2347    时间: 2015-12-20 12:14
高端上档次!
作者: 香蕉1373    时间: 2015-12-20 23:02
求资料 谢谢 邮箱397846891@qq.com
作者: 好伐好伐    时间: 2016-1-21 23:45
谢谢分享,借鉴学习学习,顶一个
作者: 好伐好伐    时间: 2016-2-12 15:02
51黑有你更精彩!!!!!
作者: xsjysm888    时间: 2016-4-16 21:14
不错,加油
作者: 18316719944    时间: 2016-11-30 22:31
家里有块空置的点阵屏,老婆最近需要个时钟,楼主能发控制板原理图和程序给我吗?刚好家里又有STC的芯片
作者: 18316719944    时间: 2016-11-30 22:32
416559076@qq.com
作者: 慕凉秋白    时间: 2016-12-13 18:48
楼主,江湖救急呀!1275203963@qq.com
作者: WQ1310699360    时间: 2017-1-26 18:25
话说调时没按键没红外怎么调的啊?
作者: wsq0387    时间: 2017-1-28 14:13
谢谢楼主的分享!这个绝对要顶!!!
作者: surubu    时间: 2017-3-7 13:45
原理图有没有?
作者: wl020807    时间: 2019-12-25 18:19
楼主你好:有用ds3231芯片做的吗?




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