加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入

嵌入式外设-16X16点阵显示器

04/30 08:32
5245
服务支持:
技术交流群

完成交易后在“购买成功”页面扫码入群,即可与技术大咖们分享疑惑和经验、收获成长和认同、领取优惠和红包等。

虚拟商品不可退

当前内容为数字版权作品,购买后不支持退换且无法转移使用。

加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论
放大
实物图
相关方案
  • 方案介绍
  • 相关文件
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

一、模块介绍

16X16点阵显示器是一种采用LED点阵组成的显示设备,

它由16行16列的LED点组成,用于显示字符、图形等信息。每个LED点可以独立控制亮灭,通过控制每个点的亮度,可以组合成不同的字符和图形,实现信息的显示。 16X16点阵显示器通常用于户外广告、公交车站信息显示、商场信息公告、停车场引导等领域,具有显示效果好、可视距离远、使用寿命长等特点。

16X16点阵显示器的工作原理是通过控制器发送指令,控制每个LED点的亮灭,形成所需的字符和图形。控制器可以通过串口、并口、网络等方式与计算机或其他设备连接,实现信息的传输和显示。

16X16点阵显示器的优点包括:

1. 显示效果好:采用LED点阵显示,字符和图形清晰,可视距离远。

2. 使用寿命长:LED灯具有很长的使用寿命,一般可以达到10万小时以上。

3. 低功耗:LED灯具有较低的功耗,有利于节能降耗。

4. 安装方便:可以根据需要进行悬挂、固定等方式安装。

5. 维护简单:LED点阵显示器采用模块化设计,维护方便。

6. 广泛应用:适用于各种场合的信息显示,如户外广告、公交车站、商场、停车场等。 总之,16X16点阵显示器是一种性能优良、应用广泛的显示设备,具有很高的实用价值。

二、资料获取

