📄 simplespiout.c
字号:
/**********************************************
** 文件名 :SimpleSPIOut.c **
** 功能描述: 8个LED数码管分别显示1到8八个数字**
**********************************************/
#include "p30f6014.h" //ds30f6014头文件
const char Table1[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; // 不带小数点的显示段码表,依顺序为0-F共16个 */
const char Lengths = 8;
//系统初始化子程序,放在程序首部
void InitializeSys()
{
SRbits.IPL = 7; //关闭所有可屏蔽中断
}
//SPI输出初始化子程序
void InitializeSPIOut()
{
TRISF = TRISF&0xfebf; //RF6、RF8输出
TRISG = TRISG&0xfdff; //RG9输出
SPI1CON = 0x0379; // 字节通讯模式,CKP=1,CKE=1,FOSC/32,时钟上升沿发送数据
SPI1STATbits.SPIEN = 1; //SPI1EN=1
IFS0bits.SPI1IF = 0; // 清除SPI1IF标志
}
//在八个数码管上显示Lens长度的数据
void DisplayOnLED(char Lens, char* DataPtr)
{
int i = 0;
for(i=0; i<Lens; i++)
{
DataPtr[i] = Table1[DataPtr[i]];
}
PORTGbits.RG9 = 0; //RG9送低电平,给SPIOut输出锁存做准备
for(i=0; i<Lens; i++) //显示所要求的内容
{
SPI1BUF = DataPtr[i];
while(SPI1STATbits.SPITBF == 1);
}
for(i=Lens; i<8; i++) //熄灭多余的数码管
{
SPI1BUF = 0xff;
while(SPI1STATbits.SPITBF == 1);
}
SPI1BUF = 0xff;
while(SPI1STATbits.SPITBF == 1);
PORTGbits.RG9 = 1; //给锁存信号,显示数据
}
main()
{
char Data[Lengths],i;
for(i=0; i<Lengths; i++) //初始化化显示数据
{
Data[i] = 8-i;
}
InitializeSys();
InitializeSPIOut();
DisplayOnLED(Lengths,&Data[0]);
while(1)
{
; // 用户可编写其他程序
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -