📄 spi7221.c
字号:
///////////////////////////////////////////////////////////////////////
///SPI驱动7221程序
//
//好使
///////////////////////////////////////////////
#include <c8051f020.h>
#include <intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit cs=P0^4;
void Reset_Sources_Init()
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
void Port_IO_Init()
{
// P0.0 - SCK (SPI0), Open-Drain, Digital
// P0.1 - MISO (SPI0), Open-Drain, Digital
// P0.2 - MOSI (SPI0), Open-Drain, Digital
// P0.3 - NSS (SPI0), Open-Drain, Digital
XBR0 = 0x02;
XBR2 = 0x40;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x67;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
OSCICN = 0x08;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Reset_Sources_Init();
Port_IO_Init();
Oscillator_Init();
}
//SPI配置函数具体配置待定
void spi_cfg(uchar spicfg, uchar spickr, uchar spicn)
{
SPI0CFG = spicfg;
SPI0CKR = spickr;
SPI0CN = spicn;
EIE1 &= ~0x01; //禁止中断
}
void SendSPIByte(uchar add,uchar dat)
{
cs=1;
cs=0;
_nop_();
_nop_();
_nop_();
SPIF=0;
SPI0DAT=add;
while(!SPIF);
SPIF=0;
SPI0DAT=dat;
while(!SPIF);
cs=1;
}
void InitialMax7221(void)
{
SendSPIByte(0x0C, 0x01); //正常操作,不关闭
SendSPIByte(0x0B, 0xff); //扫描0~7
SendSPIByte(0x0A, 0xff); //亮度
SendSPIByte(0x0F, 0x00); //正常操作
SendSPIByte(0xf9, 0xff); //B解码模式
}
main()
{ unsigned char ii;
Init_Device();
spi_cfg(0x07,0x0a,0x03);
/*
SPI0CFG = 0x07; 7221cfg=00000111主机模式空闲时候时钟为低when driver 7221 ,ckpol=0;ckpha=0;
SPI0CKR =0X6E ; 7221ckr=0x6e 波特率设置,系统时钟为22.1184MHZ,若果要SCK为100KHZ
SPI0CN = 0x02; 7221cn= 0x02
四线制单主机模式,主机NSS输出为0,SPIEN为0,SPI未开启
注意:这些配制只是暂时的具体待定
*/
InitialMax7221();
//SendSPIByte(0x01,0x01);
for(ii=0;ii<8;ii++)
SendSPIByte(ii+1,ii+1);
//SendSPIByte(0x0F, 0x01); //测试模式操作
while(1){};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -