两片74HC595级联驱动两个四连体数码管

两片74HC595级联驱动两个四连体数码管
两片74HC595级联驱动两个四连体数码管

两片74HC595级联驱动两个四连体数码管

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。

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

我的硬件连接:用级联方式连接!

工作顺序:单片机先送1个8位数据到第一个595的内部移位寄存器->然后数据会送到内部的输出寄存器->输出

当MR(10引脚)为高电平,OE(13引脚)为低电平时,数据在SH CP上升沿进入移位寄存器,在ST CP上升沿输出到并行端口。

可能这还不太好理解,没关系,咱去程序应用中理解!

请看一个简单的程序:

sbit SDA1 = P0^0; //串行数据输入,对应595的14脚SER

sbit SCL1 = P0^1; //移位寄存器时钟输入,对应595的11脚SCK

sbit SCL2 = P0^2; //存储寄存器时钟输入,对应595的12脚RCK

unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//0 1 2 3 4 5 6 7 8 9

unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay2ms(void)

{

unsigned char i,j;

for(i=133;i>0;i--)

for(j=6;j>0;j--);

}

void 595_in(unsigned char Data)

{

unsigned char i;

for(i = 0; i < 8; i++) //循环8次,刚好移完8位

{

SCL1 = 0; //先将移位寄存器控制引脚置为低

_nop_();

if((Data & 0x80)== 0x80)

SDA1 =1;

else

SDA1 =0;

Data <<= 1; //将数据的次高位移到最高位

SCL1 = 1; //再置为高,产生移位时钟上升沿,上升沿时数据寄存器的数据移位_nop_();

}

}

void 595_out(void)

{

SCL2 = 0; //先将存储寄存器引脚置为低

_nop_();

SCL2 = 1; //再置为高,产生移位时钟上升沿,上升沿时移位寄存器的数据进入数据存储寄存器,更新显示数据。

}

void main(void)

{

unsigned char i;

for(i=0;i<8;i++) //有八位数码管,八位依次扫描

{

595_in(wei[i]); //先传位码

595_in(duan[i]); //再传段码

595_out();

delay2ms(); //延迟时间2ms以内

}

}

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

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

与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。

初学者-编程_74HC164 移位寄存器

;*********************************** ;74hc164work ;*********************************** led_seg_in: movlf08h,led_rrf_cnt send_8bit: bcf pt1,1;74hc164cp上升沿动作 btfss led_data,0 goto sdab_set1 BSF PT1,0;将二进制数从PT1.0口输出 send_1bit_OK: rrf led_data,1 bsf pt1,1 decfsz led_rrf_cnt,1 goto send_8bit return sdab_set1: bcf pt1,0 GOTO send_1bit_OK ;;;////////////;;;从74HC164输出的数据直接点亮相应的数码管,从而达到移位显示的作用。

MOVFW RAM CALL disp;NO,则RAM-LED,送显 disp: movwf data movfw data CALL GETIN_DATA movwf led_data call led_seg_in CALL delay RETURN GETIN_DATA: ADDPCW RETLW00000011b;0 RETLW10011111b;1 RETLW00100101b;2 RETLW00001101b;3 RETLW10011001b;4 RETLW01001001b;5 RETLW01000001b;6 RETLW00011111b;7 RETLW00000001b;8 RETLW00001001b;9 RETLW11111111b;0FFH RETLW11111101b;- RETLW11110000b;K

利用74HC595实现多位LED显示的方法

1 引言 单片机应用系统中使用的显示器主要有LED和LCD两种。近年来也有用CRT显示的。前者价格低廉,配置灵活,与单片机接口方便;后者可进行图形显示,但接口较复杂,成本也较高。LED(Ling Emiting Diode)是发光二极管的缩写。实际应用非常普遍的是八段LED显示器。LED显示器在大型报时屏幕,银行利率显示,城市霓虹灯建设中,得到广泛应用。在这些需要多位LED显示的场合,怎样实现系统稳定,价格低廉的显示,成为决定其成本的关键所在。 2 74HC595实现LED静、动态显示基本原理 74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。而且价格低廉,每片单价为1.5元左右. 2.1 静态显示 每位LED显示器段选线和74HC595的并行输出端相连,每一位可以独立显示(见图1)。在同一时间里,每一位显示的字符可以各不相同(每一位由一个74HC595的并行输出口控制段选码)。 N位LED显示要求N个74HC595芯片及N+3条I/O口线,占用资源较多,而且成本较高。这对于多位LED 显示很不利。 2.2 动态显示

