共2条
1/1 1 跳转至页
LPC2104,SPI LPC2104中模拟SPI实验C语言代码中遇到的问题!!
问
/****************************************************************************
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat 要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/
void HC595_SendDat(uint8 dat)
{ uint8 i;
IOCLR = SPI_CS; // SPI_CS = 0
for(i=0; i<8; i++) // 发送8位数据
{ IOCLR = SPI_CLK; // SPI_CLK = 0
/* 设置SPI的DATA输出值 */
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK; // SPI_CLK = 1
}
IOSET = SPI_CS; // SPI_CS = 1,输出显示数据
}
上程序中
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK;
怎么理解?? 答 1: 我的理解软件模拟SPI接口,时序是自己送的,在SPI_CLK一个正跳变时送一个字节,因为,驱动数码管的595是串入并出。
所以,数据1bit1送,送8次就是1Byte,正好可以显示1个数字。
在CS=1时输出显示。
当然,你用SPI口的话,时序由硬件提供,就可以不要考虑时序。但,PINSEL需要考虑。
按照此思路,同样可以实现2个I/O口模拟I2C的程序,不过I2C的协议比较复杂,对编程的人要求教高,有兴趣的可以一试。 答 2: 谢谢祈祷之龙!我后来自己也想通了,但听你这么一说我有了更深的理解。我是初学者对硬件知识了解不够,以后请多多指教!!!
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat 要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/
void HC595_SendDat(uint8 dat)
{ uint8 i;
IOCLR = SPI_CS; // SPI_CS = 0
for(i=0; i<8; i++) // 发送8位数据
{ IOCLR = SPI_CLK; // SPI_CLK = 0
/* 设置SPI的DATA输出值 */
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK; // SPI_CLK = 1
}
IOSET = SPI_CS; // SPI_CS = 1,输出显示数据
}
上程序中
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK;
怎么理解?? 答 1: 我的理解软件模拟SPI接口,时序是自己送的,在SPI_CLK一个正跳变时送一个字节,因为,驱动数码管的595是串入并出。
所以,数据1bit1送,送8次就是1Byte,正好可以显示1个数字。
在CS=1时输出显示。
当然,你用SPI口的话,时序由硬件提供,就可以不要考虑时序。但,PINSEL需要考虑。
按照此思路,同样可以实现2个I/O口模拟I2C的程序,不过I2C的协议比较复杂,对编程的人要求教高,有兴趣的可以一试。 答 2: 谢谢祈祷之龙!我后来自己也想通了,但听你这么一说我有了更深的理解。我是初学者对硬件知识了解不够,以后请多多指教!!!
共2条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| STM32C0116DK开发探索记(3)被打赏¥30元 | |
| STM32C0116DK开发探索记(2)被打赏¥24元 | |
| STM32C0116DK开发探索记(1)被打赏¥29元 | |
| 谨防极海G32M3101电机评估板易跌落的陷阱被打赏¥24元 | |
| 【全网首拆】M5STACK ATOM系列开发板拆解 / AtomS3R-CAM摄像头更换方法(提高10倍像素)被打赏¥26元 | |
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
我要赚赏金
