一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1488|回复: 3
收起左侧

求一个列595行4094的时钟程序

[复制链接]
发表于 2013-8-16 23:28 | 显示全部楼层 |阅读模式
我有一块列为595,行4094的32*64的板子接口如下:
1(VCC)  2(GND)  3(DR1数据)  4(空)   5(4094数据) 6(4094时钟)  7(4094EN)  8(DR2数据)  9(GND)  10(VCC)

11(VCC) 12(GND)1 3(DG1数据) 14(时钟) 15(锁存)      16(锁存)     17(时钟)   18(DG2数据) 19( GND) 20(VCC) 搞了好久都没有成功.现求一个时钟程序谢谢了!!!

发表于 2013-8-19 17:57 来自手机 | 显示全部楼层
自己写吧!没见过现成呢
发表于 2013-9-14 08:14 | 显示全部楼层
#include "delay.h"
#include "sys.h"

#define SH_CP  PAout(0)
#define ST_CP  PAout(1)
#define DR1           PAout(2)
#define DR2           PAout(3)
#define DG1           PAout(4)
#define DG2           PAout(5)

#define Data4094   PAout(6)
#define CLK4094           PAout(7)
#define EN4094           PAout(8)

unsigned char DataR1[8];
unsigned char DataR2[8];
unsigned char DataG1[8];
unsigned char DataG2[8];

unsigned char DataHang[2];