在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制(见图2)。由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示相同的字符。想要每位显示不同的字符,就必须采用扫描的方法,即在每一瞬间只使用一位显示字符。在此瞬间,74HC595并行输出口输出相应字符段选码,而位选则控制I/O口在该显示位送入选通电平,以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。由于74HC595具有锁存功能,而且串行输入段选码需要一定时间,因此,不需要延时,即可形成视觉暂留效果。 N位LED显示时,只需要一片74HC595即可完成,成本最低。但是,此种方法的最大弱点就是当LED的位数大于12位时,出现闪烁现象,这是所有动态LED显示方式共同的弱点。 3 多位LED显示方法的实现

74hc595驱动数码管

74hc595驱动数码管 版本一 顶层例化文件 module seg7x8( input CLOCK_50, // 板载50MHz时钟 input Q_KEY, // 板载按键RST output [7:0] SEG7_SEG, // 七段数码管 段脚 output [2:0] SEG7_SEL // 七段数码管 待译位脚 ); // 显示效果: // ------------------------- // |1 |2.|3 |4 | |B |C |D | // ------------------------- seg7x8_drive u0( .i_clk (CLOCK_50), .i_rst_n (Q_KEY), .i_turn_off (8'b0000_1000), // 熄灭位[2进制][此处取第3位 .i_dp (8'b0100_0000), // 小数点位[2进制][此处取第6位 .i_data (32'h1234_ABCD), // 欲显数据[16进制] .o_seg(SEG7_SEG), .o_sel(SEG7_SEL) ); endmodule 驱动文件 module seg7x8_drive(

input i_clk, input i_rst_n, input [7:0] i_turn_off, // 熄灭位[2进制 input [7:0] i_dp, // 小数点位[2进制 input [31:0] i_data, // 欲显数据[16进制 output [7:0] o_seg, // 段脚 output [2:0] o_sel // 使用74HC138译出位脚 ); //++++++++++++++++++++++++++++++++++++++ // 分频部分 开始 //++++++++++++++++++++++++++++++++++++++ reg [16:0] cnt; // 计数子 always @ (posedge i_clk, negedge i_rst_n) if (!i_rst_n) cnt <= 0; else cnt <= cnt + 1'b1; wire seg7_clk = cnt[16]; // (2^17/50M = 2.6114)ms //-------------------------------------- // 分频部分 结束 //-------------------------------------- //++++++++++++++++++++++++++++++++++++++ // 动态扫描, 生成seg7_addr 开始 //++++++++++++++++++++++++++++++++++++++ reg [2:0] seg7_addr; // 第几个seg7 always @ (posedge seg7_clk, negedge i_rst_n) if (!i_rst_n) seg7_addr <= 0; else seg7_addr <= seg7_addr + 1'b1; //-------------------------------------- // 动态扫描, 生成seg7_addr 结束 //-------------------------------------- //++++++++++++++++++++++++++++++++++++++

74HC164级联实现四位数码管显示电路

中北大学
课 程 设 计 说 明 书
学生姓名: 学 专 题 院: 业:
XXXXXX
学 号:
1005xxxxx
信息与通信工程学院 电子信息科学与技术
目:74HC164级联实现四位数码管显示电路设计 程耀瑜 李文强 职称: 职称: 教授 讲师
指导教师:
2013

1

17


中北大学
课程设计任务书
2012/2013 学年第 一 学期
学 专
院: 业:
信息与通信工程学院 电子信息科学与技术 xxxxxxx 学 号: 100xxxxxxx
学 生 姓 名: 课程设计题目: 起 迄 日 期: 课程设计地点: 指 导 教 师: 系 主 任:
74HC164 级联实现四位数码管显示电路设计 1 月 4 日~1 月 15 日 中北大学 程耀瑜,李文强 程耀瑜
下达任务书日期:
2010 年 1 月 3 日
课 程 设 计 任 务 书
2

课 程 设 计 任 务 书
1.设计目的:
本课程设计主要针对模拟电子技术和数字电子技术课程要求,培养学生在查阅资料 的基础上,进行实用电路设计、计算、仿真、调试等多个环节的综合能力,同时培养学 生用课程中所学的理论独立地解决实际问题的能力。另外还培养学生用专业的、简洁的 文字,清晰的图表来表达自己设计思想的能力。
2.设计内容和要求(包括原始数据、技术参数、条件、设计要求等) :
(1)了解 74HC164 的工作原理,掌握其功能和引脚; (2)掌握 74HC164 级联电路的设计、仿真与调试; (3)掌握 74HC164 控制多只数码管电路的设计、仿真与调试; (4)掌握方案设计与论证;
3.设计工作任务及工作量的要求〔包括课程设计计算说明书(论文)、图纸、 实物样品等〕 :
(1)提供核心器件的工作原理与应用介绍; (2)提供用 Protel99 设计的电路原理图,也可给出印刷板电路图; (3)提供用 Multisim、MaxPluss、Proteus 等其他软件对电路的仿真结果与分析; (4)提供符合规定要求的课程设计说明书; (5)提供参考文献不少于三篇,且必须是相关的参考文献;
3

74HC595工作原理及应用

74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SCHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能 OE时(为低电平),存储寄存器的数据输出到总线。74HC595各个引脚的功能:Q1~7 是并行数据输出口,即储寄存器的数据输出口Q7' 串行输出口,其应该接SPI总线的MISO接口STcp 存储寄存器的时钟脉冲输入口SHcp 移位寄存器的时钟脉冲输入口OE的非输出使能端MR的非芯片复位端Ds 串行数据输入端程序说明:每当spi_shcp上升沿到来时,spi_ds 引脚当前电平值在移位寄存器中左移一位,在下一个上升沿到来时移位寄存器中的所有位都会向左移一位,同时Q7'也会串行输出移位寄存器中高位的值,这样连续进行8次,就可以把数组中每一个数(8位的数)送到移位寄存器;然后当 spi_stcp上升沿到来时,移位寄存器的值将会被锁存到锁存器里,并从Q1~7引脚输出附子程序: void hc595send_data(uint8 data)//要传输的数据,建议用数组的方法来查询{ uint8 i; IO0CLR = spi_stcp; 12 脚 for(i=0;i<8;i++) { IO0CLR = spi_shcp; 11 脚 if((data&0x80)!=0)IO0SET = spi_ds; else IO0CLR = spi_ds; data <<= 1; IO0SET = spi_shcp; } IO0SET = spi_stcp;} 1 引言 单片机应用系统中使用的显示器主要有LED和LCD两种。近年来也有用CRT 显示的。前者价格低廉,配置灵活,与单片机接口方便;后者可进行图形显示,但接口较复杂,成本也较高。LED(Ling Emiting Diode)是发光二极管的缩写。实际应用非常普遍的是八段LED显示器。LED显示器在大型报时屏幕,银行利率显示,城市霓虹灯建设中,得到广泛应用。在这些需要多位LED显示的场合,怎样实现系统稳定,价格低廉的显示,成为决定其成本的关键所在。 2 74HC595实现LED静、动态显示基本原理 74HC595是美国国家半导体公司生产的通用移位寄存器芯片。并行输出端具有输出锁存功能。与单片机连接简单方便,只须三个I/O口即可。而且通过芯片的Q7引脚和SER引脚,可以级联。而且价格低廉,每片单价为1.5元左右. 2.1 静态显示 每位LED显示器段选线和74HC595的并行输出端相连,每一位可以独立显示。在同一时间里,每一位显示的字符可以各不相同(每一位由一个74HC595的并行输出口控制段选码)。 N位LED显示要求N个74HC595芯片及N+3条I/O口线,占用资源较多,而且成本较高。这对于多位LED显示很不利。 2.2 动态显示 在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制。由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示相同的字符。想

51单片机驱动两片74HC595级联动态驱动8位数码管

51单片机驱动两片74HC595级联动态驱动8位数码管 功能: 用2片74HC595驱动8位数码管, 级联的最低1片595控制位选,那么第一片控制段选 平台: STC89C52 现象: 8位数码管从第一位开始从0计数,满10进位 版本说明: 第0版本没有使用定时器中断,同时定义了一个unsigned long int 变量计数,再把这个数的每位分离出来显示,所以导致有点闪屏,此版本使用定时器中断,而且没有用unsigned long int 之类的变量,而是用数组Val[8] 来计数, 主函数只负责显示,其它的在中断函数里面处理,这样显示一点都不闪屏, 备注: 可以用ULN2003A 接在数码管的com 口来提高驱动能力,ULN2003A里面有7个NPN三极管, 可以大大提高驱动能力 #include <> sbit SCK = P1^1; // 数据输入时钟线,脉冲 sbit SI = P1^0; // 数据线 sbit RCK = P1^2; // 锁存 unsigned char code SMG[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; // 段码 unsigned char code Wei[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // 位选unsigned char Val[8] = {0}; // 要显示的数据 ************************ 函数声明************************ void interrupt_init(void); void timer_init(void); 控制74HC595输出数据 void Output(void) { RCK = 0; RCK = 1; } 向74HC595中写入一字节数据 void Write_Byte(unsigned char dat) { unsigned char i = 0; for(i=0; i<8; i++) { SCK = 0; SI = dat & 0x80;

stm32使用三片74HC595级联程序代码

stm32使用三片74HC595级联程序代码 /**************************************************************** ******** Function: Read_74HC595 Description: 读取n 片74HC595 的输入数据Calls: HC595_delay;GPIO_ResetBits;GPIO_SetBits;Data Accessed: 无Data Updated: 无Input: HC595x:用户使用的595 端口,类型定义在74HC595.h 中ChipNum: 用户使用的595 端口上连接的芯片个数Output: DataBuf: 输出数据 存放缓冲区Return: 无Others: 此模块为Stm32 单片机中使用,调试时在72M 系统时钟下 ******************************************************************** *****/ void Write_74HC595(HC595 HC595x,unsigned char ChipNum,unsigned char *DataBuf){ unsigned char i = 0; unsigned char DataBufTmp = 0; GPIO_ResetBits(HC595x.Lck.Port, HC595x.Lck.Pin); //设置LCK 为低电平,上升 沿数据锁存for(; ChipNum>0; ChipNum--) { DataBufTmp = *DataBuf; for(i=0; itips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

I0口驱动74LS164数码管静态显示程序

74LS164 1、器件功能作用 8 位串入,并出移位寄存器 2. 概述 74HC164、74HCT164 是高速硅门 CMOS 器件,与低功耗肖特基型 TTL (LSTTL) 器件的引脚兼容。74HC164、74HCT164 是 8 位边沿触发式移位寄存器,串行输入数据,然后并行输出。数据通过两个输入端(DSA 或 DSB)之一串行输入;任一输入端可以用作高电平使能端,控制另一输入端的数据输入。两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。 时钟 (CP) 每次由低变高时,数据右移一位,输入到 Q0, Q0 是两个数据输入端(DSA 和 DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。 主复位 (MR) 输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。 3. 特性 ?门控串行数据输入 ?异步中央复位 ?符合 JEDEC 标准 no. 7A ?静电放电 (ESD) 保护: ·HBM EIA/JESD22-A114-B 超过 2000 V ·MM EIA/JESD22-A115-A 超过 200 V 。 ?多种封装形式 ?额定从 -40 °C 至+85 °C 和 -40 °C 至+125 °C 。 4. 功能图

图 1. 逻辑符号 图 2. IEC 逻辑符号 图 3. 逻辑图

图 4. 功能图 5. 引脚信息 图 5. DIP14、SO14、SSOP14 和 TSSOP14 封装的引脚配置引脚说明 6. 功能表(真值表)

H = HIGH(高)电平 h = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 HIGH(高)电平L = LOW(低)电平 l = 先于低-至-高时钟跃变一个建立时间 (set-up time) 的 LOW(低)电平q = 小写字母代表先于低-至-高时钟跃变一个建立时间的参考输入(referenced input) 的状态 ↑ = 低-至-高时钟跃变 7. 电器特性

两片74HC595级联驱动两个四连体数码管

两片74HC595级联驱动两个四连体数码管 74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。 数据在SHcp的上升沿输入,在STcp的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。 我的硬件连接:用级联方式连接! 工作顺序:单片机先送1个8位数据到第一个595的内部移位寄存器->然后数据会送到内部的输出寄存器->输出 当MR(10引脚)为高电平,OE(13引脚)为低电平时,数据在SH CP上升沿进入移位寄存器,在ST CP上升沿输出到并行端口。 可能这还不太好理解,没关系,咱去程序应用中理解! 请看一个简单的程序: sbit SDA1 = P0^0; //串行数据输入,对应595的14脚SER sbit SCL1 = P0^1; //移位寄存器时钟输入,对应595的11脚SCK sbit SCL2 = P0^2; //存储寄存器时钟输入,对应595的12脚RCK unsigned char code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0 1 2 3 4 5 6 7 8 9 unsigned char code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void delay2ms(void) { unsigned char i,j; for(i=133;i>0;i--) for(j=6;j>0;j--); } void 595_in(unsigned char Data) { unsigned char i; for(i = 0; i < 8; i++) //循环8次,刚好移完8位

串入并出芯片74HC595应用实例

基于proteus的51单片机仿真实例七十五、串入并出芯片74HC595应用实例 标签: proteus单片机实例芯片应用2010-02-24 00:33 1、本例中利用一片595控制一个数码管显示。实现了利用3个IO口控制8位数据的输出 2、74HC595的控制端口: 1)SH_CP(11脚):移位时钟脉冲输入端。在上升沿时移位寄存器将数据移位 2)DS(14脚):串行数据输入端。本例通过移位运算将每次移位的数据送到PWD寄存器的进位标志位CY,CY再将值传递给DS引脚,8次移位后完成一个字符的串行传送。 3)ST_CP(12脚):锁存脉冲控制端,在上升沿时移位寄存器的数据被传入存储寄存器,这时如果OE端为低电平,传入存储器的数据会直接输出到输出端Q0-Q7。本例在一个字节的移位操作完成后,通过在ST_CP端产生一个上升沿将数据送出。 4)/MR(10脚):低电平时将移位寄存器数据请0.一般情况下接VCC 5)/OE(13脚):高电平时输出端禁止输出(高阻态)。低电平时允许数据输出 使用74HC595的优点是能锁存数据,这样在移位过程中可以保持输出端的数据不变。而 74HC164则没有这种功能。 //利用74HC595实现端口扩展 #include // 寄存器头文件包含 #include // 空操作函数,移位函数头文件包含 sbit SH_CP = P2^0; //移位时钟脉冲端口 sbit DS = P2^1; // 串行数据输入端口 sbit ST_CP = P2^2; //锁存端口 unsigned char temp; unsigned char code disp_buff[] =

