嬲嫐, 发表于 2014-4-16 19:30:58

关于16*16点阵编程的问题

原文地址:http://www.arduino.cn/forum.php?mod=viewthread&tid=3429

这个帖子是介绍16*16点阵的,请大家直接到代码部分。有很多问题,大家能回答几个就回答几个 谢谢啦。

从前往后看

1.hc138en口是做什么用的?
2.spi_transfer这个函数是做什么用的?
3.hc138sacn这个函数是做什么用的?什么是行线状态?
4.hc595senddata这个函数是做什么用的?CLK在里面的作用是什么?
5.97到101行代码的作用是什么?
6.104到109的代码的作用是换行吗?

好吧,简而言之我就是所有的都不会,请大家细心解答,谢谢啦~

eddiewwm 发表于 2014-4-19 14:19:31

原程序已有很好的說明,細心看應可解答到有關的疑問:

// 1.hc138en口是做什么用的? //
int hc138en=6; //EN口
pinMode(hc138en, OUTPUT); //138 使能
digitalWrite(hc138en, 1);//关闭显示
digitalWrite(hc138en, 0);//开启显示

//2.spi_transfer这个函数是做什么用的?//
void spi_transfer(volatile char data)
{
SPDR = data;                  // 開始發送
while (!(SPSR & (1<<SPIF)))   // 等待發送完畢
{
};
//return SPDR;                  // 返回接收位組
}

// 3.hc138sacn这个函数是做什么用的?什么是行线状态?//
      hc138sacn(row);            //换行, ** 這個就是問題的解答,用以在 16行中選取所用到的一行 **

void hc138sacn(byte r){//输出行线状态ABCD (A低,D高)
    digitalWrite(RowA,(r & 0x01));
    digitalWrite(RowB,(r & 0x02));
    digitalWrite(RowC,(r & 0x04));
    digitalWrite(RowD,(r & 0x08));
}

//hc595senddata这个函数是做什么用的?CLK在里面的作用是什么? //
在程序中並未有被呼叫到,若程序運行沒有問題,可以暫不理會。

// 97到101行代码的作用是什么? //
for(row=0;row<16;row++){      // 從 0 行到 15 行 循環掃描

      for (int i=0;i<8;i++){            // 將對應於所需行中的8個數據經SPI送出
         spi_transfer(~(zzz));
      }

//04到109的代码的作用是换行吗?//
      digitalWrite(hc138en, 1);//关闭显示
      hc138sacn(row);            //换行
      digitalWrite(STB, 0);      //595刷新      
      digitalWrite(STB, 1);
      delayMicroseconds(500) ;   //节电用,
      digitalWrite(hc138en, 0);//开启显示

是的,配合 97行作換行、刷新等相應工作。



页: [1]
查看完整版本: 关于16*16点阵编程的问题