本帖最后由 sustmol 于 2016-11-29 17:46 编辑
点阵花样显示
采用HC6800-EM3 V3.0开发板,使用STC89C52RC单片机,四片74HC595串行移位寄存器驱动16*16led点阵,软件通过指针查表实现点阵的花样显示。轻松简单实现一些效果,但跟光立方比起来差远了!
1.点阵效果如下图:
2.程序清单如下: (1)控制点阵花样显示函数
- #include
- #include "array.h"
- //--宏定义函数变量--//
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- //--定义SPI要使用的 IO--//
- ***it MOSIO = P3^4;
- ***it R_CLK = P3^5;
- ***it S_CLK = P3^6;
- //--全局函数声明--//
- void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0);
- void main(void)
- {
- int k, i, ms;
- //--定义一个指针数据指向画面--//
- uchar *p[] = {
- tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8,tab9, tab10,
- tab11, tab12, tab13, tab14,tab15,tab16, tab17, tab18,tab19, tab20,
- tab21, tab22, tab23, tab24,tab25,tab26, tab27, tab28,tab29, tab30,
- tab31, tab32, tab33, tab34,tab35,tab36, tab37, tab38,tab39, tab40,
- tab41, tab42, tab43, tab44,tab45,tab46, tab47, tab48,tab49, tab50,
- tab51, tab52, tab53, tab54,tab55,tab56, tab57, tab58,tab59, tab60,
- tab61, tab62, tab63, tab64,tab65,tab66, tab67, tab68,tab69, tab70,
- tab71, tab72, tab73, tab74,tab75,tab76, tab77, tab78,tab79, tab80,
- tab81};
- //显示GO,停留时间较长
- i=0;
- for(ms = 80; ms > 0; ms--)//停留时间较长
- {
- for(k = 0; k < 16; k++)//显示G0图案
- {
- //--因为字模软件取的数组是高电平有效,所以列要取反--//
- HC595SendData(~(*(p[i] + 2*k + 1)),~(*(p[i] + 2*k )),tab0[2*k],tab0[2*k + 1]);
- }
- }
-
- while(1)
- {
- for(i = 1; i < 80; i++)//总共80个画面
- {
- for(ms = 10; ms > 0; ms--)//停留时间较短
- {
- for(k = 0; k < 16; k++)//显示一个画面
- {
-
- HC595SendData(~(*(p[i] + 2*k + 1)),~(*(p[i] + 2*k )),tab0[2*k],tab0[2*k + 1]);
- }
- HC595SendData(0xff,0xff,0,0);//清屏
- }
- }
- }
- }
- /*******************************
- 函 数 名 : HC595SendData
- 函数功能: 通过595发送四个字节的数据
- 输入:
- BT3:第四个595输出数值
- BT2: 第三个595输出数值
- BT1:第二个595输出数值
- BT0:第一个595输出数值
- 输出 : 无
- *******************************/
- void HC595SendData( uchar BT3, uchar BT2,uchar BT1,uchar BT0)
- {
- uchar i;
- //--发送第一个字节--//
- for(i=0;i<8;i++)
- {
- MOSIO = BT3 >> 7 ;//从高位到低位
- BT3 <<= 1;
- S_CLK = 0;
- S_CLK = 1;
- }
- //--发送第一个字节--//
- for(i=0;i<8;i++)
- {
- MOSIO = BT2 >>7;//从高位到低位
- BT2 <<= 1;
- S_CLK = 0;
- S_CLK = 1;
- }
- //--发送第一个字节--//
- for(i=0;i<8;i++)
- {
- MOSIO = BT1 >> 7;//从高位到低位
- BT1 <<= 1;
- S_CLK = 0;
- S_CLK = 1;
- }
- //--发送第一个字节--//
- for(i=0;i<8;i++)
- {
- MOSIO = BT0 >> 7;//从高位到低位
- BT0 <<= 1;
- S_CLK = 0;
- S_CLK = 1;
- }
-
- //--输出--//
- R_CLK = 0; //置低电平
- R_CLK = 1; //片选
- R_CLK = 0; //置低电平
- }
复制代码
(2)点阵图案显示数组
见附件
|