关注微信公众号--星之援工作室 发送关键字(16X16点阵

➡️➡️

效果展示

接线规则(可在lcd.h中自行修改)

三、代码编写

main

/*--------------------------------------------------------*
 *                                       								  *
 *   星之援网络科技工作室学习资料v1.0    									*
 *		              																			*
 *		 程序介绍:16*16实验               								  *
 *		 实现效果:显示汉字何   								 						 *
 *                                      							    *
 *--------------------------------------------------------*
*/

#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "usart.h"
#include "lcd.h"

const unsigned char  Word1[1][32] = 
{

0xF7,0xF7,0xF0,0xEF,0xEF,0xCC,0xCD,0xAD,0x6D,0xED,0xEC,0xED,0xEF,0xEF,0xEF,0xEF,
0xFF,0xFF,0x01,0xF7,0xF7,0x37,0xB7,0xB7,0xB7,0xB7,0x37,0xB7,0xF7,0xF7,0xD7,0xEF,/*"何",0*/

};

int main(void)
{
	char str[50];
	u8 key=0;
	delay_init();
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 	 //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
	// LED 端口初始化 
	LED_GPIO_Config();
	// 串口初始化
	uart_init(115200);
	
	System_PB34_setIO();
	lcd_GPIO_init();

	printf("init okn");
				
  while(1)
	{
		Display(Word1);
  }   
}

lcd.h

可以自行修改定义的io口

#ifndef __lcd12864_H_
#define __lcd12864_H_

#include "sys.h"
//  引脚定义
#define D_GPIO_CLK RCC_APB2Periph_GPIOB
#define D_GPIO_PORT GPIOB
#define D_GPIO_PIN GPIO_Pin_0

#define C_GPIO_CLK RCC_APB2Periph_GPIOB
#define C_GPIO_PORT GPIOB
#define C_GPIO_PIN GPIO_Pin_9

#define B_GPIO_CLK RCC_APB2Periph_GPIOB
#define B_GPIO_PORT GPIOB
#define B_GPIO_PIN GPIO_Pin_8

#define A_GPIO_CLK RCC_APB2Periph_GPIOB
#define A_GPIO_PORT GPIOB
#define A_GPIO_PIN GPIO_Pin_7

#define G_GPIO_CLK RCC_APB2Periph_GPIOB
#define G_GPIO_PORT GPIOB
#define G_GPIO_PIN GPIO_Pin_6

#define DI_GPIO_CLK RCC_APB2Periph_GPIOB
#define DI_GPIO_PORT GPIOB
#define DI_GPIO_PIN GPIO_Pin_5

#define CLK_GPIO_CLK RCC_APB2Periph_GPIOB
#define CLK_GPIO_PORT GPIOB
#define CLK_GPIO_PIN GPIO_Pin_4

#define LAT_GPIO_CLK RCC_APB2Periph_GPIOB
#define LAT_GPIO_PORT GPIOB
#define LAT_GPIO_PIN GPIO_Pin_3
// 状态
#define D_ON digitalHi(D_GPIO_PORT, D_GPIO_PIN)
#define D_OFF digitalLo(D_GPIO_PORT, D_GPIO_PIN)

#define C_ON digitalHi(C_GPIO_PORT, C_GPIO_PIN)
#define C_OFF digitalLo(C_GPIO_PORT, C_GPIO_PIN)

#define B_ON digitalHi(B_GPIO_PORT, B_GPIO_PIN)
#define B_OFF digitalLo(B_GPIO_PORT, B_GPIO_PIN)

#define A_ON digitalHi(A_GPIO_PORT, A_GPIO_PIN)
#define A_OFF digitalLo(A_GPIO_PORT, A_GPIO_PIN)

#define G_ON digitalHi(G_GPIO_PORT, G_GPIO_PIN)
#define G_OFF digitalLo(G_GPIO_PORT, G_GPIO_PIN)

#define DI_ON digitalHi(DI_GPIO_PORT, DI_GPIO_PIN)
#define DI_OFF digitalLo(DI_GPIO_PORT, DI_GPIO_PIN)

#define CLK_ON digitalHi(CLK_GPIO_PORT, CLK_GPIO_PIN)
#define CLK_OFF digitalLo(CLK_GPIO_PORT, CLK_GPIO_PIN)

#define LAT_ON digitalHi(LAT_GPIO_PORT, LAT_GPIO_PIN)
#define LAT_OFF digitalLo(LAT_GPIO_PORT, LAT_GPIO_PIN)



void lcd_GPIO_init(void);


void Scan_Line(unsigned char Dbyte);
void Send( unsigned char dat);
void Display(const unsigned char dat[][32]);		

/*********************************************************************************
 * @Function	:	系统设置PB3和PB4为普通IO口
 * @Input		:	deviceSta,设备状态
 * @Output		: 	None
 * @Return		: 	None
 * @Others		: 	JTAG调试方式会受影响
 * @Date			:  2020-04-22
 **********************************************************************************/
void System_PB34_setIO(void);
	
#endif

lcd.c

#include "lcd.H"
#include "delay.h"


unsigned char Display_Buffer[2];

/*!
 *  @brief      GPIO_init
 *  @since      v1.0
 *  @param  None
 */
void lcd_GPIO_init()
{

	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(D_GPIO_CLK, ENABLE); // 使能PB,PE端口时钟

	GPIO_InitStructure.GPIO_Pin = D_GPIO_PIN|C_GPIO_PIN |B_GPIO_PIN|A_GPIO_PIN|G_GPIO_PIN|DI_GPIO_PIN|CLK_GPIO_PIN|LAT_GPIO_PIN; // 端口配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	   // 推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	   // IO口速度为50MHz

	GPIO_Init(GPIOB, &GPIO_InitStructure); // 根据设定参数初始化GPIOB.5

}
/*!
 *  @brief     扫描行
 *  @since      v1.0
 *  @param 
 *  @author     hr
 */
void Scan_Line( unsigned char Dbyte)
{	
	switch(Dbyte)
	{
		case 0:			
			D_OFF;C_OFF;B_OFF;A_OFF; 					
			break;
		case 1:					
			D_OFF;C_OFF;B_OFF;A_ON; 		
			break;
		case 2:					
			D_OFF;C_OFF;B_ON;A_OFF; 		
			break;
		case 3:					
			D_OFF;C_OFF;B_ON;A_ON; 		
			break;
		case 4:
			D_OFF;C_ON;B_OFF;A_OFF; 		
			break;
		case 5:
			D_OFF;C_ON;B_OFF;A_ON; 		
			break;
		case 6:
			D_OFF;C_ON;B_ON;A_OFF; 		
			break;
		case 7:
			D_OFF;C_ON;B_ON;A_ON; 		
			break;
		case 8:
			D_ON;C_OFF;B_OFF;A_OFF; 		
			break;
		case 9:
			D_ON;C_OFF;B_OFF;A_ON; 		
			break;	
		case 10:
			D_ON;C_OFF;B_ON;A_OFF; 		
			break;
		case 11:
			D_ON;C_OFF;B_ON;A_ON; 		
			break;
		case 12:
			D_ON;C_ON;B_OFF;A_OFF; 		
			break;
		case 13:
			D_ON;C_ON;B_OFF;A_ON; 		
			break;
		case 14:
			D_ON;C_ON;B_ON;A_OFF; 		
			break;
		case 15:
			D_ON;C_ON;B_ON;A_ON; 		
			break;
		default : break;	
	}
}
/*!
 *  @brief     发送数据
 *  @since      v1.0
 *  @param 
 *  @author     hr
 */
void Send( unsigned char dat)
{
	unsigned char i;
	CLK_OFF;
	delay_us(1);;	
	LAT_OFF;
	delay_us(1);;

	for( i = 0 ; i < 8 ; i++ )
	{
		if( dat&0x01 )
		{
			DI_ON;	
		}
		else
		{
			DI_OFF;
		}

		delay_us(1);
		CLK_ON;				//上升沿发送数据   
		delay_us(1);
		CLK_OFF;
		delay_us(1);		
		dat >>= 1;
			
	}			
}
/*!
 *  @brief     num为字数  dat[][32]为字模的名称
 *  @since      v1.0
 *  @param 
 *  @author     hr
 */
void Display(const unsigned char dat[][32])					
{
	unsigned char i;

	for( i = 0 ; i < 16 ; i++ )
	{
		G_ON;		//更新数据时候关闭显示。等更新完数据,打开138显示行。防止重影。
		
		Display_Buffer[0] = dat[0][i];		
		Display_Buffer[1] = dat[0][i+16];

		Send(Display_Buffer[1]);
		Send(Display_Buffer[0]);

		LAT_ON;					//锁存数据   
		delay_us(1);
		LAT_OFF;
		delay_us(1);
		Scan_Line(i);							//选择第i行
		G_OFF;
		delay_us(100);;			//延时一段时间,让LED亮起来。    				
	}	
}

/*********************************************************************************
 * @Function	:	系统设置PB3和PB4为普通IO口
 * @Input		:	deviceSta,设备状态
 * @Output		: 	None
 * @Return		: 	None
 * @Others		: 	JTAG调试方式会受影响
 * @Date			:  2020-04-22
 **********************************************************************************/
void System_PB34_setIO(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 打开AFIO时钟
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
}

四、参考

 

联系方式 微信号:13648103287

  • 联系方式.docx

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
PIC32MX795F512L-80V/PT 1 Microchip Technology Inc 32-BIT, FLASH, 80 MHz, RISC MICROCONTROLLER, PQFP100, 12 X 12 MM, 1 MM HEIGHT, LEAD FREE, PLASTIC, TQFP-100

ECAD模型

下载ECAD模型
$12 查看
STM32H743XIH6 1 STMicroelectronics High-performance and DSP with DP-FPU, Arm Cortex-M7 MCU with 2MBytes of Flash memory, 1MB RAM, 480 MHz CPU, Art Accelerator, L1 cache, external memory interface, large set of peripherals

ECAD模型

下载ECAD模型
$31.15 查看
STM32F207ZGT6TR 1 STMicroelectronics High-performance Arm Cortex-M3 MCU with 1 Mbyte of Flash memory, 120 MHz CPU, ART Accelerator, Ethernet

ECAD模型

下载ECAD模型
$13.88 查看

相关推荐

电子产业图谱

方案定制,程序设计方案、单片机程序设计与讲解、APP定制开发。本公众号致力于向读者传递关于程序设计和开发的相关知识,并分享一些关于软件开发的最佳实践。如果您有什么问题或建议,请随时联系我们。我们将竭诚为您服务