arduino 驱动LED屏的问题
参考的http://www.geek-workshop.com/forum.php?mod=viewthread&tid=8598&highlight=arduino%C7%FD%B6%AFled的代码。连线图
j
代码
#define RowA 2
#define RowB 3
#define RowC 4
#define RowD 5
//业界所采用的ABCD 08驱动模式
int hc138en=6; //EN口
//使用了硬件SPI,以下脚不能更改
#define R1 11 //数据出 MOSI
#define CLK 13 //时钟 SCK
#define STB 10 //595 刷新显示SS
#define DATAIN12 //数据入,读FLASH时有用MISO
byte row=0;
byte zzz[] =
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF1,0xFF,0xE3,0xFF,0xC0,0x00,0x00,
0xFF,0xF1,0xFF,0xE3,0xFF,0xC0,0x00,0x00,0x00,0x70,0x00,0xE0,0x01,0xC0,0x00,0x00,
0x00,0xE0,0x01,0xC0,0x03,0x80,0x00,0x00,0x01,0xC0,0x03,0x80,0x07,0x00,0x00,0x00,
0x03,0x80,0x07,0x00,0x0E,0x00,0x00,0x00,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00,
0x0E,0x00,0x1C,0x00,0x38,0x00,0x00,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0x00,0x00,
0x38,0x00,0x70,0x00,0xE0,0x00,0x00,0x00,0x70,0x00,0xE0,0x01,0xC0,0x00,0x00,0x00,
0xE0,0x01,0xC0,0x03,0x80,0x00,0x00,0x00,0xFF,0xF1,0xFF,0xE3,0xFF,0xC0,0x00,0x00,
0xFF,0xF1,0xFF,0xE3,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void spi_transfer(volatile char data)
{
SPDR = data; // Start the transmission
while (!(SPSR & (1<<SPIF))) // Wait the end of the transmission
{
};
//return SPDR; // return the received byte
}
void hc138sacn(byte r){//输出行线状态ABCD (A低,D高)
digitalWrite(RowA,(r & 0x01));
digitalWrite(RowB,(r & 0x02));
digitalWrite(RowC,(r & 0x04));
digitalWrite(RowD,(r & 0x08));
}
void hc595senddata(byte data){// 高位在前反相(1亮0灭)
for (byte i=0; i<8;i++) {
digitalWrite(CLK,0);
if (data & 0x80) {
digitalWrite(R1, 0);
} else {
digitalWrite(R1, 1);
}
data=data<<1;
digitalWrite(CLK,1);
}
}
void setup () {
pinMode(RowA, OUTPUT);
pinMode(RowB, OUTPUT);
pinMode(RowC, OUTPUT);
pinMode(RowD, OUTPUT); //138片选
pinMode(hc138en, OUTPUT); //138 使能
pinMode(R1, OUTPUT);//595 数据
pinMode(CLK, OUTPUT); //595 时钟
pinMode(STB, OUTPUT); //595 使能
pinMode(DATAIN, INPUT); //595 使能
//digitalWrite(hc138d, HIGH);
Serial.begin(19200);
//SPI硬件设置
// SPCR = 01010000
//interrupt disabled,spi enabled,msb 1st,master,clk low when idle,
//sample on leading edge of clk,system clock/4 rate (fastest)
SPCR = (1<<SPE)|(1<<MSTR);
delay(10);
}
void loop () {
if (Serial.available() > 0) {
// read the incoming byte:
row = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(row, DEC);
}
for(row=0;row<16;row++){
for (int i=0;i<8;i++){
spi_transfer(~(zzz));
}
digitalWrite(hc138en, 1);//关闭显示
hc138sacn(row); //换行
digitalWrite(STB, 0); //595刷新
digitalWrite(STB, 1);
delayMicroseconds(500) ; //节电用,
digitalWrite(hc138en, 0);//开启显示
delayMicroseconds(500) ;//刷新频率调,差不多60HZ,1/16间隔
}
}
我按上述步骤做完以后,led显示屏没有任何反应?想问我的接线对吗?不对怎么接线 红线接板子5V 黑线接的GND 坐等真相帝 我有51单片机的汇编程序,可以供你参考
//BIT 位定义命令
//EQU 赋值命令
BU BIT P3.1 //蜂鸣器
TR BIT P3.2 //传感器外部中断1
INR1 BIT P3.4 //列1数据输入(需测试列级联)
CLK BIT P3.5 //数据存入 RCLK
LAT BIT P3.6 //时钟信号 SRCLK
E BIT P3.7 //屏显使能 (行138使能) 低电平开启
//F BIT P2.0 //A端口
YM EQU P2 //ABCD译码器 占低四位
// ABCD对应 P2.3 P2.2 P2.1 P2.0//
YMC EQU 30H//30H译码器初始值#00H
SJ EQU 31H//31H待发送数据
FCS EQU 32H//32H串行发送次数 默认值08H
//33译码器初始值
//34H列初始值
//35H字体数量
//36H
//37H
//38H
//39H
//3AH
//3BH
ORG 0000H
//程序初始化//
CSH: MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH //E高电平屏幕关闭
//行显//
HX:MOV DPTR ,#TAB//字库初始值
MOV 30H,#10H
JH:MOV 33H,#00H //译码器初始值#00H
ACALL LQ //调用列驱动
JH1: MOV YM,33H //行扫装入
CLR E //开启屏幕
ACALL DELAY
SETB E //关闭显示器
ACALL LQ
INC 33H
DJNZ YMC,JH1 //YM初始值#07H
AJMP CSH
//列驱动//
LQ: CLR CLK //数据存入上升沿有效
MOV 39H,#08H
HSM:MOV 34H,#00H //列驱动初始值
MOV 35H,#08H //列发送初始值
MOV A,34H
HSM1:MOVC A,@A+DPTR
MOVSJ ,A
LQD:CLR C // C寄存器清零
ACALL CS
CLR LAT
NOP
NOP
SETB LAT
NOP
NOP
CLR LAT
INC 34H
MOV A,34H
DJNZ 35H, HSM1
L6:INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
RET
//数据串行发送程序//
CS:MOV A ,SJ
MOV FCS,#08H
L5:RLC A //数据左移动
MOV INR1 ,C
SETB CLK //移位寄存器上升沿有效
NOP
NOP
CLR CLK
DJNZ FCS,L5 //每次发送8位数据
RET
//长延时程序//
DELAY:MOVR6,#01H
DL1:MOVR5,#01H
DL2:MOVR7,#01h
DL3:DJNZ R7 ,DL3
DL4:DJNZ R5 ,DL2
DJNZ R6 ,DL1
RET
//短延时程序//
DDELAY:MOVR5,#02H
DDL1:MOVR7,#02h
DDL2:DJNZ R7,DDL2
DJNZ R5,DDL1
RET
TAB:
DB 0FFH,0BFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 0FEH,1FH,0FFH,0FFH,0FCH,1FH,0FFH,0FFH;
DB 0FCH,0DFH,0FFH,0FFH,0E0H,1FH,0FFH,0FFH;
DB 0F3H,0DFH,0FFH,0FFH,0E7H,9FH,0FFH,0FFH;
DB 0F7H,0DFH,0C0H,07H,0CFH,9FH,81H,81H;
DB 0EFH,0C0H,3FH,0F0H,00FH,0DFH,0B7H,0F7H;
DB 0EFH,0CFH,0FFH,0FFH,0FFH,0DFH,0F7H,0F7H;
DB 0EFH,0CFH,0FFH,0FFH,0FFH,0DFH,0F7H,0F7H;
DB 0EFH,0EFH,0FFH,0FFH,0FFH,0DFH,0F7H,0F7H;
DB 0EFH,0EFH,0FFH,0FFH,0FFH,9FH,0F7H,0E7H;
DB 0EFH,8FH, 0FFH,0FFH,0FFH,1FH,0F7H,0EFH;
DB 0EFH,0C0H,3FH,0FEH,0FCH,3FH,37H,0AFH;
DB 0EFH,9FH, 80H,00H,00H,0FFH,87H,8FH;
DB 0E0H,3FH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;"未命名文件",0
END
DB3FH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FCH;
DB3FH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FCH;
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH, 1FH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH, 5FH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH, 5FH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH, 1FH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FEH, 3FH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FEH,0BFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FEH,0BFH,0FFH,0FFH,0FFH,0FFH;
DB 0FFH,0FFH,0FEH, 3FH,0FFH,0FFH,0FFH,0FFH;
DB3FH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FCH;
DB3FH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FCH;"未命名文件",0
END
32 关注中。。。。。。。。。。。。 :)留个脚印
同楼主做等答案。
页:
[1]