登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看5745|回5|收藏
楼主 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
}

沙发 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黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版