怎样用单片机驱动LED数码管显示

怎样用单片机驱动LED数码管显示 驱动LED数码管有很多方法,按显示方式分,有静态显示和动态(扫描)显示,按译码方式可分硬件译码和软件译码之分。 静态显示就是显示驱动电路具有输出锁存功能,单片机将所要显示的数据,显示数据稳定,占用很少的CPU时间。动态显示需要CPU时刻对显示器件进行数据刷新,显示数据有闪烁感,占用的CPU时间多。 这两种显示方式各有利弊;静态显示虽然数据稳定,占用很少的CPU 时间,但每个显示单元都需要单独的显示驱动电路,使用的硬件较多; 动态显示虽然有闪烁感,占用的CPU时间多,但使用的硬件少,能节 省线路板空间。 硬件译码就是显示的段码完全由硬件完成,CPU只要送出标准的BCD 码即可,硬件接线有一定标准。软件译码是用软件来完成硬件的功能,硬件简单,接线灵活,显示段码完全由软件来处理,是目前常用的显示驱动方式。 比较常用的显示驱动芯片有:74LS164 , CD4094+ULN2003(2803) ,74HC595+ULN2003(2803) , TPIC6B595,AMT9095B, AMT9595等许多。 另外,市场上还有一些专用的LED扫描驱动显示模块如MAX7219等,功能很强,价格稍高一些。下面是一个用74LS164驱动显示的例子和一个用4094扫描驱动显示的例子: ? 上例图中加了一个PNP型的三极管来控制数码管的电源,是因为164没有数据锁存端,数据在传送过程中,对输出端来说是透明的,这样,数据在传送过程中,数码管上有闪动现象,驱动的位数越多,闪动现象越明显。为了消除这种现象,在数据传送过程中,关闭三极管使数码管没电不显示,数据传送

