STM8S MAX7219点阵模块驱动芯片程序

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cxw312864660/article/details/86706155

 

以下为.h文件:



#ifndef __MAX7219_H
#define __MAX7219_H
#include "stm8s_gpio.h"
#include "stm8s.h"
#include <iostm8s103f3.h>
#include <intrinsics.h>
#include "tim1.h"

#define uchar unsigned char
#define uint  unsigned int
#define count 8


void Init_MAX7219(void);
void MAX7219_Init(void);
void Write_Max7219_byte(uchar Data);    
void Write_Max7219(u8 address1,u8 dat1,u8 address2,u8 dat2);

#define High 1
#define Low 0
#define Din(High_Low)	if(High_Low == 0)GPIO_WriteLow(GPIOC, GPIO_PIN_4);\
						else GPIO_WriteHigh(GPIOC, GPIO_PIN_4);
#define Cs(High_Low)	if(High_Low == 0)GPIO_WriteLow(GPIOC, GPIO_PIN_3);\
						else GPIO_WriteHigh(GPIOC, GPIO_PIN_3);						
#define Clk(High_Low)	if(High_Low == 0)GPIO_WriteLow(GPIOC, GPIO_PIN_2);\
						else GPIO_WriteHigh(GPIOC, GPIO_PIN_2);

					
#endif

 

以下为.c文件:

#include "main.h"

void Init_MAX7219(void)
{
	GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);//PC4高速推挽输出高电平控制DIN
	GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);//PC3高速推挽输出高电平控制CS
	GPIO_Init(GPIOC, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);//PC2高速推挽输出高电平控制CLK

}

//--------------------------------------------
//功能:向MAX7219(U3)写入字节
//入口参数:DATA 
//出口参数:无
//说明:
void Write_Max7219_byte(uchar Data)         
{
    	uchar i;    
		Cs(0);
	    for(i=8;i>=1;i--)
		{		  
			Clk(0);
			if(Data&0x80)
			{
				Din(1);
			}
			else
			{
				Din(0);
			}
			Data=Data<<1;
			Clk(1);
			delay_us(10);
			Clk(0);
		 }                                 
}

//-------------------------------------------
//功能:向MAX7219写入数据
//入口参数:address、dat
//出口参数:无
//说明:
void Write_Max7219(u8 address1,u8 dat1,u8 address2,u8 dat2)
{ 

     Cs(0);
     Write_Max7219_byte(address1);           //写入地址,即数码管编号
     Write_Max7219_byte(dat1);              //写入数据,即数码管显示数字 
     Write_Max7219_byte(address2);           //写入地址,即数码管编号
     Write_Max7219_byte(dat2);      //写入数据,即数码管显示数字 

     nop();
     Cs(1);                         
}


void MAX7219_Init(void)
{
	/*
  	Write_Max7219(0x09, 0x00,0x09, 0x00);      	//译码方式:BCD码
 	Write_Max7219(0x0a, 0x03,0x0a, 0x03);       //亮度 
	Write_Max7219(0x0b, 0x07,0x0b, 0x07);       //扫描界限;8个数码管显示
 	Write_Max7219(0x0c, 0x01,0x0c, 0x01);       //掉电模式:0,普通模式:1
 	Write_Max7219(0x0f, 0x00,0x0f, 0x00);      	//显示测试:1;测试结束,正常显示:0
	*/
	
	u8  i;
	Cs(0);
	for(i=0;i<count;i++)
	{
	  Write_Max7219_byte(0x09); //译码方式:BCD码       
	  Write_Max7219_byte(0x00);    
	}
	Cs(1);
	nop();
	Cs(0);
	for(i=0;i<count;i++)
	{
	  Write_Max7219_byte(0x0a); //亮度    
	  Write_Max7219_byte(0x03);    
	}
	Cs(1);
	nop();
	Cs(0);
	for(i=0;i<count;i++)
	{
	  Write_Max7219_byte(0x0b); // //扫描界限;8个数码管显示  
	  Write_Max7219_byte(0x07);    
	}
	Cs(1);
	nop();
	Cs(0);
	for(i=0;i<count;i++)
	{
	  Write_Max7219_byte(0x0c); //   //掉电模式:0,普通模式:1
	  Write_Max7219_byte(0x01);    
	}
	Cs(1);
	nop();
	Cs(0);
	for(i=0;i<count;i++)
	{
	  Write_Max7219_byte(0x0f); //显示测试:1;测试结束,正常显示:0
	  Write_Max7219_byte(0x00);    
	}
	Cs(1);
	nop();
}	




 

展开阅读全文

没有更多推荐了,返回首页