普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 4215|回复: 1

求助

 关闭 [复制链接]

1

主题

1

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2018-1-17 16:49:26 | 显示全部楼层 |阅读模式
3.0的板子怎么实现led点阵的移动
回复

使用道具 举报

4

主题

36

帖子

103

积分

注册会员

Rank: 2

积分
103
发表于 2018-1-20 22:41:15 | 显示全部楼层
这个程序,是普中HC800-EM3-V3.0板子的16*16点阵显示汉字,且向上移动的例程,你看看吧。
/*******************************************************************************
*                 
*                                        普中科技
--------------------------------------------------------------------------------
* 实 验 名                 : 汉字移动显示
* 实验说明       :
* 连接方式       : 见接线图
* 注    意                 :
*******************************************************************************/

#include <REG51.H>
#include <intrins.h>
#include "array.h"

//--重定义函数变量--//
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long

//--定义SPI要使用的 IO--//
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;

//--全局函数声明--//
void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0);
                                                                                                                                                                                       
/*******************************************************************************
* 函 数 名         : main
* 函数功能                   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void main(void)
{   
        int k, j, ms;
        
        //--定义一个指针数组指向每个汉字--//
        uchar *p[] =
                    {tab17, tab1, tab2, tab3, tab4, tab5, tab6, tab7, tab8,
                     tab9, tab10, tab11, tab12, tab13, tab14, tab15, tab16};                                                
        while(1)
        {

                for(ms = 20; ms > 0; ms--)        //移动定格时间设置
                {
                        for(k = 0; k < 16; k++)        //显示一个字
                        {                                                         
                                HC595SendData(~(*(p[0] + 2*(k+j) + 1)),~(*(p[0] + 2*(k+j) )),tab0[2*k],tab0[2*k + 1]); //因为字模软件取的数组是高电平有效,所以列要取反                    
                        }
                        
                        //--清屏--//
                        HC595SendData(0xff,0xff,0,0);                                                                                   //清屏                 
                }

               
                j++;
                if(j == (17*15) )
                {
                        j = 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; //set dataline low
        R_CLK = 1; //片选
        R_CLK = 0; //set dataline low
}
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-26 18:10 , Processed in 0.099815 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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