74HC595驱动数码管上显示数字

/******************************************************************************* * 标题: 试验74HC595驱动数码管上显示数字(C语言)* 连接方法:JP12用条线冒短接JP3和JP2 用8PIN排线连接 ******************************************************************************** * 通过本例程了解74HC595(串入并出)基本原理和使用* 请学员认真消化本例程,懂74C595在C语言中的操作* ********************************************************************************/ #include #include #define NOP() _nop_() /* 定义空指令*/ //SPI IO sbit MOSIO =P3^4; //串行数据线 sbit R_CLK =P3^5; //数据并行输出控制 sbit S_CLK =P3^6; //串行时钟线 void delay(unsigned int i); //函数声名 void HC595SendData(unsigned char SendV al); //函数声名 // 此表为LED 的字模// 0 1 2 3 4 5 6 7 8 9 A b c d E - L P U Hidden _ (20) unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71}; main() { unsigned char HC595SendVal; unsigned int LedNumVal = 1; while(1) { LedNumVal++; HC595SendVal = LED7Code[LedNumV al%16]; //LED7;显示0-F LedNumVal%10 显示0-9 HC595SendData(HC595SendVal); //调用595驱动函数 delay(200); } } /*******************延时函数************/ void delay(unsigned int i) { unsigned int j; for(i; i > 0; i--) //CPU循环执行i*300次 for(j = 300; j > 0; j--);

