CEPARK AVR单片机 之HC595驱动数码管显示

发布者:数字驿站最新更新时间:2016-03-03 来源: eefocus关键字:AVR单片机  HC595驱动  数码管显示 手机看文章 扫描二维码
随时随地手机看文章
这里我用的CEPARK 的M64 AVR开发板,这一课的重点是学会如何使用74HC595来驱动数码管。

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能 OE时(为低电平),存储寄存器的数据输出到总线。

引脚说明:
QA--QH: 八位并行输出端,可以直接控制数码管的8个段。

QH': 级联输出端。我将它接下一个595的SI端。

SER(DS): 串行数据输入端。

74595的控制端说明:

/SCLR(MR)(10脚): 低点平时将移位寄存器的数据清零。通常我将它接Vcc。

SCK(SHCP)(11脚):上升沿时数据寄存器的数据移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)

RCK(STCP)(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。

/G(OE)(13脚): 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。

注:74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。

74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。

与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。
注明:74HC595引脚命名我现在看到两种,如串行数据输入端(14脚)有的Datasheet上叫SER,还有一种叫DS。不过这都没有关系,只是名字不一样,大家看这些文档时,注意点就行。

大家这里只要注意11,12,14这三个引脚由单片机的哪几个口控制就好。

SHCP(11)-----------PG0

STCP(12)-----------PG1

DS(14)-------------PG2

 

下面是源程序:
效果:第一位和第二位数码管显示5;

 

#include        

#include

 

#define SER_PORT PORTG   //PG口

#define SER_DATA PG2     //DS,串行数据入口

#define SER_RCK  PG1     //STCP,来一个上升沿时数据进入并行输出

#define SER_SCK  PG0     //SHCP,来一个上升沿时数据移位

 

unsigned char Led_Disbuf[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};    //共阳极

 

void Send_Byte_HC595(unsigned char byte)   //并行数据移位输出函数

                                         //byte是表示我们想哪一位数码管亮,如为0x01,表示第一个数码管亮

        unsigned char i;        //循环变量

        for(i = 0;i < 8;i++)

                {

                        if(byte & 0x80)

                                {

                                        SER_PORT |= _BV(SER_DATA);  //PG2输出1

                                }

                        else

                                {

                                        SER_PORT &= ~_BV(SER_DATA);//PG2输出0

                                }

                       

                        SER_PORT |= _BV(SER_SCK);  //上升沿触发,SER_DATA数据进入移位寄存器

                        _delay_us(5);

                        SER_PORT &= ~_BV(SER_SCK);

                       

                        byte <<= 1;                //通过左移,逐个点亮个个数码管

                }

       

        SER_PORT |= _BV(SER_RCK);    //上升沿触发,移位寄存器中的数据并行输出

        _delay_us(5);

        SER_PORT &= ~_BV(SER_RCK);

}

 

int main(void)

{

        PORTB = 0xff;     //PB口赋初值为ff

        DDRB  = 0xff;     //PB口为输出态

       

        PORTG = 0x00;     //PG口赋初值为0

        DDRG  |= _BV(SER_DATA)|_BV(SER_RCK)|_BV(SER_SCK);   //PG0,PG1,PG2为输出态

       

        PORTB = Led_Disbuf[5];     //数码管上显示5

        Send_Byte_HC595(0x03);     //第一位,第二位数码管点亮

       

        while(1)

        {};    

}

关键字:AVR单片机  HC595驱动  数码管显示 引用地址:CEPARK AVR单片机 之HC595驱动数码管显示

上一篇:Linglong之AVR程例2 闪烁的LED
下一篇:Linglong之AVR程例5 数码管4位显示

推荐阅读最新更新时间:2024-03-16 14:46

