找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LED点阵实验两个图案显示for循环

[复制链接]
跳转到指定楼层
楼主
ID:1150380 发表于 2025-5-14 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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]);

                        }                                       
                                                       
          }
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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