74HC164应用实例:驱动数码管两例(电路图和源程序)

实例1 74HC164是串行输入,并行输出接口器件,可用在单向的并行输出/并行地址锁存等. 74HC164因为价格便宜,容易使用特别适合使用在在需要用到数码管显示IO口又比较紧张的电子产品中,下面浅谈使用方法: 1. 首先先了解他的引脚功能和逻辑图,如下图: 图1 引脚名称和用途

图2 真值表 通过真值表我们可以了解到,A,B两个输入端是互锁的,CLK上升沿时数据移入移位寄存器中,CLEAR为清零用的,接低电平时所有端口都输出低电平,了解了真值表之后开始运用了,先给出如下原理图: 图3 原理图

图中,采用义隆的EM78P153作为控制芯片,P50作为CLK时钟信号,注意平时数据不传输时,时钟信号是不发送的应一直保持低电平或者高电平,数据需要传输的时候才输出时钟信号^_^ ,继续P51作为移位数据输出端,接到74HC164的B端,A端接高电平,当然也可以AB端短路,然后连接到DATA移位数据端,P52作为数码管的选通信号(也可以叫消隐^_^), 作用是使数据传输过程暂时关闭显示,以免显示出不需要的数据,原因是应为164不带锁存功能,数据传输过程是一位一位的向高位移位输出的,所以要等数据全部移入后才打开始点亮数码管. 注意了哦,通过查看164的规格书发现,164输出高电平电流比输出低电平电流要小,亦称灌电流大,扇出电流弱,所以适合选用共阳数码管,如图,本人偷懒没有画出那个数码管的8字 该介绍的介绍的差不多了,废话少说,该开始干活了,任务是: 显示0-9 每秒+1 ,到9后又返回0,一直循环显示,根据任务得到如下流程图: 1. 显示部分: 将需要显示的数值送入A ==>查表求得显示段码==>将段码逐位移入164==>8位移完后点亮数码管==>延时==>返回第一步执行 2. 中断部分: 进入中断==>保存现场(以备调查取证,送你入狱^_^)==>重置TCC==>够1秒钟将需要显示的数据+1,并重置,不够就退出; 根据以上要求就开始写代码调试了,要注意一点,数据移位时一定要记得高位在前哦,否则显示错误别怪我没有说清楚,我当年实验时就因为这个数据移位方向反了排查了半天,甚至以为是时钟频率不对,又以为时许不对.....搞了半天,NND后来重看DATASHEET才发现,原来是低级错误啊,呜呼哀哉.......,希望你不要重蹈我覆辙,哎哟!! 谁! 谁! 谁扔砖头上来? 啥? 你扔的? 我废话太多.........,那俺少来两句,继续上菜, 咦好像没啥可说的了,上源程序吧 1.;中断部分: 2. 3.;;;;;;;;;;中断;;;;;;;; 4.INTPUT: 5.MOV TEMPA, A;

