搜索
bottom↓
回复: 12

74HC595级联的应用 MEGA16L CVAVR 程序+原理图+实物照片

[复制链接]

出0入0汤圆

发表于 2011-11-23 10:51:02 | 显示全部楼层 |阅读模式
最近用了一下74hc595,级联的应用,用cvavr写的

由于我用的是led模组(12V),每个恩模组是 “3个led+150欧姆电阻串联” 每个模组耗电流80mA, 我每路带4个模组,所以要320mA,所以用了ULN2803(每路可以吸收500mA电流), 即“mcu->>74hc595->>uln2803->>led模组”模式,其实此模式也可以用来驱动12V动作的继电器

级联部分原理图ourdev_698196C7Q054.rar(文件大小:4K) (原文件名:595.rar)


实际的pcb板,20个74hc595和20个ULN2803,其中有10路(需要3A)用TIP127 (原文件名:001.jpg)

我具体应用的时候,20个74hc595都用,IO口用1k电阻上拉,还加了二极管(mega16L 是5V,595是3V系统,做个电平转换,1k上拉,足以驱动20个595控制口)
用595还是很爽地,移位和锁存分开用,不出鬼影,比164给力

//以下是个 小实验程序
//程序里有管脚定义
//程序:
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Professional
Automatic Program Generator
?Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Version :V1.0
Date    : 2011/11/14

Chip type               : ATmega16L
Program type            : Application
AVR Core Clock frequency: 7.372800 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 256

//实验现象:以最靠近mega16L的74hc595【电气上连接的第一个74hc595】为led的头开始数起

while(1)
{
        1、10个led亮
        2、5个led灭
        3、12个led流水
        4、6个led其中前3个亮,后3个灭
}

*****************************************************/

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//头文件
#include <mega16.h>
#include <delay.h>

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//替换声明
#define u8   unsigned char
#define u16 unsigned int

#define         SER             PORTC.0
#define         SRCLK         PORTC.3
#define         RCLK           PORTC.2
#define         HC595_EN  PORTC.1

#define         SER_SET                 SER=1,delay_us(2)   
#define         SRCLK_SET             SRCLK=1   
#define         RCLK_SET               RCLK=1
#define         HC595_EN_SET      HC595_EN=1  

#define         SER_CLR                  SER=0,delay_us(2)   
#define         SRCLK_CLR              SRCLK=0     
#define         RCLK_CLR                RCLK=0
#define         HC595_EN_CLR       HC595_EN=0

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//上电初始化
void init(void)
{
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=1 State6=1 State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0xC0;
DDRA=0xC0;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=1 State2=1 State1=1 State0=1
PORTC=0x0F;
DDRC=0xFF;


// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;


HC595_EN_CLR;//使能
SRCLK_CLR;//移位
RCLK_CLR;//锁存
delay_us(3);

}

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//移位
void yiwei(void)
{            
            SRCLK_SET;
            delay_us(2);
            SRCLK_CLR;  
}

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//锁存
void suocun(void)
{         
            delay_us(2);
            RCLK_SET;
            delay_us(2);     
            RCLK_CLR;
            delay_us(2);
}

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//一共n1个,前N2个都亮 从1开始计数
void hc595_001(u8 n1,u8 n2)
{
        u8 i;
        for(i=1;i<=n1;i++)
        {
                if(i<=(n1-n2))
                {
                      SER_CLR;           
                }
                else
                {
                       SER_SET;  
                }
                yiwei();
        }
        
}   





/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//一共n1个 流水灯 从低到高流水 从1开始计数
void hc595_002(u8 n1)
{      
        u8 i;
       static  u8 shanshuo_n=0;
        for(i=1;i<=n1;)
        {            
                if(n1==i+shanshuo_n)
                {
                         SER_SET;
                }
                else
                {
                         SER_CLR;  
                }
                yiwei();
               
                i++;      
        }
        shanshuo_n++;
         
        if(n1+1==shanshuo_n)
        {
                shanshuo_n=0;
        }
}

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//一共n1个,前N1个都灭 从1开始计数
  void hc595_003(u8 n1)
{
        u8 i;
        for(i=1;i<=n1;i++)
        {         
                SER_CLR;           
                yiwei();
        }
        
}

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//一共n1个,前N1个都亮 从1开始计数
void hc595_004(u8 n1)
{
        u8 i;
        for(i=1;i<=n1;i++)
        {         
                SER_SET;           
                yiwei();
        }
        
}     

/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
//主函数
void main(void)
{
     init();//初始化
     while(1) //大循环
     {
            hc595_001(6,3);
            hc595_002(12);
            hc595_003(5);
            hc595_004(10);
            
            suocun();
            delay_ms(240); //刷新频率,也是流水灯每次改变状态的时间间隔              
     }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2011-11-23 10:53:30 | 显示全部楼层
mk

出0入0汤圆

发表于 2012-4-5 23:39:55 | 显示全部楼层
不懂,是有什麼用的

出0入0汤圆

发表于 2012-4-6 10:56:38 | 显示全部楼层

很好啊,加油

出0入0汤圆

发表于 2012-4-6 11:02:07 | 显示全部楼层
正在做这个

出0入0汤圆

发表于 2012-4-6 12:24:46 | 显示全部楼层
这么多IC够麻烦的,做广告灯吗?

出0入0汤圆

发表于 2012-4-6 17:04:36 | 显示全部楼层
这个是否可以做成LED屏控制器了

出0入0汤圆

发表于 2012-4-6 18:27:59 | 显示全部楼层
楼主,595抗干扰可靠不,用个打火机的打火点击在边上试试看。以前做一个产品,试了试,595一打倒一片,后来做东西不敢用595扩充IO口了。不知道是不是买到假货的缘故。

出0入0汤圆

发表于 2013-1-9 11:35:48 | 显示全部楼层
#define         SER             PORTC.0
#define         SRCLK         PORTC.3
#define         RCLK           PORTC.2
#define         HC595_EN  PORTC.1

请问这样定义IO要什么头文件吗?直接定义好像不可以的。。。

出0入0汤圆

发表于 2013-2-21 19:42:39 | 显示全部楼层
老哥 你的这份资料找的好辛苦啊 宝贵资料啊 能将完整的原理图和程序发一份给小弟吗 不胜感激啊  15012975081@163.com    367906459qq.com

出0入0汤圆

发表于 2013-2-25 20:21:25 来自手机 | 显示全部楼层
学习一下....

出0入0汤圆

发表于 2016-3-9 14:58:48 | 显示全部楼层
学习一下了!

出0入0汤圆

发表于 2017-3-7 10:37:45 | 显示全部楼层
学习一下。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 15:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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