标题: LED点阵实验两个图案显示for循环 [打印本页]

作者: 潇博    时间: 2025-5-14 16:02
标题: LED点阵实验两个图案显示for循环
#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

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

//点阵列控制数据1
u8 gled_col[32]=
{0x80,0x00,0x9F,0x10,0x90,0x10,0x90,0x08,0x90,0x04,0x9E,0x02,0x82,0x00,0xE2,0x7F,
0x82,0x02,0x9E,0x04,0x90,0x04,0x90,0x08,0x90,0x10,0x90,0x22,0x8A,0x41,0x84,0x00
};
//点阵列控制数据2
u8 gled_co2[32]=
{0x80,0x08,0x82,0x08,0xF4,0x7F,0x84,0x08,0x00,0x02,0xE1,0x3F,0x02,0x22,0xFA,0x7F,
0x08,0x22,0xE4,0x3F,0x07,0x02,
0xA4,0x26,0xA4,0x2A,0x64,0x2A,0x14,0x22,0x08,0x22};


//点阵行控制数据
u8 gled_row[32]=
{
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_10us(u16 ten_us)//当传入Ten_us=1时,大约延时10us
{
        while(ten_us--);
}


void hc595_write_data(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{
        u8 i=0;
        for(i=0;i<8;i++)
        {
                 SER=dat4>>7;
                dat4<<=1;
                SRCLK=0;
                _nop_();
                SRCLK=1;
                _nop_();
        }

        for(i=0;i<8;i++)
        {
                 SER=dat3>>7;
                dat3<<=1;
                SRCLK=0;
                _nop_();
                SRCLK=1;
                _nop_();
        }

        for(i=0;i<8;i++)
        {
                 SER=dat2>>7;
                dat2<<=1;
                SRCLK=0;
                _nop_();
                SRCLK=1;
                _nop_();
        }

        for(i=0;i<8;i++)
        {
                 SER=dat1>>7;
                dat1<<=1;
                SRCLK=0;
                _nop_();
                SRCLK=1;
                _nop_();
        }
        rCLK=1;
        delay_10us(1);
        rCLK=0;
}

void main()
{
        u8 i=0;
        int j;       
        while(1)   
        {
          
                            
                for(j=0;j<100;j++)
               
                        for(i=0;i<16;i++)//循环16次 行,列
                       
                        {        hc595_write_data(gled_row[i],gled_row[i+16],~gled_col[i*2],~gled_col[i*2+1]);
                                delay_10us(10);//延迟一段时间,
                                hc595_write_data(0x00,0x00,0x00,0x00);//消影
                        }               
               
                for(j=0;j<100;j++)
                        for(i=0;i<16;i++)//循环16次 行,列
                        {
                                hc595_write_data(gled_row[i],gled_row[i+16],~gled_co2[i*2],~gled_co2[i*2+1]);

                        }                                       
                                                       
          }
}



作者: cy009    时间: 2025-6-20 16:50
不同的点阵屏电路,程序会有区别,希望楼主先上屏电路图,便于理解程序。
作者: psm4839    时间: 2025-6-20 19:14
既无硬件电路又无实物显示效果,雾里云里。




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