51单片机+74HC595驱动数码管程序

51单片机+74HC595驱动数码管程序 这里是电路图:完整的源码和图纸下载地址:51hei/bbs/dpj-20392-1.html 下面是51 单片机驱动74hc595 芯片的程序:#include //包含51 单片机的头文 件#include #define uint unsigned int#define uchar unsigned char//sbit sin_595 =P1;//sbit rclk_595 =P1;//sb it sclk_595 =P1 ;//sbit s_clr =P1;sb it a_cp_595 =P2; //串行移位时钟脉冲sh_cp_595sbit b_cp_595 =P2;//输出锁存器控制脉冲 st_cp_595//sbit _oe_595 =P1 ; //8 位并行输出使能/禁止(高阻态)sbit ds_595 =P2 ; //串行数据输入extern uchar datas[6]; //存放6 个数码管的显示数字uchar ledcode[]={0xC0,// 00xF9,// 10xA4,// 20xB0,// 30x99,// 40x92,// 50x82,// 60xF8,// 70x80,// 80x90,// 90x88,// A0x83,// B0xC6,// C0xA1,// D0x86,// E0x8E// F};void delay(uint z){uint t1,y;for(t1=z;t1>0;t1--)for(y=110;y>0;y--);}void led_display(void){ uchar i,j; bit testb; uchar bdata movebit[6]; uchar bdata test; //_oe_595=0; //选中数码管for(i=0;i<6;i++) movebit[i]=ledcode[datas[i]]; // P1=0; delay(1); for(i=0;i<6;i++) //数据移位{ test=movebit[i]; for(j=0;j<8;j++) { testb=test&0x80; test=test<<1; if(testb) { ds_595=1; } else {ds_595=0; }a_cp_595=1; a_cp_595=0; } //数据移位} b_cp_595=0; b_cp_595=1; b_cp_595=0;} tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!

