一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
12
返回列表 发新帖
楼主: Frde
收起左侧

双色点阵HEF4094Bt驱动请教

[复制链接]
发表于 2013-9-15 14:25 来自手机 | 显示全部楼层
Frde 发表于 2013-9-13 17:15  我买的这块板子上面7805没有,就直接用一根导线连接了,试验了蛮久才发现4936的5 6 7 8 脚是没有和VCC直接 ...

3264双色点阵如果用12T的51,12M晶振肯定闪烁的厉害,应当用高速单片机。
 楼主| 发表于 2013-9-15 16:23 | 显示全部楼层
是的呢,我最后用STM32测试了一下,这个玩意儿72MHz,显示很稳定
发表于 2013-9-15 18:35 来自手机 | 显示全部楼层
楼主能不能发一下改成51的程序?
 楼主| 发表于 2013-9-15 19:50 | 显示全部楼层
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint  unsigned int

//HEF4094BT 位定义
sbit Data4094 = P1^0;        //4094数据
sbit Clk4094  = P1^1;        //4094时钟
sbit EN4094 = P1^2;                //4094使能,前面有一个7404反相器,低电平有效

//74HC595位定义         
sbit SH_CP = P2^5;        //595的移位时钟
sbit ST_CP = P2^7;        //595的锁存时钟       
sbit DR1 = P2^6;        //上半屏红色,595的data输入
sbit DR2 = P2^4;

sbit DG1 = P2^3;
sbit DG2 = P2^2;


uchar DataR1[8];        //上半屏红           //显示buffer
uchar DataR2[8];

uchar DataG1[8];
uchar DataG2[8];

void SendData(unsigned char Dat)          //发送行扫描数据,4094驱动行
{
        unsigned char j;
        for(j=0;j<8;j++)  //发送每个字节的8位数据
        {       
                if(Dat&0x80)
                        Data4094 = 1;
                else
                        Data4094 = 0;
                Clk4094 = 0;
                _nop_();
                _nop_();      //延时;
                _nop_();
                Clk4094 = 1;

                Dat <<= 1;
        }
}

void SendLine(void)         //发送每列的扫描数据,595驱动列         ,行位高电平,列为低电平时点亮
{
        uchar i,j;
        for( i = 0; i < 8; i++)         //发送8个字节
        {
                for(j=0; j<8; j++)           //发送每个字节的8位,0显示
                {       
                        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;
                        _nop_();
                        _nop_();      //延时;
                        _nop_();       
                        SH_CP = 1;                                //移位时钟上升沿
       
                        DataR1[i]<<=1;
                        DataR2[i]<<=1;
                        DataG1[i]<<=1;
                        DataG2[i]<<=1;
                }       
        }
}

void main()
{
        uchar i,j,DataHang[2];
        uint k;
        EN4094 = 0;
        while(1)
        {
                for(k=0;k<25;k++)
                {  
                        for( i = 0 ;i < 16; i++)
                        {  
                                for( j = 0; j < 8; j++)                  //发送列 数据
                                {
                                        DataR1[j]=0x55;
                                        DataR2[j]=0xaa;
                                }
                                SendLine();
                                ST_CP = 0;
                                EN4094 = 1;
                                ST_CP = 1;
                       
                                if(i<8)                   //行扫描
                                        DataHang[0] = 0;
                                else
                                        DataHang[0] = 1<<(i-8);
                                DataHang[1] = 1 << i;
                                       
                                SendData(DataHang[0]);
                                SendData(DataHang[1]);
                                EN4094 = 0;
                        }               
                 }
                                
                for(k=0;k<25;k++)
                {  
                        for( i = 0 ;i < 16; i++)
                        {  
                                for( j = 0; j < 8; j++)                  //发送列 数据
                                {
                                        DataG1[j]=0xaa;
                                        DataG2[j]=0x55;
                                }
                                SendLine();
                                ST_CP = 0;
                                ST_CP = 1;
                       
                                if(i<8)                   //行扫描
                                        DataHang[0] = 0;
                                else
                                        DataHang[0] = 1<<(i-8);
                                DataHang[1] = 1 << i;
                                       
                                SendData(*DataHang);
                                EN4094 = 0;
                        }               
                 }
        }
}
可以试一下,我最近把电脑整理了一下,文件放的都不晓得在哪儿了,这个应该可以,就是速度跟不上去,闪烁的厉害
发表于 2013-9-15 22:00 来自手机 | 显示全部楼层
Frde 发表于 2013-9-15 19:50  #include  #include  

没看出来显示的是什么。好像缺乏要显示的内容
发表于 2013-9-15 22:10 来自手机 | 显示全部楼层
这里有一个用M8的
https://www.yleee.com.cn/forum.php?mod=viewthread&tid=14267
 楼主| 发表于 2013-9-16 08:05 | 显示全部楼层
这个是测试全屏的,显示的我删掉了
发表于 2013-9-16 11:41 来自手机 | 显示全部楼层
Frde 发表于 2013-9-16 08:05  这个是测试全屏的,显示的我删掉了

测试全屏很简单,595数据端接地,只需要做行扫描就全屏显示了:2;
 楼主| 发表于 2013-9-22 14:29 | 显示全部楼层
我测试的时候就是只输入行数据或是列数据其他接地或是电源,上面的是根据M8的修改的

本版积分规则

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

GMT+8, 2024-5-20 01:28 , Processed in 0.053389 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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