STM8S MAX7219点阵模块驱动芯片程序
以下为.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();
}