单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3822|回复: 21
收起左侧

16*64双色点阵屏与控制卡制作说明资料(单片机源码+电路图)

  [复制链接]
云海悠悠 发表于 2018-2-20 15:52 | 显示全部楼层 |阅读模式
喜欢研究点阵的朋友可以看下
DIY 16*64双色点阵,采用3.75MM的双色点阵模块设计,模块与模块的距离合适,间隔不大,不会影响显示效果,PCB做工好,长303MM,宽75MM。
   提供多种学习程序,足够玩转16*64双色点阵,从初级到中级到高级程序设计学习。从设计到整理完资料,几个人花了一个多月的时间,认真做好教程,绝非网上乱抄袭,都是经过我们测试好,注释好以及说明好接口让每一位爱好者都能轻松学习控制点阵,从中学到知识。



16X64点阵屏与控制卡的电路原理图:
0.jpg

压缩包里面有清晰大图(ad格式):
0.png

整套材料有:
下面介绍制作过程中的顺序以及常见问题分析:
焊接顺序
一.先焊接PCB背面的输入 输出双列8P排针,不然焊了点阵模块,排针就不好焊接了。背面的1K*4电阻4个无需焊接。如果需要上螺丝也在此时放螺丝。
二.然后放置8*8双色点阵模块,如下图这样放置,有字的朝下,或者看中间的缺口,突出的朝下。这模块不是很容易放置,注意每个管脚都不要弯曲,且管脚的距离要合适,这样放置起来不会这么吃力。
三.焊接PCB正面的芯片了,这个比较容易,虽然是贴片的,但是管脚间距都比较大,容易焊接,初学者都不必担心,另外板上的电容也不需要焊接。焊接上去就是电源滤波 芯片工作稳定一点。芯片的第一脚注意就可以了,芯片上有个点的就是第一个脚,焊盘上也是如此,焊接时看清楚,芯片都朝一个方向,比较容易看出。
四.东西都焊接好后,检查下芯片有无虚焊,点阵管脚有无虚焊,这个错误很容易犯。也可用测试程序看出来。PCB上的元件名称都标的非常清楚,很容易对号入座。
常见问题分析
1.焊接完成后,与控制卡连接,或者用自己的单片机实验板,连接方法见程序说明。每个程序都有接口说明,方便大家学习测试用。
2.如果发现哪行不亮 或者列 不亮 一般是芯片虚焊,芯片焊接正常一般不会有问题。
恭喜制作成功后,好好玩转提供的源程序吧,里面的程序注视比较多,我们花了很多心血去整理调试加注视的,相信对你学习控制点阵有帮助,如果有能力整理出来可以做一个商业化的程序了。
最后祝大家制作成功,享受DIY带来的乐趣。

