标题: 单片机点阵屏滚动 怎么做能让显示内容向左滚动,然后又从右面滚动进入点阵屏 [打印本页]

作者: Rorikon    时间: 2017-5-14 19:32
标题: 单片机点阵屏滚动 怎么做能让显示内容向左滚动,然后又从右面滚动进入点阵屏
4个74hc595芯片驱动16*16的点阵
请问怎么做能让显示内容向左滚动,然后又从右面滚动进入点阵屏


作者: cjjcjj1    时间: 2017-5-15 06:25
提示: 作者被禁止或删除 内容自动屏蔽
作者: wosiyabo    时间: 2017-5-15 11:00
把程序帖出来吧,右面滚动应该是在查表时把for(i=0;i<504;i++)改为for(i=504;i>504;i--)把数组内容传送顺序反过来
作者: 你像风儿来了    时间: 2017-5-15 13:52
给你个例程,你根据你的硬件修改吧
作者: Rorikon    时间: 2017-5-15 19:10
#include <reg51.h>
#include <intrins.h>

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;

unsigned char lei[]={/*--  文字:  蕾  --*/
                                        /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
                                        0x82,0x62,0x2A,0xAA,0xAF,0xAA,0x2A,0xFA,0x2A,0xAA,0xAF,0xAA,0x2A,0xA2,0x62,0x00,
                                        0x00,0x00,0xF8,0xAA,0xAA,0xAA,0xA8,0xFB,0xA8,0xAA,0xAA,0xAA,0xF8,0x00,0x00,0x00,};



unsigned char ledwei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


void delay(unsigned int i)
{
        while(i--);
}

void delay1s(void)   //误差 -0.000000000227us
{
    unsigned char a,b,c;
    for(c=13;c>0;c--)
        for(b=247;b>0;b--)
            for(a=142;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}

void send_74hc595(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4)
{        unsigned char i;
        SRCLK = 1;
        RCLK = 1;

       
        for(i=0;i<8;i++)   //移位
        {
                SER=dat1>>7;           //传送最高位
                dat1<<=1;
                SRCLK=0;
                _nop_();
                _nop_();
                SRCLK=1;
        }
        for(i=0;i<8;i++)   //移位
        {
                SER=dat2>>7;           //传送最高位
                dat2<<=1;
                SRCLK=0;
                _nop_();
                _nop_();
                SRCLK=1;
        }
        for(i=0;i<8;i++)   //移位
        {
                SER=dat3>>7;           //传送最高位
                dat3<<=1;
                SRCLK=0;
                _nop_();
                _nop_();
                SRCLK=1;
        }
        for(i=0;i<8;i++)   //移位
        {
                SER=dat4>>7;           //传送最高位
                dat4<<=1;
                SRCLK=0;
                _nop_();
                _nop_();
                SRCLK=1;
        }
        RCLK=0;
        _nop_();
        _nop_();
        RCLK=1;
}

void main()
{
        unsigned char i;
        unsigned int j=100;
        while(1)
        {
                for(i=0;i<16;i++)
                        {
                                send_74hc595(~ledwei[i+16],~ledwei[i],lei[i+16],lei[i]);
                                delay(10);       
                        }
                               
        }
}
作者: Rorikon    时间: 2017-5-15 20:30
wosiyabo 发表于 2017-5-15 11:00
把程序帖出来吧,右面滚动应该是在查表时把for(i=0;i504;i--)把数组内容传送顺序反过来

贴在5楼了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1