找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 450|回复: 2
收起左侧

32*16双色点阵制作 附单片机程序

[复制链接]
405616736 发表于 2020-5-25 18:58 | 显示全部楼层 |阅读模式
本帖最后由 405616736 于 2020-5-25 23:06 编辑

使用8块8*8双色点阵拼接成32*16点阵屏,使用74HC595驱动点阵,STC12C5A60S2单片机。自己写了一个左移的程序,现分享出来。
1.jpg

绿色显示

绿色显示

点阵层走线

点阵层走线

单片机和595

单片机和595

单片机和595走线

单片机和595走线

PCB图

PCB图

程序摘要

程序摘要


单片机源程序如下:
  1. /************************************************
  2.                 设计名词:32*16双色点阵
  3.                 设计时间:2020年5月24日
  4.                 硬件信息:8个8*8双色共阳点阵
  5.                                                         1个STC12C5A60S2单片机
  6.                                                         8个74HC595
  7. *************************************************/
  8. #include <STC12C5A60S2.h>                //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  9. #include <intrins.h>                //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

  10. /************************************************
  11.                 数据定义
  12. *************************************************/
  13. unsigned char colour=1;                //0x01代表红色,0x02代表绿色,0x03代表红&绿色

  14. unsigned int word=1;                //数据位指针
  15. unsigned int word_temp1=0;                //高八位数据暂存
  16. unsigned int word_temp2=0;                //低八位数据暂存

  17. unsigned char column=1;                //列数,最大数32
  18. unsigned char divisor=1;                //列数除8的商,用于控制第几块点阵
  19. unsigned char remainder=1;                //列数除8的余数,用于输出点阵中的第几行

  20. unsigned int section=0x00;                //数据分段输出控制位

  21. char time=5;                //走字速度,可修改
  22. char time_temp=0;                //走字速度暂存

  23. /************************************************
  24.                 数组
  25. *************************************************/
  26. unsigned char segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; //列扫描数组

  27. unsigned char code tab[]=
  28. {
  29. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  30. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//空白位置
  31. /*以下文字添加开始*/        
  32. 0x00,0x00,0x0C,0x18,0x10,0x04,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,//3
  33. 0x00,0x00,0x00,0x00,//空白位置
  34. 0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x10,0x84,0x0F,0x0C,//2
  35. 0x00,0x00,0x00,0x00,//空白位置
  36. 0x10,0x10,0x08,0x20,0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x10,0x10,//×
  37. 0x00,0x00,0x00,0x00,//空白位置
  38. 0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,//1
  39. 0x00,0x00,0x00,0x00,//空白位置
  40. 0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x09,0x04,0x00,0xF8,//6
  41. 0x00,0x00,0x00,0x00,//空白位置
  42. 0x20,0x02,0x2C,0x0C,0x23,0x30,0x20,0xC0,0x23,0x30,0x3C,0x0C,0x00,0x01,0x20,0x02,0x3F,0x04,0x20,0xC8,0x20,0x30,0x20,0xC8,0x23,0x04,0x3C,0x02,0x00,0x01,//双
  43. 0x00,0x00,0x00,0x00,//空白位置
  44. 0x04,0x00,0x08,0x00,0x17,0xFC,0x24,0x42,0xE4,0x42,0x24,0x42,0x24,0x42,0x27,0xC2,0x24,0x42,0x2C,0x42,0x34,0x42,0x04,0x42,0x07,0xC2,0x00,0x02,0x00,0x1E,//色
  45. 0x00,0x00,0x00,0x00,//空白位置
  46. 0x00,0x01,0x00,0x02,0x03,0xEC,0x02,0x20,0x02,0x20,0x02,0x28,0xFE,0x26,0x12,0x20,0x12,0x28,0x12,0x26,0x12,0x20,0x13,0xE0,0x10,0x08,0x10,0x07,//点
  47. 0x00,0x00,0x00,0x00,//空白位置
  48. 0x7F,0xFF,0x40,0x10,0x44,0x08,0x5B,0x10,0x60,0xE0,0x10,0x10,0x13,0x10,0x1D,0x10,0xF1,0x10,0x17,0xFF,0x11,0x10,0x11,0x10,0x11,0x10,0x10,0x10,//阵
  49. 0x00,0x00,0x00,0x00,//空白位置
  50. 0x08,0x20,0x06,0x20,0x40,0x7E,0x31,0x80,0x00,0x01,0x7F,0xE2,0x40,0x0C,0x4F,0xF0,0x40,0x08,0x7F,0xE4,0x00,0x00,0x1F,0xE2,0x00,0x01,0xFF,0xFE,//测
  51. 0x00,0x00,0x00,0x00,//空白位置
  52. 0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x08,0x09,0x14,0x09,0x06,0x09,0xFC,0x09,0x08,0x09,0x08,0xFF,0x80,0x08,0x70,0x88,0x0C,0x68,0x02,0x08,0x0F,//试
  53. 0x00,0x00,0x00,0x00,//空白位置
  54. 0x24,0x10,0x24,0x60,0x25,0x80,0x7F,0xFF,0xC4,0x80,0x44,0x60,0x00,0x02,0x7C,0x92,0x44,0x92,0x44,0x92,0x44,0xFE,0x44,0x92,0x44,0x92,0x7C,0x92,0x00,0x82,//程
  55. 0x00,0x00,0x00,0x00,//空白位置
  56. 0x00,0x02,0x00,0x0C,0x3F,0xF0,0x20,0x00,0x20,0x80,0x20,0x80,0x28,0x80,0xA8,0x82,0x6A,0x81,0x29,0xFE,0x2A,0x80,0x2C,0x80,0x28,0x80,0x20,0xA0,0x20,0xC0,//序
  57. 0x00,0x00,0x00,0x00,//空白位置
  58. /*以上文字添加结束*/        
  59. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  60. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//空白位置
  61. 0xBB,//结束码
  62. };

  63. /*************************************************
  64.                 硬件端口定义,按硬件修改
  65. *************************************************/
  66. sbit SER_GREEN=P2^0;                //DS 第14脚 串行数据输入
  67. sbit SRCLK_GREEN=P2^1;                //SH_CP        第11脚 数据输入时钟线
  68. sbit SER_RED=P2^2;                //DS 第14脚 串行数据输入
  69. sbit SRCLK_RED=P2^3;                //SH_CP        第11脚 数据输入时钟线
  70. sbit SER_COLUMN=P2^4;                //DS 第14脚 串行数据输入
  71. sbit SRCLK_COLUMN=P2^5;                //SH_CP        第11脚 数据输入时钟线
  72. sbit LATCH=P2^6;                //ST_CP        第12脚 输出存储器锁存时钟线
  73. sbit OE=P2^7;                //OE 第13脚 输出有效,低电平有效

  74. /*************************************************
  75.                 延时程序,1T模式单片机延时1ms,12MHZ
  76. *************************************************/
  77. void DelayXus(unsigned char n)
  78.         {
  79.                 while (n--)
  80.                         {
  81.                                 _nop_();
  82.                                 _nop_();
  83.                         }
  84.         }

  85. /*************************************************
  86.                 发送绿色字节程序
  87. *************************************************/
  88. void SendByte_Green(unsigned char dat)                //低电平有效
  89.         {
  90.                 unsigned char i;
  91.                 for(i=1;i<=8;i++)
  92.                 {        
  93.                         dat<<=1;                //即dat=dat<<1;,将dat变量左移1位后的值赋给dat,结果会改变dat变量的值
  94.                         SER_GREEN=CY;                //CY:进位标志
  95.                         SRCLK_GREEN=0;                //数据输入时钟线置0
  96.                         _nop_();                //空指令
  97.                         _nop_();                //空指令
  98.                         SRCLK_GREEN=1;                //数据输入时钟线置1,给上升沿
  99.                 }        
  100.         }

  101. /*************************************************
  102.                 发送红色字节程序
  103. *************************************************/
  104. void SendByte_Red(unsigned char dat)                //低电平有效
  105.         {
  106.                 unsigned char i;
  107.                 for(i=1;i<=8;i++)
  108.                 {
  109.                         dat<<=1;                //即dat=dat<<1;,将dat变量左移1位后的值赋给dat,结果会改变dat变量的值
  110.                         SER_RED=CY;                //CY:进位标志
  111.                         SRCLK_RED=0;                //数据输入时钟线置0
  112.                         _nop_();                //空指令
  113.                         _nop_();                //空指令                        
  114.                         SRCLK_RED=1;                //数据输入时钟线置1,给上升沿
  115.                 }        
  116.         }

复制代码

以上程序51hei提供打包下载:
C.zip (2.8 KB, 下载次数: 7)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

51hei团团 发表于 2020-5-25 20:28 | 显示全部楼层
好东东  能分享一下原理图吗?
回复

使用道具 举报

 楼主| 405616736 发表于 2020-5-25 23:04 | 显示全部楼层
51hei团团 发表于 2020-5-25 20:28
好东东  能分享一下原理图吗?

原理图我没有画了,程序文件表头有写595的连接引脚的,PCB图也可以参考一下引脚连接
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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