TA的每日心情 | 奋斗 2022-9-16 05:52 |
---|
签到天数: 1368 天 连续签到: 1 天 [LV.10]以坛为家III
|
老邓店里有不少树莓派、香蕉派的扩展模块,大大加强了它们的可玩性。
今天拿到了一个这样的模块,74HC5950,使用SPI方式驱动的可无限级联的模块。
这个模块可适用于香蕉派M1、M1+、M2,也就是说各种香蕉派的版本都可以使用。
插上后是这个样子
近照
使用三个口就能驱动了。当然还要包括VCC和GND。
ST24 SPI0_CS0 PI10
SH23 SPI0_CLK PI11
DS19 SPI0_MOSI PI12
程序基本就是这样的
unit SR595;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils, GPIO;
type
TSR595 = class
private
FDS: TGPIO; //MOSI
FSH: TGPIO; //CLK
FST: TGPIO; //CS
public
constructor Create;
destructor Destroy; override;
procedure Write(B: Byte); overload;
procedure Write(B: array of Byte; Len: Byte); overload;
procedure Send;
end;
implementation
constructor TSR595.Create;
begin
inherited Create;
FDS:= TGPIO.Create(PI, 12);
with FDS do
begin
Fun:= Fun1;
Data:= True;
end;
FSH:= TGPIO.Create(PI, 11);
with FSH do
begin
Fun:= Fun1;
Pull:= PULL_UP;
Data:= True;
end;
FST:= TGPIO.Create(PI, 10);
with FST do
begin
Fun:= Fun1;
Pull:= PULL_UP;
Data:= True;
end;
end;
destructor TSR595.Destroy;
begin
FDS.Free;
FSH.Free;
FST.Free;
inherited Destroy;
end;
procedure TSR595.Write(B: Byte); overload;
var I: Byte;
begin
//FST.Data:= False;
for I:= 0 to 7 do
begin
FSH.Data:= False;
FDS.Data:= ((B and $80) > 0);
B:= B shl 1;
FSH.Data:= True;
end;
//FST.Data:= True;
end;
procedure TSR595.Write(B: array of Byte; Len: Byte); overload;
var I: Byte;
begin
for I:= 0 to Len - 1 do Write(B[I]);
end;
procedure TSR595.Send;
begin
FST.Data:= False;
FST.Data:= True;
end;
end.
这里发不了附件,就不加上了。用WiringPI调用也可以的。 |
|