Linglong之AVR程例5 数码管4位显示
现在我们让4位数码管显示4位数字,这里用的动态扫描法。 这里说一个这个写这个程序要注意的地方: 1 动态描的循序。首先是将数据送入段选端,再打开要显示位的位选端,再延时,最后就是开闭所有的位选端。这个如果没有处理好很容易出现鬼影。 2 延时。我这里是延时5ms。看了下延时效果还不错。 关键是理解动态扫描的思想:我们先点亮第一位数码管,亮5ms.再点亮第二位数码管,亮5ms.这时第一位是不亮的,如此循环下去。因为人眼5ms反映不过来,看上去就是4位数码管都是亮的。 比较简陋的源程序: #include avr/io.h
[单片机]
试验数码管显示数字( 单片机直接实现位选 共阴极)
/********************************************************************************** * 标题: 试验数码管上显示数字( 单片机直接实现位选 共 阴极 ) * * * * 连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 * *********************************************************************************** * * * 用573 锁存器 控制和 单片机 脚直接位选控制(非
[单片机]
试验<font color='red'>数码管</font>上<font color='red'>显示</font>数字( 单片机直接实现位选 共阴极)
电子工程师传经授道:AVR单片机经典使用经验
使用更好的器件只是为设计实现一个好的系统创造了一个好的基础和可能性,如果还采用和沿袭以前传统的硬件和软件设计思想和方法的话,是不能用好AVR的,甚至也不能真正的了解AVR的特点和长处。 AVR具有上手入门快,开发方便简单的特点,但要充分体会和发挥AVR的优点,还需要应用工程师本身的硬软件设计开发能力的不断学习、实践提高。 AVR与传统类型的单片机相比,除了必须能实现原来的一些基本的功能,其在结构体系、功能部件、性能和可靠性等多方面有很大的提高和改善。 功能越好的器件,需要具备更高技术和能力的人来使用和驾驭它。就象一部好的F1赛车,只有具备高超技术的驾驶员才能充分体会到车的特点,并能最大限度的发挥出车的性能。 “外行看
[模拟电子]
电子工程师传经授道:<font color='red'>AVR单片机</font>经典使用经验
8位数码管动态显示时间,可调节,调节的数闪烁显示
//8位数码管动态显示时间,可调节, //调节时间时,调节的数闪烁显示; //比较两种闪烁的方法; #include reg51.h #define uint unsigned int #define uchar unsigned char sbit tiaojie=P1^0; sbit jia=P1^1; sbit jian=P1^2; uchar code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0xbf}; uchar a,b,num1,num2,flag100ms,flag1s,flagtj; uchar miao,fen,shi,f
[单片机]
C51单片机和AVR单片机的区别
1.avr为risc结构cpu,大多数指令在一个时钟周期内完成.所以MIPS比51高 2.avr单片机的复位电平为负逻辑, 而51为正逻辑 3.汇编的程序不通用,但是如果用c写的程序还是可以移植的. AVR 单片机是ATMEL 在90年代推出的精简指令集RISC的单片机,跟PIC类似.使用哈佛结构.可以这样类比,AT89C52相当于复杂指令集CISC的intel的奔腾CPU,AT90S8515相当于AMD的精简指令集RISC的K7 CPU. 以上是指令集的类比.AVR是专门为使用高级语言设计的,在使用高级语言时, 会比89C52有较佳的表现. 可以直接替代89C52的CPU是AT90S4414和AT90S8515.
[单片机]
AVR单片机nRF24L01发送接收驱动程序
#include iom16v.h #include macros.h #include 12864.h //------------------------------------------------------------------------------ //spi标志 #define DDR_SPI DDRB #define DD_MOSI 5 #define DD_MISO 6 #define DD_SCK 7 #define DD_SS 4 #define CE PB3 #define IRQ PB2 //--------------------------------NRF24L01接口定义------
[单片机]
基于AVR单片机的多路遥控开关编解码实现
  负荷缸是船舶电力核心发电机性能的负荷试验必备的重要工装设备,通过负荷试验,可以检验发电机长期工作的性能稳定的情况(静态特性)和对突加突卸负荷的应变能力(动态特性)。AVR单片机具有高性能低价格的优点,在本文中利用AVR单片机对发电机负荷缸的多路远程遥控开关量进行采集监控并进行数字信号编解码,用2芯的电缆取代原来40芯的粗电缆传输控制信号,有效地解决了工作中遇到的问题。   1 问题的提出   我们通过把由发电机供电的通电极板放到负荷缸水电阻中,用充气升降极板和补给水调节水电阻大小的方法控制试验发电机所带负荷的大小,对发电机的性能进行试验。体积庞大的负荷缸一般放置在码头,在船舶发电机的负荷试验中需要在船舶配电板处控制负荷缸的
[单片机]
基于<font color='red'>AVR单片机</font>的多路遥控开关编解码实现
8种LED闪烁灯控制
基于AVR单片机ATmega16的8种LED闪烁灯控制转载标签: #include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int void Delay() //延时函数 { uchar a, b, c; for (a = 1; a; a++) for (b = 1; b; b++) for (c = 0; c 10; c++) //循环次数=255*255*10 ; } void DelayMs(uint i) //1ms延时,
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved