一、模块介绍
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