hytrao 发表于 2014-11-24 18:49:16

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显示屏没有任何反应?想问我的接线对吗?不对怎么接线

hytrao 发表于 2014-11-24 18:49:53

红线接板子5V 黑线接的GND

疯狂的马贼 发表于 2014-11-25 14:43:59

坐等真相帝

庄华 发表于 2014-11-25 16:48:18

我有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

panqi 发表于 2014-11-25 23:27:16

关注中。。。。。。。。。。。。

莱茵蒙特 发表于 2014-11-26 13:49:19

:)留个脚印

方恨少 发表于 2014-11-27 13:46:38

同楼主做等答案。
页: [1]
查看完整版本: arduino 驱动LED屏的问题