本帖最后由 405616736 于 2020-5-25 23:06 编辑
使用8块8*8双色点阵拼接成32*16点阵屏,使用74HC595驱动点阵,STC12C5A60S2单片机。自己写了一个左移的程序,现分享出来。
绿色显示
点阵层走线
单片机和595
单片机和595走线
PCB图
程序摘要
单片机源程序如下:
- /************************************************
- 设计名词:32*16双色点阵
- 设计时间:2020年5月24日
- 硬件信息:8个8*8双色共阳点阵
- 1个STC12C5A60S2单片机
- 8个74HC595
- *************************************************/
- #include <STC12C5A60S2.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
- #include <intrins.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
- /************************************************
- 数据定义
- *************************************************/
- unsigned char colour=1; //0x01代表红色,0x02代表绿色,0x03代表红&绿色
- unsigned int word=1; //数据位指针
- unsigned int word_temp1=0; //高八位数据暂存
- unsigned int word_temp2=0; //低八位数据暂存
- unsigned char column=1; //列数,最大数32
- unsigned char divisor=1; //列数除8的商,用于控制第几块点阵
- unsigned char remainder=1; //列数除8的余数,用于输出点阵中的第几行
- unsigned int section=0x00; //数据分段输出控制位
- char time=5; //走字速度,可修改
- char time_temp=0; //走字速度暂存
- /************************************************
- 数组
- *************************************************/
- unsigned char segout[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,}; //列扫描数组
- unsigned char code tab[]=
- {
- 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,
- 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,//空白位置
- /*以下文字添加开始*/
- 0x00,0x00,0x0C,0x18,0x10,0x04,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,//3
- 0x00,0x00,0x00,0x00,//空白位置
- 0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x10,0x84,0x0F,0x0C,//2
- 0x00,0x00,0x00,0x00,//空白位置
- 0x10,0x10,0x08,0x20,0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x40,0x08,0x20,0x10,0x10,//×
- 0x00,0x00,0x00,0x00,//空白位置
- 0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,//1
- 0x00,0x00,0x00,0x00,//空白位置
- 0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x09,0x04,0x00,0xF8,//6
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//双
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//色
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//点
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//阵
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//测
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//试
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//程
- 0x00,0x00,0x00,0x00,//空白位置
- 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,//序
- 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,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,0x00,0x00,0x00,0x00,//空白位置
- 0xBB,//结束码
- };
- /*************************************************
- 硬件端口定义,按硬件修改
- *************************************************/
- sbit SER_GREEN=P2^0; //DS 第14脚 串行数据输入
- sbit SRCLK_GREEN=P2^1; //SH_CP 第11脚 数据输入时钟线
- sbit SER_RED=P2^2; //DS 第14脚 串行数据输入
- sbit SRCLK_RED=P2^3; //SH_CP 第11脚 数据输入时钟线
- sbit SER_COLUMN=P2^4; //DS 第14脚 串行数据输入
- sbit SRCLK_COLUMN=P2^5; //SH_CP 第11脚 数据输入时钟线
- sbit LATCH=P2^6; //ST_CP 第12脚 输出存储器锁存时钟线
- sbit OE=P2^7; //OE 第13脚 输出有效,低电平有效
- /*************************************************
- 延时程序,1T模式单片机延时1ms,12MHZ
- *************************************************/
- void DelayXus(unsigned char n)
- {
- while (n--)
- {
- _nop_();
- _nop_();
- }
- }
- /*************************************************
- 发送绿色字节程序
- *************************************************/
- void SendByte_Green(unsigned char dat) //低电平有效
- {
- unsigned char i;
- for(i=1;i<=8;i++)
- {
- dat<<=1; //即dat=dat<<1;,将dat变量左移1位后的值赋给dat,结果会改变dat变量的值
- SER_GREEN=CY; //CY:进位标志
- SRCLK_GREEN=0; //数据输入时钟线置0
- _nop_(); //空指令
- _nop_(); //空指令
- SRCLK_GREEN=1; //数据输入时钟线置1,给上升沿
- }
- }
- /*************************************************
- 发送红色字节程序
- *************************************************/
- void SendByte_Red(unsigned char dat) //低电平有效
- {
- unsigned char i;
- for(i=1;i<=8;i++)
- {
- dat<<=1; //即dat=dat<<1;,将dat变量左移1位后的值赋给dat,结果会改变dat变量的值
- SER_RED=CY; //CY:进位标志
- SRCLK_RED=0; //数据输入时钟线置0
- _nop_(); //空指令
- _nop_(); //空指令
- SRCLK_RED=1; //数据输入时钟线置1,给上升沿
- }
- }
复制代码
以上程序51hei提供打包下载:
C.zip
(2.8 KB, 下载次数: 18)
|