极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9733|回复: 1

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

[复制链接]
发表于 2014-4-16 19:30:58 | 显示全部楼层 |阅读模式
原文地址: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的代码的作用是换行吗?

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

使用道具 举报

发表于 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[i+row*8]));
      }

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

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



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-5 20:09 , Processed in 0.035394 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表