unsigned char ArrayNum16x16[352] = {
/*0   CA3B0 */
0x00,0x00,0x07,0xE0,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x07,0xE0,0x00,0x00,
/*1   CA3B1 */
0x00,0x00,0x01,0x80,0x03,0x80,0x07,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x07,0xE0,0x00,0x00,
/*2   CA3B2 */
0x00,0x00,0x07,0xE0,0x0C,0x30,0x18,0x18,0x18,0x18,0x00,0x18,0x00,0x18,0x00,0xF0,0x03,0x80,0x06,0x00,0x0C,0x00,0x18,0x00,0x18,0x18,0x18,0x18,0x1F,0xF8,0x00,0x00,
/*3   CA3B3 */
0x00,0x00,0x0F,0xF0,0x18,0x18,0x18,0x18,0x00,0x18,0x00,0x30,0x00,0x60,0x01,0xC0,0x00,0x60,0x00,0x30,0x00,0x18,0x00,0x18,0x18,0x18,0x18,0x30,0x0F,0xE0,0x00,0x00,
/*4   CA3B4 */
0x00,0x00,0x01,0xC0,0x03,0xC0,0x03,0xC0,0x03,0xC0,0x06,0xC0,0x06,0xC0,0x0C,0xC0,0x0C,0xC0,0x18,0xC0,0x30,0xC0,0x3F,0xF8,0x00,0xC0,0x00,0xC0,0x03,0xF0,0x00,0x00,
/*5   CA3B5 */
0x00,0x00,0x1F,0xF8,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1F,0xE0,0x1C,0x30,0x18,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x18,0x18,0x18,0x30,0x0F,0xE0,0x00,0x00,
/*6   CA3B6 */
0x00,0x00,0x07,0xE0,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x00,0x1F,0xE0,0x1C,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x07,0xE0,0x00,0x00,
/*7   CA3B7 */
0x00,0x00,0x1F,0xF8,0x18,0x18,0x18,0x18,0x00,0x30,0x00,0x30,0x00,0x60,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,
/*8   CA3B8 */
0x00,0x00,0x07,0xE0,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x07,0xE0,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x07,0xE0,0x00,0x00,
/*9   CA3B9 */
0x00,0x00,0x07,0xE0,0x0C,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x0C,0x38,0x07,0xF8,0x00,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x0C,0x30,0x07,0xE0,0x00,0x00,
/*null */
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

void LEDPort_Init(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;                                
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PA端口时钟
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1 | GPIO_Pin_2 |GPIO_Pin_3 |GPIO_Pin_4 |GPIO_Pin_5 |GPIO_Pin_6 |GPIO_Pin_7 |GPIO_Pin_8;                                 //LED0-->PB.5 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根据设定参数初始化GPIOB.5
}
void Write4094()
{
        unsigned char i,j;
        for( i = 0; i < 2; i++)
        {
                for( j = 0; j < 8; j++ )
                {
                        if( DataHang[i] & 0x80 )
                                Data4094 = 1;
                        else
                                Data4094 = 0;
       
                        CLK4094 = 0;
                        delay_us(2);
                        CLK4094 = 1;
       
                        DataHang[i] <<= 1;
                }       
        }
}

void Write595(void)
{
        unsigned char i,j;
        for( i = 0; i < 8; i++)
        {
                for( j = 0; j < 8; j++)
                {
                        if( DataR1[i] & 0x80 )
                                DR1 = 0;
                        else
                                DR1 = 1;
                        if( DataR2[i] & 0x80 )
                                DR2 = 0;
                        else
                                DR2 = 1;

                        if( DataG1[i] & 0x80 )
                                DG1 = 0;
                        else
                                DG1 = 1;
                        if( DataG2[i] & 0x80 )
                                DG2 = 0;
                        else
                                DG2 = 1;

                        SH_CP = 0;
                        delay_us(2);
                        SH_CP = 1;       
                        DataR1[i] <<=1;       
                        DataR2[i] <<=1;
                        DataG1[i] <<=1;
                        DataG2[i] <<=1;
                }
        }
}


int main(void)
{         
        unsigned char i,j,k;
        delay_init();                     //延时函数初始化
        LEDPort_Init();                 

        EN4094 = 0;
        while(1)
        {
                for(k=0;k<200;k++)
                {  
                        for( i = 0 ;i < 16; i++)
                        {  
                                for( j = 0; j < 8; j++)                  //发送列 数据
                                {
                                //        DataR1[j]=0xff;
                                        DataG2[j]=0xff;
                                }
                                Write595();
                                ST_CP = 0;
                                ST_CP = 1;
                       
                                if(i<8)                   //行扫描
                                        DataHang[0] = 0;
                                else
                                        DataHang[0] = 1<<(i-8);
                                DataHang[1] = 1 << i;       
                                Write4094();
                        }               
                 }
       
                for(k=0;k<200;k++)
                {  
                        for( i = 0 ;i < 16; i++)
                        {  
                                for( j = 0; j < 8; j++)                  //发送列 数据
                                {
                                        DataR1[j]=0x55;
                                //        DataG2[j]=0xff;
                                }
                                Write595();
                                ST_CP = 0;
                                ST_CP = 1;
                       
                                if(i<8)                   //行扫描
                                        DataHang[0] = 0;
                                else
                                        DataHang[0] = 1<<(i-8);
                                DataHang[1] = 1 << i;
                                Write4094();
                        }               
                 }

                for(k=0;k<200;k++)
                {  
                        for( i = 0 ;i < 16; i++)
                        {  
                                for (j=0;j<4;j++)
                                {
                                        DataG1[0+(j<<1)]=ArrayNum16x16[j*32+0+(i<<1)];
                                        DataG1[1+(j<<1)]=ArrayNum16x16[j*32+1+(i<<1)];
                                        DataR2[0+(j<<1)]=ArrayNum16x16[(j+4)*32+0+(i<<1)];
                                        DataR2[1+(j<<1)]=ArrayNum16x16[(j+4)*32+1+(i<<1)];
                                }
                                Write595();
                                ST_CP = 0;
                                ST_CP = 1;
                       
                                if(i<8)                   //行扫描
                                        DataHang[0] = 0;
                                else
                                        DataHang[0] = 1<<(i-8);
                                DataHang[1] = 1 << i;
                                Write4094();
                        }               
                 }
        }
}
试试这个代码,STM32的,可以照样画葫芦改成51的,
发表于 2013-9-15 22:12 来自手机 | 显示全部楼层
这里有一个
https://www.yleee.com.cn/forum.php?mod=viewthread&tid=14267

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-20 02:06 , Processed in 0.054032 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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