找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5092|回复: 5
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:132987 发表于 2016-7-25 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:7485 发表于 2016-7-26 16:28 | 只看该作者
首先你的字模必须是从左至右按列取模(上半部和下半部 各从左至右16列),左起第一列上,左起第一列下、左起第二列上,左起第二列下、左起第三列上,左起第三列下......的顺序取模。
其次你要将16*16点阵转90度用,如不能转,就必须改电路了。
回复

使用道具 举报

板凳
ID:132987 发表于 2016-7-27 08:57 | 只看该作者
ahshmj 发表于 2016-7-26 16:28
首先你的字模必须是从左至右按列取模(上半部和下半部 各从左至右16列),左起第一列上,左起第一列下、左 ...

可以改显示的位置吗?显示的位置让它转90度
回复

使用道具 举报

地板
ID:7485 发表于 2016-7-27 21:36 | 只看该作者
“可以改显示的位置吗”是什么意思?
回复

使用道具 举报

5#
ID:132987 发表于 2016-7-28 08:47 | 只看该作者
ahshmj 发表于 2016-7-27 21:36
“可以改显示的位置吗”是什么意思?

HC595SendData(~(*(p[0] + 2*(k+j) + 1)),~(*(p[0] + 2*(k+j) )),tab0[2*k],tab0[2*k + 1])   *(p[0] 这个是取字模, 2*(k+j) + 1)这个应该是点阵显示的位置吧
回复

使用道具 举报

6#
ID:641505 发表于 2019-11-13 21:34 | 只看该作者
能不能问一下各位大神,为什么用74HC595芯片读入芯片的时候用这个
SER=dat>>7
dat<<=1   先右移7位,再左移1位,8*8的点阵显示出来的字刚好在中间?谁能解释一下吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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