使用SPI接口的74HC595控制 8位数码管显示

使用SPI接口的74HC595控制 8位数码管显示
使用SPI接口的74HC595控制 8位数码管显示

使用SPI接口控制74HC595 LED显示

SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。 SPI接口是在CPU和外围低速器件之间进行同步串行数据传输,在主器件的移位脉冲下,数据按位传输,为全双工通信,数据传输速度总体来说比I2C总线要快,速度可达到几Mbps。 SPI接口是以主从方式工作的,这种模式通常有一个主器件和一个或多个从器件,其接口包括以下四种信号:

(1)MOSI –主器件数据输出,从器件数据输入

(2)MISO –主器件数据输入,从器件数据输出

(3)SCLK –时钟信号,由主器件产生

(4)/SS –从器件使能信号,由主器件控制

在BASCOM中,提供了软件实现的SPI接口的语句,同样BASCOM也有支持硬件SPI的语句。

下面将使用三个例子来说明如何在BASCOM中使用SPI接口。

在介绍例子之前,我们先了解一下硬件连接图,连接如图1所示。

图中共使用三片74HC595芯片,分别控制三个数码管,三片74HC595通过Q7’引脚进行级联。第一片74HC595的DS引脚连接到了ATmega88的MOSI引脚,而SH_CP引脚连接到了ATmega88的SCK引脚,ST_CP 引脚连接到了ATmega88的PB1引脚。

一、使用硬件SPI接口控制74HC595

'------------------------------------------------------------------------

'使用芯片: A Tmega88,

'晶振: 内部8MHz晶振

'email: support@https://www.360docs.net/doc/dc554362.html,

'软件版本: Bascom-A VR 1.11.8.3 Full version

'------------------------------------------------------------------------

$regfile = "m88def.dat" '芯片为A Tmega88

$crystal = 8000000 '8M晶振频率

$hwstack = 32 '设置堆栈大小

$swstack = 10

$framesize = 40

Dim I As Byte

Dim A(3) As Byte

Latch Alias Portb.1

Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Y es ,

Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0

'定义使用单片机自带的硬件SPI,SPI中断未使能,数据发送时,高位先发送。

'设为SPI主设备,时钟4分频

Spiinit 'SPI初始化

Restore Segtab '获取要显示数据的内容

For I = 1 To 3

Read A(i)

Next I

Spiout A(1) , 3 '输出要显示的内容给74HC595,分别输出A(1),A(2),A(3)

Latch = 1? '使能显示

Waitus 10

Latch = 0

Do

Loop

End

'************************************************************************* ******

'--------------------------专用字形表------------------------------------------

Segtab:

Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB7 '0 1 2 3 4 5 6 7 8 9

二、使用软件SPI接口控制74HC595

'------------------------------------------------------------------------

'使用芯片: A Tmega88,

'晶振:内部8MHz晶振

'email: support@https://www.360docs.net/doc/dc554362.html,

'软件版本: Bascom-A VR 1.11.8.3 Full version

'------------------------------------------------------------------------

$regfile = "m88def.dat" '芯片为A Tmega88

$crystal = 8000000 '8M晶振频率

$hwstack = 32 '设置堆栈大小

$swstack = 10

$framesize = 40

Const On = 1

Const Off = 0

Dim I As Byte

Dim A(3) As Byte

Latch Alias Portb.1

Config Spi = Soft , Dout = Portb.3 , Ss = None , Clock = Portb.5

'定义使用软件SPI,pb3作为数据输出口,pb5作为时钟引脚

Spiinit 'SPI初始化

Restore Segtab '获取要显示数据的内容

For I = 1 To 3

Read A(i)

Next I

Spiout A(1) ,3

'输出要显示的内容给74HC595,分别输出A(1),A(2),A(3)

Latch = Off '使能显示

Waitus 10

Latch = On

Do

Loop

End

'********************************************************************

'--------------------------专用字形表------------------------------------------

Segtab:

Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB7

'0 1 2 3 4 5 6 7 8 9

三、使用软件SPI接口控制74HC595

'------------------------------------------------------------------------

'使用芯片: A Tmega88,

'晶振: 内部8MHz晶振

'email: support@https://www.360docs.net/doc/dc554362.html,

'软件版本: Bascom-A VR 1.11.8.3 Full version

'------------------------------------------------------------------------

$regfile = "m88def.dat" '芯片为A Tmega88

$crystal = 8000000 '8M晶振频率

$hwstack = 32 '设置堆栈大小

$swstack = 10

$framesize = 40

Const On = 1

