|
|
1黑幣
新手小白~希望大佬能傳道授業(yè)解惑~
疑問(wèn)如下:
程序中竟然P0^7(LED)都定義成0了,那為什么還有兩組for循環(huán)語(yǔ)句啊?
程序中的dat1 dat2 分別對(duì)應(yīng)什么duan'ko
/**************************************************************************************
實(shí)驗(yàn)現(xiàn)象:下載程序后,LED點(diǎn)陣左上角第一個(gè)點(diǎn)的LED被點(diǎn)亮果
接線說(shuō)明: (具體接線圖可見(jiàn)開(kāi)發(fā)攻略對(duì)應(yīng)實(shí)驗(yàn)的“實(shí)驗(yàn)現(xiàn)象”章節(jié))
注意事項(xiàng):
***************************************************************************************/
#include "reg51.h" //此文件中定義了單片機(jī)的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //對(duì)數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;
//--定義使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit LED=P0^7;
void delay (u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 數(shù) 名 : Hc595SendByte(u8 dat1,u8 dat2)
* 函數(shù)功能 : 通過(guò)595發(fā)送2個(gè)字節(jié)的數(shù)據(jù)
* 輸 入 : dat1:第2個(gè)595輸出數(shù)值
* * dat2: 第1個(gè)595輸出數(shù)值
* 輸 出 : 無(wú)
*******************************************************************************/
void Hc595SendByte(u8 dat1,u8 dat2)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //發(fā)送8位數(shù)
{
SER = dat1 >> 7; //從最高位開(kāi)始發(fā)送
dat1 <<= 1;
SRCLK = 0; //發(fā)送時(shí)序
_nop_();
_nop_();
SRCLK = 1;
}
delay(500);
for(a=0;a<8;a++) //發(fā)送8位數(shù)
{
SER = dat2 >> 7; //從最高位開(kāi)始發(fā)送
dat2 <<= 1;
SRCLK = 0; //發(fā)送時(shí)序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無(wú)
* 輸 出 : 無(wú)
*******************************************************************************/
void main()
{ LED=0; //使第一列為低電平。
while(1)
{
Hc595SendByte(0xfe,0x01);
}
}
|
最佳答案
查看完整內(nèi)容
樓主不必糾結(jié)于此,這個(gè)程序是用兩個(gè)595級(jí)聯(lián)驅(qū)動(dòng)8*8點(diǎn)陣。由于此實(shí)驗(yàn)板只有1個(gè)595驅(qū)動(dòng)點(diǎn)陣行,列由P0直接驅(qū)動(dòng)。兩次for循環(huán)的前面列碼已經(jīng)溢出而無(wú)效。所以加一條LED=0;,就相當(dāng)于加一條P0=0x7f 充當(dāng)列碼。
|