微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 8*8LED点阵滚动显示,,

8*8LED点阵滚动显示,,

时间:10-02 整理:3721RD 点击:
使用74HC595,这是个静态显示的程序,怎么才能让它滚动显示呢,


#include<reg51.h>
#include<intrins.h>
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
//--定义要使用的IO口--//
#define COMMONPORTS                P0
//--列选通控制--//
unsigned char code TAB[8]  = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
//--点阵字码--//
unsigned char code CHARCODE[18][8]=
{
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0
{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1
{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2
{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3
{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4
{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5
{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6
{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7
{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8
{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, //9
{0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00}, //P
{0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00}, //R
{0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00}, //E
{0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00}, //C
{0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00}, //H
{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, //I
{0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00}, //N
{0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00}  //中
};
void delay(unsigned int time)
{
  unsigned int i,j;
  for(i=0;i<time;i++)
    for(j=0;j<121;j++);
}

void Hc595SendByte(unsigned char dat)
{
        unsigned char a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
                SER=dat>>7;
                dat<<=1;
                SRCLK=1;
                _nop_();
                _nop_();
                SRCLK=0;       
        }
        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
}

void main()
{       
        unsigned char tab, j;
        unsigned int  i;
        while(1)
        {       
                for(i= 0; i<50; i++ )   //两个字之间的扫描间隔时间
                {
                        for(tab=0;tab<8;tab++)
                        {       
                                Hc595SendByte(0x00);                             //消隐                                                                                                                               
                                COMMONPORTS        = TAB[tab];                                 //输出字码       
                                Hc595SendByte(CHARCODE[j][tab]);       
                                delay(2);               
                        }
                         
                }
                j++;
                if(j == 18)
                {
                        j = 0;
                }
        }       
}

可以把要显示的内容放到一个缓冲区中,然后把其中的内容左移运算,你试试看

嗯 好的 ,试试看

我有个16*16点阵学习板,需要加:176798246详聊

你弄好了没?

数字滚动1到4的数字编程

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top