Const Off = 0

Ledata Alias Portb.3 '数据输出口

Ledclk Alias Portb.5 '时钟输出口

Latch Alias Portb.1

Dim I As Byte

Dim A(3) As Byte

Restore Segtab '获取要显示数据的内容

For I = 1 To 3

Read A(i)

Next I

For I = 3 To 1 Step -1

Shiftout Ledata , Ledclk , A(i) , 1

'输出要显示的内容给74HC595

Next I

Latch = Off '使能显示

Waitus 10

Latch = On

Do

Loop

End

'********************************************************************

'--------------------------专用字形表------------------------------------------

Segtab:

Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB7 '0 1 2 3 4 5 6 7 8 9

总结:以上是AVR单片机使用SPI接口控制74HC595的例子,这些例子经过简单的修改就可以应用到其它具有SPI即可的芯片上,如SPI接口的Flash存储芯片AT45DB系列、SPI接口的时钟芯片DS1302、SPI 接口的AD或DA芯片等等。

对于AVR mega系列单片机一般都具有硬件SPI接口,建议客户使用硬件SPI接口,这样可以占用更少的硬件和软件资源。但软件实现SPI接口,也有一定的优势,如它使用的IO口不是固定的,可以根据需要来指定,它一次发送的数据可以不是8位,而是可以根据需要来指定。

Shiftout VS Spiout

这两个语句都是SPI输出语句,与它们对应的分别是shiftin和spiin

shiftout语句可以使用在硬件spi或软件spi接口,通过config语句来确定:

Config Spi = Hard/soft

Shiftout语句使用在软件spi接口。

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

// 74HC595/165驱动程序

// (165,595均为两片)

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

unsigned int LED;

unsigned int KEY_DA TA;

void Driver_595(unsigned char Bit,unsigned char State)

