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

📄 main.c

📁 max7219级联程序实例,实现spi通信功能
💻 C
字号:
#include <regx52.h>
#include <stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void send(uchar outdata);
void write(uchar addr1,uchar num1,uchar addr2,uchar num2);
void init();
sbit din=P2^0;
sbit load=P2^1;
sbit clk=P2^2; 
//uchar codeseg[10]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};
void main()
{
 write(0x0f,0x01,0x0f,0x01);
  _nop_();
  _nop_();
  _nop_();
  _nop_();
 write(0x0f,0x00,0x0f,0x00); //测试显示
 init();     //max7219初始化
 while(1)
 {
  write(0x01,1,0x01,9);//先送位,再送段/先发送给第一片 
  write(0x02,2,0x02,2);
  write(0x03,3,0x03,3);
  write(0x04,4,0x04,4);
  write(0x05,5,0x05,5);
  write(0x06,6,0x06,6);
  write(0x07,7,0x07,7);
  write(0x08,8,0x08,8);
 }
}

void init()
{write(0x09,0xff,0x09,0xff);  //设置译码方式,使用bcd译码
 write(0x0a,0x0a,0x0a,0x0a);  //设置亮度
 write(0x0b,0x07,0x0b,0x07);  //设置扫描的位数
 write(0x0c,0x01,0x0c,0x01);  //设置待机方式
 } //先设置后面一片的工作方式,在设置前面一片的工作方式
void write(uchar addr1,uchar num1,uchar addr2,uchar num2)
{
  load=0;	//当LOAD为低电平时,芯片接收来自DIN的数据,接收完毕,
  _nop_();
  send(addr1);
   _nop_();
  send(num1);
  _nop_();
  clk=0;
  _nop_();
  clk=1;     //从DIN输入的数据经过16.5个CLK脉冲后移到DOUT引脚上。
             //所以发完16个数据后必须加一个脉冲,否则数据传不到第二片
  send(addr2);
  _nop_();
  send(num2);
  load=1;   //LOAD回到高电平时,接收的数据将被锁定
}
void send(uchar outdata)	//写串行数据子程序
{ uchar i,temp;
  for(i=0;i<8;i++)
  {
    temp=outdata&0x80;
    outdata=outdata<<1;

  	if(temp==0x80)
	 {
	   clk=0;
	   din=1;
	   _nop_();
	   clk=1;	 //提供上升沿
	   }
  	else
  	 {
	   clk=0;
	   din=0;
	   _nop_();
	   clk=1;	 //提供上升沿
	   }
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -