微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR单片机与74HC595的SPI显示程序

AVR单片机与74HC595的SPI显示程序

时间:11-29 来源:互联网 点击:
使用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 ------------------------------------------------------------------------使用芯片:  ATmega88,晶振:      内部8MHz晶振email:     support@avrbascom.com软件版本:  Bascom-AVR 1.11.8.3 Full version------------------------------------------------------------------------$regfile = "m88def.dat"                     芯片为ATmega88 $crystal = 8000000                          8M晶振频率 $hwstack = 32                               设置堆栈大小 $swstack = 10$framesize = 40Dim I As ByteDim A(3) As ByteLatch Alias Portb.1Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes ,Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0定义使用单片机自带的硬件SPI,SPI中断未使能,数据发送时,高位先发送。设为SPI主设备,时钟4分频 Spiinit                 SPI初始化Restore Segtab          获取要显示数据的内容 For I = 1 To 3Read A(i)Next ISpiout A(1) , 3         输出要显示的内容给74HC595,分别输出A(1),A(2),A(3)Latch = 1?              使能显示 Waitus 10Latch = 0 DoLoopEnd*******************************************************************************--------------------------专用字形表------------------------------------------Segtab:Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB70 1 2 3 4 5 6 7 8 9二、使用软件SPI接口控制74HC595------------------------------------------------------------------------使用芯片: ATmega88,晶振:     内部8MHz晶振 email:    support@avrbascom.com软件版本: Bascom-AVR 1.11.8.3 Full version------------------------------------------------------------------------ $regfile = "m88def.dat"                  芯片为ATmega88 $crystal = 8000000                       8M晶振频率 $hwstack = 32                            设置堆栈大小 $swstack = 10$framesize = 40Const On = 1Const Off = 0Dim I As ByteDim A(3) As ByteLatch Alias Portb.1Config Spi = Soft , Dout = Portb.3 , Ss = None , Clock = Portb.5定义使用软件SPI,pb3作为数据输出口,pb5作为时钟引脚 Spiinit                 SPI初始化Restore Segtab          获取要显示数据的内容 For I = 1 To 3Read A(i)Next ISpiout A(1) ,3输出要显示的内容给74HC595,分别输出A(1),A(2),A(3)Latch = Off            使能显示 Waitus 10Latch = OnDoLoopEnd********************************************************************--------------------------专用字形表------------------------------------------Segtab:Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB70 1 2 3 4 5 6 7 8 9三、使用软件SPI接口控制74HC595------------------------------------------------------------------------使用芯片: ATmega88,晶振:     内部8MHz晶振 email:    support@avrbascom.com软件版本: Bascom-AVR 1.11.8.3 Full version------------------------------------------------------------------------ $regfile = "m88def.dat"         芯片为ATmega88 $crystal = 8000000              8M晶振频率 $hwstack = 32                   设置堆栈大小 $swstack = 10$framesize = 40Const On = 1Const Off = 0Ledata Alias Portb.3            数据输出口 Ledclk Alias Portb.5            时钟输出口 Latch Alias Portb.1Dim I As ByteDim A(3) As ByteRestore Segtab                   获取要显示数据的内容 For I = 1 To 3Read A(i)Next IFor I = 3 To 1 Step -1Shiftout Ledata , Ledclk , A(i) , 1输出要显示的内容给74HC595Next ILatch = Off                      使能显示 Waitus 10Latch = OnDoLoopEnd********************************************************************--------------------------专用字形表------------------------------------------Segtab:Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB70 1 2 3 4 5 6 7 8 9

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top