|
|
发表于 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行作換行、刷新等相應工作。
|
|