点阵屏的单片机源程序如下:
  1. /***************************************************************
  2.       16*64 双色点阵 移动显示时间+静态切换时间 程序
  3. /***************************************************************
  4. 如果有控制卡,下载此程序插上排线即可测试
  5. 如果没有控制卡,自己根据下面的接口用杜邦线与点阵连接即可测试
  6. 单片机:STC12C5A32S2 或者其他12系列型号都可以
  7. 晶振18.432M        
  8. 功能简介:上电显示“精品制”
  9. 然后切换显示时间 星期 月日 年 再移动显示时间信息
  10. 4个按键 分别进行调时设置
  11. 程序用中断扫描法 驱动点阵 程序参考价值较好!
  12. /*
  13. 点阵屏管脚定义
  14. SHCP   GND
  15. STCP   GND
  16. R1     GND
  17. G1     GND
  18. VCC    GND
  19. A      GND
  20. B      GND
  21. C      D
  22. */
  23. /*
  24. 控制卡
  25. P0.0~P0.3   A B C D
  26. P16 SCK
  27. P17 STR
  28. R1 P04
  29. G1 P05
  30. R2 P06
  31. G2 P07

  32. ********************************************************/
  33. #include "Type.H"
  34. #define  KG 0                                  //定义空格数
  35. #define  RI 10                                  //定义日数
  36. #define  JI 25                                  //定义节数
  37. #define  GT 163                                  //定!   数
  38. #define  XI 109                              //定★  数
  39. /*******键盘***********************************************************************/
  40. sbit     KEY1    = P2^0;
  41. sbit     KEY2    = P2^1;
  42. sbit     KEY3    = P2^2;
  43. sbit     KEY4    = P2^3;
  44. sbit     ADCIO   =P1^5;  //AD
  45. /*************************************************************************************/
  46. #define H_PORT P0 //行138信号          scan
  47. sbit CK  =P1^6;  //时钟OUT
  48. sbit STR =P1^7;  //锁存上升沿输出锁存
  49. sbit R1  =P0^4;  //屏红数据
  50. sbit G1  =P0^5;  //屏绿数据
  51. sbit OE  =P1^0;  //全屏使能
  52. sbit IA  =P0^0;  //行控制线A
  53. sbit IB  =P0^1;  //行控制线B
  54. sbit IC  =P0^2;  //行控制线C
  55. sbit ID  =P0^3;  //行控制线D
  56. /*********************************************************************************/
  57. #define  scan0    {IA=0;IB=0;IC=0;ID=0;}
  58. #define  scan1    {IA=1;IB=0;IC=0;ID=0;}
  59. #define  scan2    {IA=0;IB=1;IC=0;ID=0;}
  60. #define  scan3    {IA=1;IB=1;IC=0;ID=0;}
  61. #define  scan4    {IA=0;IB=0;IC=1;ID=0;}
  62. #define  scan5    {IA=1;IB=0;IC=1;ID=0;}
  63. #define  scan6    {IA=0;IB=1;IC=1;ID=0;}
  64. #define  scan7    {IA=1;IB=1;IC=1;ID=0;}
  65. #define  scan8    {IA=0;IB=0;IC=0;ID=1;}
  66. #define  scan9    {IA=1;IB=0;IC=0;ID=1;}
  67. #define scan10    {IA=0;IB=1;IC=0;ID=1;}
  68. #define scan11    {IA=1;IB=1;IC=0;ID=1;}
  69. #define scan12    {IA=0;IB=0;IC=1;ID=1;}
  70. #define scan13    {IA=1;IB=0;IC=1;ID=1;}
  71. #define scan14    {IA=0;IB=1;IC=1;ID=1;}
  72. #define scan15    {IA=1;IB=1;IC=1;ID=1;}
  73. /*定义接口****************************************************************************/
  74. #define HC595_LOCK_H    {STR  =1;}
  75. #define HC595_LOCK_L    {STR  =0;}
  76. #define HC595_CLK_H     {CK   =1;}
  77. #define HC595_CLK_L     {CK   =0;}
  78. #define LS138_A_H       {IA   =1;}
  79. #define LS138_A_L       {IA   =0;}
  80. #define LS138_B_H       {IB   =1;}
  81. #define LS138_B_L       {IB   =0;}
  82. #define LS138_C_H       {IC   =1;}
  83. #define LS138_C_L       {IC   =0;}
  84. #define LS138_D_H       {ID   =1;}
  85. #define LS138_D_L       {ID   =0;}
  86. #define LS138_OE_H      {OE   =1;}
  87. #define LS138_OE_L      {OE   =0;}
  88. #define HC595_G_H       {G1   =1;}
  89. #define HC595_G_L       {G1   =0;}
  90. #define HC595_R_H       {R1   =1;}
  91. #define HC595_R_L       {R1   =0;}
  92. #define FESTIVAL_MAX 69                                    //定义阳历节日数(0----68)

  93. uchar  disp_mode=0xFF;
  94. /************************************************************
  95. //DS1302时钟定义全局变量
  96. /**********公历年,月,日,星期,小时,分钟,秒********************************/
  97. uchar xdata  yy, mo, dd, week,  hh,  mm,   ss;
  98. /*************农历年,      月,      日,*************************************/
  99. uchar xdata  year_moon,month_moon,day_moon;
  100. /*************************************************************************************/
  101. /*涵数声明****************************************************************************/
  102. void LEDinit();                  /*************************************清屏*/
  103. void DELAY_US(int num);          /*************************************延时函数*/
  104. void Beep_key(void);             /*************************************喇叭函数*/
  105. void DS1302_TimeStop(bit flag);  /*************************************喇叭函数*/
  106. void PWM_LIGHT(uint p);                          /*************************************亮度控制*/
  107. void intmcu( );                  /*************************************中断和定时器初始化*/
  108. //void Lintmcu(void);                          /*************************************广告一*/
  109. //void Lintmcu2(void);                          /*************************************广告一*/
  110. void LED16X64_write(uchar  *str,uchar yanse,bit color);/*******************直写汉字*/
  111. void LED_rectangle_erasure(uchar x1,uchar y1,uchar x2,uchar y2,uchar model);/*搽除距形*/
  112. void Conver_week(void);          /***************************************星计算*/
  113. //void Conversion(void);        /******************************************历计算*/
  114. BYTE  ManageButton(BYTE  Vale);          /**************************************按键处理*/
  115. uchar xdata LED_RAM[LED_byte];    /**************************************显示缓冲区*/
  116. //*********************************************************************************
  117. INxdata naozhongtime;                  //闹钟记时
  118. Uxdata MOVingDAT[]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,12,12,12};   //(游动的字)时段设置
  119. Uxdata ShowDAT[6];                          //固定显示
  120. //Uxdata SHENGRI_DATA[18];      //六组生日数据
  121. Uxdata shengRi;               //生日

  122. //***************************************
  123. uint xdata HalfCount;                          //半秒记数
  124. uint xdata b;                      //闪烁控制
  125. uint xdata Light;                  //亮度
  126. uchar disrow=0 ;              //当前扫描行
  127. uchar  e;                     //操作变量
  128. uchar ADJ;                    //按键变量
  129. uchar switc;                  //画面切换变量
  130. uchar windw;                  //显示允许变量
  131. uchar flow;                   //边框流动变量
  132. uchar menu;                   //当前菜单0自动1调年月日2调时分秒星期
  133. uchar LED_X,LED_Y;            //LED横竖坐标变量(用于颠倒显示)
  134. uchar Menmu;                  //显示控制
  135. //***************************************
  136. BIT   LEDup_dow;              //LED颠倒显示标记1正显示0倒显示
  137. BIT   twinkle;                 //调整闪烁标记
  138. BIT   Run_flay;                                  //润年标记
  139. BIT   IR_OK=0;                                  //红外线接收标记
  140. BIT   Set_bit=0;                          //设置时间标记
  141. BIT   GUn_bit=0;                          //滚动标记
  142. BIT   CKTIME_1=0;                          //校时标记
  143. BIT   jieqi_bit=0;             //有无节气标记
  144. BIT   NO_flow;                 // 取消边框
  145. bit   stop_bit=0;                 // (流动停止标志)
  146. /**********自定义头文件*****************************/
  147. #include "LED_drive.h"        //加载LED扫描驱动
  148. #include "ASCII.h"            //加载自定义字模
  149. #include "DS1302.h"           //加载DS1302驱动
  150. //#include "DHT11.h"            //温湿度传感器
  151. //#include "nongli.h"           //加载农历计算程序
  152. #include "LED_display.h"      //加载显示控制程序
  153. #include "NEC+RC5_IR.h"       //遥控头文件(HT6621或TC9012)
  154. #include "key_adjust.h"       //加载按键输入调节程序
  155. //***********************************************************************
  156. void write_sec(void)
  157. {
  158.     uchar aa;
  159.     read_clockS();//读出DS1302所有时间数据
  160.     if((Menmu>=  0)&&(Menmu<= 50))
  161.     switc=0;    //0-50显示//年月
  162.     if((Menmu>= 50)&&(Menmu<= 60))
  163.     switc=1;    //50-60显示月日
  164.     if((Menmu>= 60)&&(Menmu<= 70))
  165.     switc=2;    //60-70显示时分秒
  166.     if((Menmu>= 70)&&(Menmu<= 100))
  167.     switc=3;    //70-80显示星期
  168. //    if((Menmu>= 80)&&(Menmu<= 90))
  169. //    switc=4;    //40-59显示农历
  170. //    if((Menmu>= 90)&&(Menmu<=100))
  171. //    switc=5;    //40-59显示生宵
  172. //    if((Menmu>=110)&&(Menmu<=120))
  173. //    switc=6;    //40-59显示温度
  174. //    if((Menmu>=120)&&(Menmu<=130))
  175. //    switc=7;    //40-59显示湿度
  176. //    if((Menmu>=130)&&(Menmu<=140))
  177. //    switc=8;    //40-59显示生日滚动
  178. //    if((Menmu>=140)&&(Menmu<=160))
  179. //    switc=9;    //40-59显示//温度
  180.     if((aa!=ss)&&(switc==0))//在时分秒星期界面时每秒显示刷新一次秒值
  181.     {
  182.         aa=ss;
  183.       //  if(LEDup_dow)   //***************************正向显示
  184.       //  {
  185.             LED_8X16_write(17,16,ss/10+48,Red,1);//刷新秒十位显示
  186.             LED_8X16_write( 9,16,ss%10+48,Red,1);//刷新秒个位显示
  187.                 LED_write_english_string(47,16,":" ,Red,Noml);//写8X16字符冒号
  188.             LED_write_english_string(24,16,":", Red,Noml);//写8X16字符冒号
  189.        // }
  190.        // else
  191.        // {
  192.         //    LED_8X16_write(47,1,ss/10+48,Orgen,1);//刷新秒十位显示
  193.         //    LED_8X16_write(55,1,ss%10+48,Orgen,1);//刷新秒个位显示
  194.        // }
  195.     }
  196.     if((ss=59)&&(switc==0))//在时分秒星期界面时每秒显示刷新一次秒值
  197.     {
  198.        // if(LEDup_dow)
  199.         //{
  200.             LED_8X16_write(40,16,mm/10+48,    Red,Noml);//写8X16字符分钟十位
  201.             LED_8X16_write(32,16,mm%10+48,    Red,Noml);//写8X16字符分钟个位
  202.             LED_8X16_write(63,16,hh/10+48,    Red,Noml);//写8X16字符小时十位
  203.             LED_8X16_write(55,16,hh%10+48,    Red,Noml);//写8X16字符小时个位
  204.        // }
  205.        // else
  206.        // {
  207.         //    LED_8X16_write(24,1,mm/10+48,     Green,Noml);//写8X16字符分钟十位
  208.         //    LED_8X16_write(32,1,mm%10+48,     Green,Noml);//写8X16字符分钟个位
  209.         //    LED_8X16_write(1, 1,hh/10+48,     Red,Noml);//写8X16字符小时十位
  210.         //    LED_8X16_write(9, 1,hh%10+48,     Red,Noml);//写8X16字符小时个位
  211.        // }
  212.     }
  213. }
  214. /*********************************************************************************************
  215. 函数名:intmcu()
  216. 调  用:定时和外中断初始化涵数
  217. 参  数:无
  218. 返回值:无
  219. 结  果:
  220. 备  注:
  221. /**********************************************************************************************/
  222. void intmcu()
  223. {
  224.     TH1=TH;                 //16位计数寄存器T1高8位定时器T1初值
  225.     TL1=TL;                 //16位计数寄存器T1低8位定时器T1初值
  226. //**************************************
  227. //IP-x x pt2 ps pt1 px1 pt0 px0*/
  228.     IP  =B(00000011);  //外中断0优先用于红外遥控
  229. //**************************************
  230. //TCON-TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0*/
  231.     TCON=B(01010001);//IT0下降沿触发INT0.(IT0=0为低电平触发)TR1扫描点阵
  232. //**************************************
  233. //TMOD-GATE1 C/T M1 M0 GATE0 C/T M1 M0
  234.     TMOD=B(00010010);//定时器01模式1(16位)
  235. //**************************************
  236. //IE-EA X ET2 ES ET1 EX1 ET0 EX0
  237.     IE  =B(10001011); //总中断定时中断01和外中断0
  238. //**************************************
  239. }


  240. void Play_show(void)        {

  241.   switch(switc)  {
  242.             case 0:if(windw==0)four_min_sec  ();windw=1;break;//时分秒
  243.             case 1:if(windw==1)year_month    ();windw=2;break;//年月
  244.             case 2:if(windw==2)month_day     ();windw=3;break;//月日
  245.             case 3:if(windw==3){LEDinit       ();NYRLoad();Hz_LeftDispla(0);}windw=0;break; //汉字左移动程序w//星期
  246. //            case 4:if(windw==4)nongli_display();windw=5;break;//农历

  247.                  }
  248.             write_sec ();//----------------------------------显示切换和秒更新
  249.             //flow_frame();//----------------------------------流水边框
  250.                          }

  251. void Play_INT(void)        {

  252.     LED_rectangle_erasure(1,1,64,16,0);//空白填充矩形框
  253.     intmcu                      ();//初始化单片机中断和定时器中断初始化
  254.     Light=BCD2DEC(read_clock(10,TempCH_NumLIGHT))*13;
  255.         if(Light<80)
  256.         write_1302clock(TempCH_NumLIGHT,15);
  257.         Light=BCD2DEC(read_clock(10,TempCH_NumLIGHT))*13;
  258.     typewrite       ();//打字效果"精品制作“
  259.     //任意按键跳过LOGO进入频谱=========================
  260.     /*-----频谱显示--------*/

  261.               // NYRLoad      (); //汉字加载今天是2012年01月08日星期三
  262.               //Hz_LeftDispla(1); //汉字左移动程序
  263.         //Picture16X64(Pic64X16Y3IN);   //--------------------------图片
  264.          
  265.     LEDinit       ();//***************************************内存清屏
  266. }
  267. /**********************************************************************************************/
  268. void main(void)
  269. {           
  270.     DS1302_Initial  ();//1302初始化
  271.     //Read_temperature();//读温度
  272.     read_clockS     ();//读1302时间
  273.     Beep_set        ();//测试喇叭
  274.     Beep_key        ();//测试喇叭
  275.         intmcu();
  276.     LEDinit         ();//开中断前先清屏防止乱显
  277.         Play_INT                ();//初始化数据
  278.         //Lintmcu(); Lintmcu2();
  279.     while(1)
  280.     {        
  281.         TimeCHck    ();  //--------------------------------时间补偿
  282.         KEY_Process ();  //--------------------------------按键操作
  283.         KEY_Manage  ();  //--------------------------------按键执行
  284.                 if(menu==0)
  285.         Play_show();
  286. ……………………

  287. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
包含以下源码与资料:
16X64点阵屏与控制卡原理图
PC2002取模软件

中级--16x64点阵万年历c
中级--点阵多种移动模式
初级--汇编 点阵16X(16-32-64-128-256)asm
初级--静态显示程序
测试--左移测试程序
测试--逐行点亮测试
高级--16分频与64分频16X64双色点阵频谱程序
高级--点阵上位机软件与下位机程序
高级--点阵多模式显示时间程序
高级-移动显示时间+静态切换显示时间


16X64双色点阵制作说明V1.0.doc

芯片资料

0.png

所有资料51hei提供下载:
16X64点阵资料.rar (7.95 MB, 下载次数: 272)

评分

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

查看全部评分

回复

使用道具 举报

937166474 发表于 2018-5-9 21:13 | 显示全部楼层
下载学习一波,
回复

使用道具 举报

ab560 发表于 2018-5-10 08:15 | 显示全部楼层
学习学习,谢谢楼主分享
回复

使用道具 举报

abin8888 发表于 2018-6-20 15:33 | 显示全部楼层
下载学习一下,谢谢楼主分享
回复

使用道具 举报

23390052libin 发表于 2018-7-24 23:32 | 显示全部楼层
下载看了,非常有用,先学习一下,谢谢分享!
回复

使用道具 举报

lzhiaohiua 发表于 2018-8-1 11:19 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

hacehi 发表于 2018-8-10 23:57 | 显示全部楼层
谢谢,非常感谢
回复

使用道具 举报

fixhk 发表于 2018-11-15 23:02 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

1900千九 发表于 2018-11-24 18:46 | 显示全部楼层

能不能分享一下楼主的资料
回复

使用道具 举报

234qwazxcv 发表于 2018-11-28 10:53 | 显示全部楼层
下载了不会用
回复

使用道具 举报

234qwazxcv 发表于 2018-11-28 10:54 | 显示全部楼层
下载了不会用
回复

使用道具 举报

zhoujilu 发表于 2018-12-4 00:40 | 显示全部楼层
为啥我的黑币被扣了,却没有提示下载????
回复

使用道具 举报

yuren1984 发表于 2018-12-14 05:03 来自手机 | 显示全部楼层
找这资料好辛苦,感谢楼主的分享,不知道资料是否有上位机软件直接可以
回复

使用道具 举报

快乐眼泪 发表于 2018-12-14 11:35 来自手机 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

lifeng5478 发表于 2019-1-4 15:31 | 显示全部楼层
感谢楼主分享!必须赞一个!!
回复

使用道具 举报

IMeng 发表于 2019-1-10 16:16 | 显示全部楼层
支持楼主的教程
回复

使用道具 举报

slaoliu 发表于 2019-1-21 15:15 | 显示全部楼层
十分感谢分享,
回复

使用道具 举报

qxdqx 发表于 2019-3-2 07:33 | 显示全部楼层
太好啦!谢谢分享。
回复

使用道具 举报

xchunfeng 发表于 2019-3-8 09:50 | 显示全部楼层
谢谢楼主。
回复

使用道具 举报

my6511 发表于 2019-4-21 18:23 | 显示全部楼层

先学习一下,谢谢分享!
回复

使用道具 举报

dringsing 发表于 2019-5-6 15:16 | 显示全部楼层
谢谢!学习一下
回复

使用道具 举报

蓝旗 发表于 2019-5-16 15:30 | 显示全部楼层
非常好!
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛5群 联系QQ:125739409;技术交流QQ群174280738

Powered by 单片机教程网

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