{

if(State)

LED|=(0x00001<

else

LED&=~(0x00001<

SPI_W_R((int)(LED>>8));

set_bit(1,0);

clr_bit(1,0);

SPI_W_R((int)LED);

set_bit(1,0);

clr_bit(1,0);

}

void Port_Init(void)

{

DDRB=0xff;

PORTB=0x00;

}

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

void Driver_165(void) //Bite所取位0~15,State为改位的状态0,1

{

unsigned char a1;

unsigned char a2;

clr_bit(1,3);

set_bit(1,3);

a1=SPI_W_R(0x00); //74HC165输入使能

a2=SPI_W_R(0x00); //读出键值

KEY_DA TA=a1;

KEY_DA TA<<=8;

KEY_DA TA+=a2;

return;

}

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

void set_bit(unsigned char port,unsigned char n)//port为端口号分别用0~3表示A~D,n该端口的引脚号0~7

{

switch(port)

{

case 0x00:

PORTA|=(0x01<

break;

case 0x01:

PORTB|=(0x01<

break;

case 0x02:

PORTC|=(0x01<

break;

case 0x03:

PORTD|=(0x01<

break;

}

}

//****************OK**********************

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

void clr_bit(unsigned char port,unsigned char n)//port为端口号分别用0~3表示A~D,n该端口的引脚号0~7

{

switch(port)

{

case 0x00:

PORTA&=~(0x01<

break;

case 0x01:

PORTB&=~(0x01<

break;

case 0x02:

PORTC&=~(0x01<

break;

case 0x03:

PORTD&=~(0x01<

break;

}

}

//***************OK*********************************************** unsigned char SPI_W_R(unsigned char data)

{

SPCR=0x50; //SPI为查询方式,系统时钟四分频

SPDR=data; //写入数据

while((SPSR>>7)==0x00); //等待数据发送完毕

return SPDR; //返回收到的数据

}

//*********************OK*****************************************

实验四 数码管显示控制

实验四数码管显示控制 一、实验目的 1、熟悉Keil uVision2软件的使用; 2、掌握LED数码管显示接口技术; 3、理解单片机定时器、中断技术。 二、实验设备及仪器 Keil μVision2软件;单片机开发板;PC机一台 三、实验原理及内容 1、开发板上使用的LED数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。 图4.1共阴四位八段LED数码管的原理图 图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。 实验开发板中LED数码管模块的电路原理图,如图4.2所示。 a~h SP2 SP1 P0.0~P0.3 P0.4~P0.7图4.2 LED数码管模块电路原理图

图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。 训练内容一:轮流点亮数码管来检测数码管是否正常。参考程序: ORG 00H AJMP MAIN MAIN: SETB P1.2;LED流水灯模块锁存器的控制位 MOV P0,#0FFH;关闭LED灯 CLR P1.2 SETB P1.3 ;点阵模块的行控制锁存器 MOV P0,#0 ;关闭点阵行 CLR P1.3 MOV A,#11111110B;数码管“位选信号”初值,低电平有效 LOOP:SETB P1.1;数码管位控制锁存器有效 MOV P0,A CLR P1.1 RL A ;形成新的“位选信号”,为选择下一位数码管做准备 SETB P1.0;数码管段控制锁存器有效 MOV P0,#0FFH ;数码管的所有段点亮,显示“8” CLR P1.0 CALL DELAY SJMP LOOP DELAY:MOV R5,#0;延时子程序 D1: MOV R6,#0 D2:NOP DJNZ R6,D2

7段数码管

成绩 兰州商学院 信息工程学院本科生课程设计报告 课程名称:EDA技术 设计题目: 7段数码管控制接口 系别:信息工程学院 专业 (方向):电子信息工程 年级、班:2011级(2)班 学生姓名:马曼曼 学号: 201107030238 指导教师:郭华 2014 年6 月26 日

7段数码管的控制接口 马曼曼 (电子信息工程2班) 摘要:在综合叙述和分析控制系统中常用的七段数码管显示接口技术的设计思路与性能差异的基础上, 介绍一种特别适合于需要同时驱动较多位数数码管的场合使用的动态显示新技术, 利用实验室具有的先进EDA实验箱,用QuartusII实验仿真,其硬件接口电路与软件接口编程均比较简单, 同时又能很好地保证显示的亮度。通过提供实例, 已经获得工程应用。 关键字:EDA实验箱七段数码管动态显示QuartusII 7 digital tube control interface Ma Manman (Electronic information engineering 2 class) Abstract:In the comprehensive description and analysis of control system that is commonly used in seven segment digital tube display interface technology of the design and the performance difference, on the basis of introduction to a special suitable for the need to drive at the same time a large number of digital tube is using the dynamic display of the new technology, using laboratory with advanced EDA experiment box, the hardware interface circuit and the interface of software programming are relatively simple, and can ensure the brightness of the display.By providing examples, has won the

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 结束 //-------------------------------------- //++++++++++++++++++++++++++++++++++++++

数电课程设计-数码管显示控制器的设计与实现

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: 数码管显示控制器的设计与实现 初始条件: 555定时器、74LS160计数器、74LS161计数器、74LS153数据选择器、74LS48译码器、74LS04非门与数码管、电阻、电容等相关元件。 要求完成的主要任务: 1、设计任务 根据已知条件,完成对数码管显示控制器的设计、装配与调试。 2、设计要求 (1)、能自动一次显示出数字 0、1、2、3、4、5、6、7、8、9(自然数列),1、 3、5、7、9(奇数列), 0、2、 4、6、8(偶数列),0、1、0、1、2、3、4、 5、6、7(音乐符号序列);然后再从头循环; (2)、打开电源自动复位,从自然数列开始显示。 时间安排: 1、2012 年 6 月 8 日分班集中,布置课程设计任务、选题;讲解课设具体实施计划与课程设计报告格式的要求;课设答疑事项。 2、2012 年 6 月 9 日至 2012 年 7 月 3 日完成资料查阅、设计、制作与调试;完成课程设计报告撰写。 3、2012 年 7 月 4 日提交课程设计报告,进行课程设计验收和答辩。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

目录 摘要 (3) Abstact (4) 引言 (5) 1设计背景 (6) 1.1设计任务 (6) 1.2设计要求 (6) 1.3指导思想 (6) 2方案论证 (7) 2.1方案说明 (7) 2.2方案原理 (7) 3电路的设计与分析 (8) 3.1电路的总体设计 (8) 3.2电路的原理框图 (9) 3.3元电路的设计与分析 (9) 3.3.1多谐振荡电路的设计与分析 (9) 3.3.2计数电路的设计与分析 (11) 3.3.3译码显示电路的设计与分析 (13) 4电路仿真、调试与分析 (16) 4.1脉冲产生电路的仿真 (16) 4.2总电路的仿真 (17) 4.3运行结果分析 (17) 5心得与体会 (18) 附录1元器件清单 (19) 附录2参考文献 (20)

七段数码管显示

七段数码管显示设计报告 目录 一、设计任务 二、题目分析与整体构思 三、硬件电路设计 四、程序设计 五、心得体会

一.设计任务 数码的显示方式一般有三种:第一种是字型重叠式;第二种是分段式;第三种是点阵式。目前以分段式应用最为普遍,主要器件是七段发光二极管(LED)显示器。它可分为两种,一是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一是共阴极显示器(发光二极管的阳极都接在一个公共点上,使用时公共点接地)。 数码管动态扫描显示,是将所用数码管的相同段(a~g 和p)并联在一起,通过选位通 信号分时控制各个数码管的公共端,循环依次点亮各个数码管。当切换速度足够快时,由于人眼的“视觉暂留”现象,视觉效果将是数码管同时显示。 根据七段数码管的显示原理,设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分: 1. 显示数据的设置:程序设定4 位数码管从左至右分别显示1、2、3、4; 2. 动态扫描:实现动态扫描时序。 利用EXCD-1 开发板实现七段数码管的显示设计,使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接。 二.题目分析与整体构思 使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,呈“”字状,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA 相应引脚。SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4 为四位7 段数码管的位选择端。当其值为“1”时,相应的7 段数码管被选通。当输入到7 段数码管SEG_A~ SEG_G 和SEG_DP 管脚的数据为高电平时,该管脚对应的段变亮,当输入到7 段数码管 SEG_A~SEG_G 和SEG_DP 管脚的数据为低电平时,该管脚对应的段变灭。该四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接,当DIP 开关全部拨到上方时(板上标示为:7SEGLED),FPGA 的相应IO 引脚和四位7 段数码管连接,7 段数码管可以正常工作;当DIP 开关全部拨到下方时(板上标示为:EXPORT5),FPGA 的相应IO引脚与7 段数码管断开,相应的FPGA 引脚用于外部IO 扩展。 注意:无论拨码开关断开与否,FPGA 的相应IO 引脚都是与外部扩展接口连接的,所 以当正常使用数码管时,不允许在该外部扩展接口上安装任何功能模块板。 数码管选通控制信号分别对应4 个数码管的公共端,当某一位选通控制信号为高电平时,其对应的数码管被点亮,因此通过控制选通信号就可以控制数码管循环依次点亮。一个数码管稳定显示要求的切换频率要大于50Hz,那么4 个数码管则需要50×4=200Hz 以上的切换频率才能看到不闪烁并且持续稳定显示的字符。 三.硬件电路设计 设计结构图如下:

7段数码管显示电路

4.4 显示模块 4.4.1 7段数码管的结构与工作原理 7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成 数字显示,另外一个圆形的发光二极管显示小数点。 当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管,如图4.9所示。 4.4.2 7段数码管驱动方法 发光二极管(LED 是一种由磷化镓(GaP )等半导体材料制成的,能直接将电能转变成光能的发光显示器件。当其内部有一一电流通过时,它就会发光。 7段数码管每段的驱动电流和其他单个LED 发光二极管一样,一般为5~10mA ;正向电压随发光材料不同表现为1.8~2.5V 不等。 7段数码管的显示方法可分为静态显示与动态显示,下面分别介绍。 (1) 静太显示 所谓静态显示,就是当显示某一字符时,相应段的发光二极管恒定地寻能可截止。这种显示方法为每一们都需要有一个8位输出口控制。对于51单片机,可以在并行口上扩展多片锁存74LS573作为静态显示器接口。 静态显示器的优点是显示稳定,在发光二极管导通电注一定的情况下显示器的亮度高,控制系统在运行过程中,仅仅在需要更新显示内容时,CPU 才执行一次显示更新子程序,这样大大节省了CPU 的时间,提高了CPU 的工作效率;缺点是位数较多时,所需I/O 口太多,硬件开销太大,因此常采用另外一种显示方式——动态显示。

(2)动态显示 所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。虽然在同一时刻只有一位显示器在工作(点亮),但利用人眼的视觉暂留效应和发光二极管熄 灭时的余辉效应,看到的却是多个字符“同时”显示。显示器亮度既与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。调整电流和时间参烽,可实现亮度较高较稳定的显示。若显示器的位数不大于8位,则控制显示器公共极电位只需一个8位I/O 口(称为扫描口或字位口),控制各位LED 显示器所显示的字形也需要一个8位口(称为数据口或字形口)。 动态显示器的优点是节省硬件资源,成本较低,但在控制系统运行过程中,要保证显示器正常显示,CPU 必须每隔一段时间执行一次显示子程序,这占用了CPU 的大量时间,降低了CPU 工作效率,同时显示亮度较静态显示器低。 综合以上考虑,由于温度显示为精确到小数点后两位,故只需4个数码管,又考虑到CPU 工作效率与电源效率,本毕业设计采用静态显示。为共阳极显示。 4.4.3 硬件编码 动74LS47是一款BCD 码转揣为7段输出的集成电路芯片,利用它可以直接驱动共阳 极的7段数码管。它的引脚分部和真值表分别下图。

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;

7段数码管驱动芯片,7279原理与应用

HD7279A的原理与应用 作者:河北科技大学电气信息学院王改名赫苏敏王忠杰 摘要:详述一种专用的智能键盘和LED控制芯片HD7279A的工作原理、工作时序及其控制指令;介绍HD7279A与CPU及键盘显示器的接口电路,并给出实际接口电路的程序实例和实际应用中的注意事项。 关键词:HD7279A 接口电路接口程序 HD7279A硬件电路图HD7279A是一种管理键盘和LED显示器的专用智能控制芯片。它能对8位共阴极LED显示器或64个LED发光管进行管理和驱动,同时能对多达8×8的键盘矩阵的按键情况进行监视,具有自动消除键抖动并识别按键代码的功能,从而可以提高CPU工作的效率。HD7279A和微处理器之间采用串行接口,其接口电路和外围电路简单,占用口线少,加之它具有较高的性能价格比,因此,在微型控制器、智能仪表、控制面板和家用电器等领域中日益获得广泛的应用。 一、引脚说明与接口电路 279A的硬件电路如图1所示,它共有28个引脚。 RC引脚用于连接HD7279A的外接振荡元件,其典型值为R=1.5k?,C=15pF。RESET为复位端。该端由低电平变成高电平并保持25ms即复位结束。通常,该端接+5V即可。DIG0~DIG7分别为8个LED管的位驱动输出端。SA~SG分别为LED数码管的A段~G段的输出端。DP为小数点的驱动输出端。HD7279A片内具有驱动电路,它可以直接驱动1英吋及以下的LED数码管,使外围电路变得简单可靠。 DIG0~DIG7和SA~SG同时还分别是64键盘的列线和行线端口,完成对键盘的监视、译码和键码的识别。在8×8阵列中每个键的键码是用十六进制表示的,可用读键盘数据指令读出,其范围是00H~3FH。 HD7279与微处理器仅需4条接口线,其中CS为片选信号(低电平有效)。当微处理器访问HD7279A(读键号或写指令)时,应将片选端置为低电平。DATA为串行数据端,当向HD7279A 发送数据时,DATA为输入端;当HD7279A输出键盘代码时,DATA为输出端。CLK为数据串行传送的同步时钟输入端,时钟的上升沿表示数据有效。KEY为按键信号输出端,在无键按下时为高电平;而有键按下时此引脚变为低电平并且一直保持到键释放为止。(图1 HD7279A硬件电路图,点击下载) 二、电特性 表1所列为HD7279A的电特性。 参数符号测试条件最小值典型值最大值 电源电压Vcc/V . 4.5 5.0 5.5 工作电流Icc/mA 不接LED . 3 5 工作电流Icc/mA LED全亮, ISEG=10mA. 60 100 逻辑输入高电平Vih/V . 2.0 . 5.5 逻辑输入低电平Vil/V . 0 . 0.8 按键响应时间Tkey/ms 含去抖时间10 18 40 KEY引脚输入电流Iki/mA . . . 10 KEY引脚输出电流IKO/mA . . . 7 表 1

8位数码管动态显示电路设计.

电子课程设计 — 8位数码管动态显示电路设计 学院:电子信息工程学院 专业、班级: 姓名: 学号: 指导老师: 2014年12月

目录 一、设计任务与要求 (3) 二、总体框图 (3) 三、选择器件 (3) 四、功能模块 (9) 五、总体设计电路图 (10) 六、心得体会 (12)

8位数码管动态显示电路设计 一、设计任务与要求 1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。 2. 要求在某一时刻,仅有一个LED 数码管发光。 3. 该数码管发光一段时间后,下一个LED 发光,这样8只数码管循环发光。 4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。 5、研究循环地址码发生器的时钟频率和显示闪烁的关系。 二、总体框图 设计的总体框图如图2-1所示。 图2-1总体框图 三、选择器件 1、数码管 数码管是一种由发光二极管组成的断码型显示器件,如图1所示。 U13 DCD_HEX 图1 数码管 数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出 不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个 74LS161计数器 74LS138译码 器 数码管

LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。 2、非门 非门又称为反相器,是实现逻辑非运算的逻辑电路。非门有输入和输出两个端,电路符号如图2所示,其输出端的圆圈代表反相的意思,当其输入端为高电平时输出端为低电平,当其输入端为低电平时输出端为高电平。也就是说,输入端和输出端的电平状态总是反相的。其真值表如表1所示。 图2 非门 表1 真值表 输入输出 A Y 0 1 1 0 3、5V电源 5V VCC电源如图3所示。 图3 5V电源

两片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位

51单片机控制4个数码管显示

. //使用AT89c51单片机控制四个数码管动态显示0-9999 ,12MHz #include void jiayi();//加1函数 void chufa();//除法函数 void xianshi();//显示函数 void delay();//延时函数 sbit P2_0=P2^0;//个位位码 sbit P2_1=P2^1;//十位位码 sbit P2_2=P2^2;//百位位码 sbit P2_3=P2^3;//千位位码 unsigned char qianwei,baiwei,shiwei,gewei; unsigned int count=0; unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-9 void main() { while(1) { jiayi(); chufa(); xianshi(); } } void chufa()//将数字的各个位拆开 { qianwei=count/1000;//千位数 baiwei=count%1000/100; //百位数 shiwei=count%100/10; //十位数 gewei=count%10; //个位数 } void jiayi() { count=count+1; if(count==10000) count=0; } void delay()//延时 { unsigned int i,j; for(i=0;i<10;i++) { for(j=0;j<200;j++); } }

四外连体式数码管控制电路设计

中北大学 课程设计说明书 学生姓名:唐三龙学号:0805014150 学院:信息与通信工程学院 专业:电子信息科学与技术 题目:四位连体式数码管控制电路设计 指导教师:程耀瑜职称: 教授 指导教师:李文强职称: 讲师 20011 年 1 月 7 日

中北大学 课程设计任务书 2010/2011学年第一学期 学院:信息与通信工程学院 专业:电子信息科学与技术 学生姓名:唐三龙学号:0805014150 课程设计题目:四位连体式数码管控制电路设计起迄日期:12月26日~1月7日 课程设计地点:中北大学 指导教师:程耀瑜,李文强 系主任:程耀瑜

课程设计任务书

课程设计任务书

目录 1概述……………………………………………………………………………….p1 2系统总体设计…………………………………………………………………….p2 3系统模块图………………………………………………………………………. p2 4系统功能介绍……………………………………………………………………. p2 5电路总体设计…………………………………………………………………….p2 6芯片选择………………………………………………………………………….p3 6.1 74161十六进制译码器…………………………………………………….p3 6.2 7448 7段译码器…………………………………………………………….p4 6.3 138 三八译码器…………………………………………………………….p5 6.4 四位连体式数码管………………………………………………………….p6 7输入端模块选择………………………………………………………………….p7 8数码管显示模块………………………………………………………………….p8 8.1 数码管选择控制电路……………………………………………………….p8 8.2 数码管显示电路控制电路………………………………………………….p8 9 仿真结果……………………………………………………………………….p9 10 protel软件中电路设计图…………………………………………………….p10 11 课程设计感想……………………………………………………………….p11 12 参考文献…………………………………………………………………….p12

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--);

7段数码管控制引脚

《EDA技术综合设计》 课程设计报告 报告题目:计数器7段数码管控制接口技术作者所在系部: 作者所在专业: 作者所在班级: 作者姓名: 作者学号: 指导教师姓名: 完成时间:

内容摘要 掌握VHDL语言基本知识,并熟练运用VHDL语言来编写程序,来下载实践到硬件上,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。利用VHDL语言设计一个七段数码管控制引脚,在时钟信号的控制下,使6位数码管动态刷新显示十进制计数器及其进位,十二进制计数器,四位二进制可逆计数器,六十进制计数器的计数结果,这期间需要seltime分频器来动态的给各个计数器分配数码管,并显示数字的变化。 关键词:VHDL语言编程七段数码管控制引脚芯片

目录 一概述 (1) 二方案设计与论证 (1) 三单元电路设计与参数计算 (1) 3.1数码管译码器 (1) 3.2 十进制计数器 (2) 3.3六十进制计数器 (3) 3.4四位二进制可逆计数器 (5) 3.5时间数据扫描分时选择模块 (6) 3.6顶层文件 (8) 四总的原理图 (9) 五器件编程与下载 (9) 六性能测试与分析(要围绕设计要求中的各项指标进行) (10) 七实验设备 (10) 八心得体会 (10) 九参考文献 (10)

课程设计任务书课题 名称7段数码管控制引脚 完成 时间 2011. 12.12 指导 教师胡辉职称副教授 学生 姓名 庄仲班级B09212 总体设计要求和技术要点 通过本课程的学习使学生掌握可编程器件、EDA开发系统软件、硬件描述语言和电子线路设计与技能训练等各方面知识;提高工程实践能力;学会应用EDA技术解决一些简单的电子设计问题。 具体要求: 1.设计一个共阴7段数码管控制接口,在硬件时钟电路的基础上,采用分频器,输出一个1S的时钟信号,同时显示2、3、4所要求的计数器。 2.设计一个带使能输入、进位输出及同步清0的增1十进制计数器。 3.设计一个带使能输入及同步清0的六十进制同步加法计数器; 4.设计一个四位二进制可逆计数器; 工作内容及时间进度安排 第16周: 周一、周二:设计项目的输入、编译、仿真 周三:器件编程下载与硬件验证 周四:成果验收与总结 周五:撰写课程设计总结报告 课程设计成果 把编写好的程序下载到试验箱,使数码管能够按照编写的程序显示出正确的结果,实验成功。

数码管显示控制电路

实验六数码管显示控制电路 一、实验目的 1、设计一个逻辑电路,使数字显示译码器依次显示0123403034; 2、掌握74LS00 74LS90芯片的综合应用。 3、熟悉常用中规模计数器的逻辑功能。 4、掌握二进制计数器和十进制计数器的工作原理及使用方法。 5、学会利用计数器进行不规则数列的输出。 6、掌握由真值表作卡诺图并列些函数表达式的方法步骤。 二、实验设备 (1)数字电路实验箱 (2)数字双踪示波器 (3)74LS00,74LS90 (4)导线若干 三、实验原理 首先,我们知道74LS90可以输出8421BCD码和5421BCD码,要使得数字显示所要求的顺序,相对应74LS47的输入可以通过对以上两种码中的一种进行变换得到。由于实验设备的限制,我们只能实现由5421BCD码到8421BCD码的转换。接着,我们列出了8421BCD 码,5421BCD码以及要求序列对应的译码器的输入,进行比较:

根据题目要求,目标显示如下: 四、实验内容 实现0123403034计数 五:实验方法及结果 实验方法: 由实验原理中的三个表格,通过卡诺图化简如下:(1)对F8,由图(2)可知只需接地就可以;(2)对F4,有图(1)可知F4=Q3; (3)对F2,卡若图如下:

可得, 20102F Q Q Q Q ?= (4)1F1Q = 实验结果: 综合上述分析,实现该功能的逻辑电路图如下图: ★ U4按照0123403034的顺序依次进行计数,实验结果与预期结果完全一致。 七.心得体会 这次实验综合性较强,主要考察了我们从实际问题中抽象出逻辑函数的能力。在逻辑函数化简中,利用无关项来简化结果使得逻辑函数更为简单,电路更易搭建。 本次实验,通过对计数器工作过程的探索,基本上了解了计数器的工作原理,以及74LS90的数字特点,让我更进一步掌握了如何做好数字电路实验,也让我认识到自身理论

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:感谢大家的阅读,本文由我司收集整编。仅供参阅!

单片机课设数码管显示滚动控制

《单片机设计与实训》 设计报告 题目:数码管滚动显示控制姓名:王伟杰 班级:自动化四班 学号: 2014550430 指导老师:张莹 提交日期: 2016年10月29日

目录 一、设计题目与要求 (4) 1.1设计题目 (4) 1.2设计要求 (4) 二、系统方案设计 (4) 2.1硬件电路设计 (5) 1.单片机最小系统简介 (5) 2.数码管显示电路 (7) 2.3硬件选型及说明 (8) 1. ST89C51单片机 (8) 2. 四位一体七段共阴极显示数码管 (10) 三、系统原理图设计与仿真 (11) 3.1系统仿真图 (11) 3.2系统仿真结果 (12) 四、程序设计 (13) 4.1程序设计 (13) 4.2程序流程图 (15) 五、系统调试 (16) 5.1系统硬件调试 (16) 5.2系统软件调试 (16) 六、总结与体会 (17)

附录一 (19) 附录二 (20) 附录三 (34)

一、设计题目与要求 单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。 1.1设计题目 数码管滚动显示控制 1.2设计要求 自制一个单片机最小系统,包括串口下载、复位电路,采用两个四位一体数码管作为显示器件,通过按钮选择实现四种滚动显示模式,例如从左至右,从右至左,内缩,外扩等,滚动信息可以是数字或有意义的英文字符。 二、系统方案设计

数码管显示控制电路设计

实验五数码管显示控制电路设计 一、设计任务与要求 能自动循环显示数字0、1、2、3、4、1、3、0、2、4 二、实验器材 74LS00 2片74LS10 1片74LS90 1片 74LS48 1片数码管等等 三、实验原理 数码管显示控制电路原理框图如下: 四、实验内容 利用所给器材,设计电路,使其能自动循环显示数字0、1、2、3、4、1、3、0、2、4。 分析可知,可以利用5421BCD码来实现。下面是要用到的真值转换表(左边是5421BCD码,右边是要输出的数字编码): QA QD QC QB D C B A

由真值表可知: D = 0 C = QD B 的卡诺图 A 的卡诺图 由卡诺图可以写出数学表达式: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 1 1 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1 0 0 1 0 1 1 1 0 0 0 0 0 X X 1 1 X X 1 1 X X 0 0 0 1 1 X X 1 1 X X 0 0 X X QAQD QCQB 00 01 11 10 QAQD QCQB 00 01 11 10

QC QA QAQB QC QA QAQB B ?=+= QB QA QC QD QA QB QA QC QD QA A ?=+= 根据数学表达式可作出电路连接图如下: 经软件模拟可以实现0、1、2、3、4、1、3、0、2、4的循环显示。

7段数码管1

实验三 7段数码管显示 一实验要求 设计一个共阴7段数码管控制接口,要求:在时钟信号的控制下,使8位数码管动态刷新显示各自学号。 二实验原理 三实验内容 在实验仪器中,8位7段数码显示的驱动电路已经做好,并且其位选信号(SEL[7..0])为一3-8译码器的输出,所以我们在设计7段数码管控制接口时,其位选信号输出必须经8-3编码。 显示控制器的引脚图如图3-1: 图3-1 图中CP为时钟输入端,SEGOUT[7..0]为段驱动输出;SELOUT[2..0]为位选信号输出;NUMOUT[3..0]为当前显示的数据输出。 图3-2 7段显示控制器仿真波形图 从图3-2可以看出,8位数码管是轮流点亮的,我们以NUMOUT=1这段波形为参考:当SELOUT为000时,点亮第一位显示器,显示的数字为1,同时,NUMOUT输出的数据也为“0001”。同理,当SELOUT为001时,点亮第二位显示器,显示数字为1,直到6位显示器全都显示完毕,等待进入下一个数字的显示。 同时,还有一个问题不可忽视,位扫描信号的频率至少需要多少以上,才能使显示器不闪烁?简单的说,只要扫描频率超过眼睛的视觉暂留频率24H Z以上就可以达到点亮单个显示,却能享有6个同时显示的视觉效果,而且显示也不闪烁。当我们输入频率为5MH Z时,我

们通过加法计数器来产生一个约300H Z的信号,并且由它来产生位选信号,请参考下面程序段: PROCESS (CP) -- 计数器计数 Begin IF CP'Event AND CP='1' then Q <= Q+1; END IF; END PROCESS; NUM <= Q(24 DOWNTO 21); --about 1 Hz S <= Q(15 DOWNTO 13); --about 300 Hz --扫描信号 SEL <= "000" WHEN S=0 ELSE "001" WHEN S=1 ELSE "010" WHEN S=2 ELSE "011" WHEN S=3 ELSE "100" WHEN S=4 ELSE "101" WHEN S=5 ELSE "111111"; 由计数器Q引出到S信号,若时钟信号为5MH Z时,Q13得到的信号频率约300HZ,再将 它分给扫描信号,最后每个显示器扫描信号频率为:300/6=50H Z>24H Z,所以不会有闪烁情形产生。 四实验连线 CP对应IO3 SEGOUT、SELOUT分别对应数据总线的低8位与高8位 NUMOUT对应IO9-IO12 功能选择位M[3..0]状态均为0010,左端8个数码管,低8位为7位段总加小数点选取位,高8位为8个数码管com端选取,即如果要选取数码管0,则发送总线值为:1111 1110 1111 1111,如要选取数码管1,则发送总线值为:1111 1101 1111 1111,此时所选数码管7段和DP位将全部亮。 实验接线:用导线连接IO3与ADJ_CLK,调整拨码开关SW17-SW20,使输出频率为5MHz;用导线将IO9-IO12连到L1-L4。 五实验代码 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY wm3 is PORT( CP : IN STD_LOGIC; -- CLOCK SEGOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- SEG7 Display O/P SELOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -- Select SEG7 O/P NUMOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); -- Number Display

相关文档
最新文档