⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi7221.c

📁 新华龙f020的spi0接口 控制MAX7221的数码管显示的程序
💻 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 + -