proteus原理图及程序(74HC595级联点亮LED)

#include //51头文件 #include // #define uchar unsigned char #define uint unsigned int //--定义使用的IO口--// sbit DS=P2^1; //串行数据输入 sbit SHCP=P2^0; //移位寄存器时钟输入,为低电平时将595数据清零 sbit STCP=P2^2; //片选,存储寄存器时钟输入,STCP时钟上升沿时,将595数据送入存储寄存器 uchar data adata; void delayms(uint t); void Input(uchar ch); void Output(adata); /******************************************************** * * * 延时子程序* * * *********************************************************/ void delayms(uint t) { uchar i; while(t-->0){ for(i=0;i<125;i++){;}

} } /******************************************************** * * * 输入数据子程序* * * *********************************************************/ void Input(uchar ch) //将显示数据送入74HC595内部移位寄存 { uchar BitCounter=8; //位数控制 uchar tmp; do { tmp=ch; SHCP=0; if((tmp&0x80)==0x80) //如果最高位是1 DS=1; else DS=0; SHCP=1; tmp=ch<<1; //左移 ch=tmp; BitCounter--; _nop_(); STCP=0; } while(BitCounter); } /******************************************************** * * * 输出数据子程序* * * *********************************************************/ void Output(adata) //将移位寄存器内的数据锁存到输出寄存器并显示,adata为输出的数据{ STCP=0; _nop_(); _nop_(); _nop_(); STCP=1; //上升沿将数据送到输出锁存器 _nop_(); _nop_(); _nop_();

(完整版)74ls164动态驱动多位数码管

74ls164 能否动态驱动多位数码管void display() //数码显示 { SCON=0; //初始化串行口方式SBUF=dispcode[ge]; while(!TI); TI=0; led4=0; delay(2); led4=1; SBUF=dispcode[shi]; while(!TI); TI=0; led3=0; delay(2); led3=1; SBUF=dispcode[bai]; while(!TI); TI=0; led2=0; delay(2);

SBUF=dispcode[qian]; while(!TI); TI=0; led1=0; delay(2); led1=1; SBUF=dispcode[wan]; while(!TI); TI=0; led0=0; delay(2); led0=1; } 74ls164数码管驱动(第二个程序) #define clock PORTD.1 #define date PORTD.0 #define clock_en DDRD.1 #define date_en DDRD.0 unsigned char lab[2][10]={ 0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09, 0x02,0x9E,0x24,0x0C,0x98,0x48,0x40,0x1E,0x00,0x08}; void send(unsigned char w) { unsigned char i; for(i=0;i<8;i++) { clock=0; date=w&1;

74HC595测试程序

