怎么把74hc595驱动16*16点阵纵向移动改为左移

2019-07-15 13:21发布


#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
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。