424|0

269

帖子

0

资源

一粒金砂(高级)

【GD32L233C-START 评测】-四、GD32驱动MAX7219数码管显示 [复制链接]

手头刚好找到一款MAX7219的数码管,如图 image.png image.png 就拿GD32来测试下,用demo例程的GPIO_LED例程修改下。复制整个GPIO_LED目录,改个名称,然后在

image.png image.png 中改下名称,查看下目标各项设置是否正确。GD32的板子上焊上排针,然后,用杜邦线连接好MAX7219

image.png

其中A2--DIN

A3--LD

A4--CLK

并记录在max7219.h中

image.png 整个max7219.h文件如下

#ifndef MAX7219_H
#define MAX7219_H

//引脚设置
#define   MAX7219_DIN_PORT		GPIOA
#define 	MAX7219_DIN_PIN			GPIO_PIN_2

#define		MAX7219_LD_PORT			GPIOA
#define		MAX7219_LD_PIN			GPIO_PIN_3

#define		MAX7219_CLK_PORT		GPIOA
#define		MAX7219_CLK_PIN			GPIO_PIN_4

#define		MAX7219_PERIPH_CLK	RCU_GPIOA

#define		MAX7219DIN_L()     	gpio_bit_reset( MAX7219_DIN_PORT, MAX7219_DIN_PIN )
#define		MAX7219DIN_H()    	gpio_bit_set( MAX7219_DIN_PORT, MAX7219_DIN_PIN )

#define		MAX7219CLK_L()     	gpio_bit_reset( MAX7219_CLK_PORT, MAX7219_CLK_PIN )
#define		MAX7219CLK_H()    	gpio_bit_set( MAX7219_CLK_PORT, MAX7219_CLK_PIN )

#define		MAX7219LD_L()     	gpio_bit_reset( MAX7219_LD_PORT, MAX7219_LD_PIN )
#define		MAX7219LD_H()    		gpio_bit_set( MAX7219_LD_PORT, MAX7219_LD_PIN )

//配置设置
//显示亮度,取值范围0~f
#define 	Display_Level		0x07
//译码方式,0x00为不译码,0xff为译码
#define		Display_Encode	0x00
//操作方式,0x00为低功耗模式,0x01为正常操作模式
#define		Display_Power	  0x01
//显示状态,0x00为正常显示,0x01为显示测试
#define 	Display_Mode		0x00
//8位扫描显示,取值范围0x01~0x07
#define 	Display_Addr		0x07

void MAX7219_Init(void);
void max7219_config(void);
void w_max7219(unsigned char addr, unsigned char wdata);
void Display_7219(unsigned char addr, unsigned char digtal);
#endif

max7219.c文件如下

#include "max7219.h"
#include "systick.h"
#include "gd32l23x.h"

unsigned char code_disp_table[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,

0x77,0x1f,0x4e,0x3d,0x4f,0x47}; //非译码方式时的共阴数码管显示编码,0~9,A~F


void 	Display_7219(unsigned char addr, unsigned char digtal)
{
		w_max7219(addr & 0x0F, code_disp_table[digtal & 0x0F]);
}

void  MAX7219_Init(void)
{
		rcu_periph_clock_enable(MAX7219_PERIPH_CLK);

    /* configure MAX7219 GPIO pin */
    gpio_mode_set(MAX7219_DIN_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, MAX7219_DIN_PIN);
    gpio_output_options_set(MAX7219_DIN_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, MAX7219_DIN_PIN);
	
    gpio_mode_set(MAX7219_LD_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, MAX7219_LD_PIN);
    gpio_output_options_set(MAX7219_LD_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, MAX7219_LD_PIN);
	
		gpio_mode_set(MAX7219_CLK_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, MAX7219_CLK_PIN);
    gpio_output_options_set(MAX7219_CLK_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, MAX7219_CLK_PIN);
    /* set MAX7219 GPIO pin */
    MAX7219DIN_H();
    MAX7219CLK_H();
		MAX7219LD_H();
		
		delay_1ms(2);
    max7219_config();
}

void max7219_config(void)
{
		w_max7219(0x0a,Display_Level); //显示亮度,取值范围0~f

		w_max7219(0x0b,Display_Addr); //8位扫描显示,取值范围0x01~0x07

		w_max7219(0x09,Display_Encode); //译码方式,0x00为不译码,0xff为译码

		w_max7219(0x0c,Display_Power); //操作方式,0x00为低功耗模式,0x01为正常操作模式

		w_max7219(0x0f,Display_Mode); //显示状态,0x00为正常显示,0x01为显示测试

		delay_1ms(2);
}

/*********************************************************************************************

函数名称:w_max7219

函数功能:向MAX7219写入数据

入口参数:addr MAX7219内部寄存器地址,wdata 写入内部寄存器的操作数值

出口参数:

其 它:

*********************************************************************************************/

void w_max7219(unsigned char addr, unsigned char wdata)
{
		unsigned char temp, i=1,j,k;

		MAX7219LD_L();

		while(i<16)
		{
				if(i<8) temp=addr; //先写入MAX7219内部寄存器地址,再向内部寄存器写入操作数值
				else temp=wdata;

				for(j=0;j<8;j++)
				{
						MAX7219CLK_L();

						if((temp&0x80)==0x80) MAX7219DIN_H(); //先发送数据的最高位
						else MAX7219DIN_L();

						for(k=5;k>0;k--); //时钟频率高的单片机需曾加延时时间,此处为12MHz

						MAX7219CLK_H();

						for(k=5;k>0;k--);

						temp <<= 1;
				}
				i+=8;
		}
		MAX7219LD_H();
}

 

然后修改main.c文件,加入测试代码 image.png 编译后下载至开发板,运行效果如下

GD_TEST_3.gif

此帖出自GD32 MCU论坛

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表