//74HC595测试程序,在一个数码管上循环显示1~9. #include #include sbit sdat=P2^0; //串行数据输入端 sbit sclk=P2^1; //移位寄存器时钟输入端 sbit srck=P2^3; //存储寄存器时钟输入 sbit srst=P2^4; //主复位端,低电平复位 unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90}; //共阳极编码 void delay(unsigned int z ) { unsigned char x; while(z--) //1ms延时程序 for(x=120;x>0;x--); } void txdbyte(unsigned char dat) { unsigned char i,j; j=dat; //74HC595的数据串入并出子程序 for(i=0;i<8;i++) { sdat=(bit)(j&0x80); //从最高位开始传送 sclk=0; //发送一个上升沿信号,告诉对方读取数据发送线上的数据线 sclk=1; //锁存到移位寄存器 j<<=1; } srck=0; //锁存到输出并口 srck=1; } void main() { unsigned char i; srst=0; //先复位 delay(2); srst=1; //复位完毕 while(1) for(i=0;i<10;i++) { txdbyte(~table[i]); //将0~9发送到数码管

74hc595和74hc165级连c51程序

#include #define uchar unsigned char #define uint unsigned int sbit DS=P1^0 ; //595 sbit SH=P1^1 ; sbit ST=P1^2 ; //sbit MR=P1^3; sbit CLK=P1^4;//165 sbit INH=P1^5; sbit LD=P1^6; sbit SO=P1^7; //msec(511);0.5s //msec(2);2ms //msec(1021);//1s void msec(unsigned long x) //延时{ unsigned char j; while(x!=0) { x--; for(j=0;j<116;j++) {;} } } void hc595(uchar *p,n) { uchar i,j; for(;n>0;n--) { i=*p; for(j=0;j<8;j++) { DS=i&0x80; i=i<<1; SH=0; SH=1; } ST=0;

ST=1; ST=0; p++; } } void hc165(uchar *d,n) { uchar i=0,j,c=0; LD=1; LD=0; LD=1; INH=0; for(j=0;j<(n*8);j++) { CLK=1; i=i<<1; i=i|SO; CLK=0; c++; if(c==8){*d=i;c=0;d++;} } } main() {uchar *P,*D; uchar i,a[5]={0x00,0x00,0x00,0x00,0x01},b[5]={0x0ff,0x0ff,0x0ff,0x0ff,0x0ff}; P=a; D=b; hc595(P,5); hc165(D,5); P3=b[4]; while(1); for(i=0;i<34;i++) { if(i==8){a[3]=0x01; a[4]=0x00;} if(i==16){a[2]=0x01;a[3]=0x00;} if(i==24){a[1]=0x01;a[2]=0x00;} if(i==32){a[0]=0x01;a[1]=0x00;} P=a; hc595(P,5); a[0]<<=1; a[1]<<=1; a[2]<<=1;

使用74HC595实现IO口的扩展

使用74HC595实现I/O口的扩展 一、实验目的 1. 了解74HC595(串入并出)基本原理和使用 2. 了解数码管的基本原理和驱动方式 3. 学会使用74HC595来驱动静态数码管 二、实验器材 C51单片机开发板(含74HC595芯片,静态数码管)1块 8PIN排线1根 数据线1根 三、实验原理 1. 数码管 数码管是一种半导体发光器件,其基本单元是发光二极管。数码管按段数分为七段数码管和八段数码管(还有一种“米”字型的数码管,其段数更多),八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示),其基本原理是:将所有LED的一端(正极、负极均可)连在一起作为一个公共端,然后通过分别控制这组LED的另一个端口来使部分LED点亮,从而达到显示一定字形的目的。 (1)数码管的分类 按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。我们在实际使用中一定要搞清楚数码管是共阴极的还是共阳极的。 (2)数码管段、位引脚的确定(以4位8段数码管为例) 数码管引脚测量分三步:极性判断(共阳极还是共阴极)、公共端判断(位选端口)、段码端判断(段选端口)。 首先要确定数码管是共阴极还是共阳极的:找一个3到5V的直流电源,准备几个1K或者几百欧姆的电阻。将电源的正极串接一个电阻后连在数码管的任意一个脚上,然后将电源的负极逐个接到数码管的其余引脚上,观察数码管的某一段是否会点亮,如果全部引脚试过都没有亮的,那么将电源正极(串电阻)换一个引脚再试,直到有一个LED发光,这时固定电源负极不动,电源正极(串电阻)逐个接到数码管的其余引脚上,如果有8段LED都亮,说明该数码管是共阴极的。相反,按住电源正极不动,电

相关文档
最新文档