目录
关注微信公众号--星之援工作室 发送关键字(16X16点阵)
一、模块介绍
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 ok\n"); 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); }
四、参考
单片机 LED点阵_单片机点阵-CSDN博客文章浏览阅读1.3w次,点赞44次,收藏156次。单片机 LED点阵一、简述 使用8×8LED点阵显示汉字。向上滚动"中华"两个汉字。 文件打包:链接: https://pan.baidu.com/s/1oHSAIY6qVA7qFFWUvMvJEA 密码: snyg二、效果三、工程文件结构1、Keil工程2、仿真电路图四、代码88led.c文件#include<reg51.h>#define uint unsigne..._单片机点阵https://blog.csdn.net/nanfeibuyi/article/details/80539461?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171438431616800222828963%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171438431616800222828963&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-17-80539461-null-null.nonecase&utm_term=%E7%82%B9%E9%98%B5&spm=1018.2226.3001.445051单片机入门——8X8点阵LED_单片机8×8led点阵-CSDN博客文章浏览阅读2.7w次,点赞47次,收藏369次。文章目录1.初识点阵LED1.1.什么是点阵LED1.2.点亮LED点阵1.3.点阵显示图案2.点阵的动画显示2.1.点阵的纵向移动2.2.点阵的横向移动1.初识点阵LED1.1.什么是点阵LEDLED点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示文字、图片、动画、视频等,是各部分组件都模块化的显示器件,通常由显示模块、控制系统及电源系统组成。LED点阵显示屏制作简单,安装方便,被广泛应用于各种公共场合,如汽车报站器、广告屏以及公告牌等。点阵LED显示屏作为一种现代电子媒体设备,具有灵活的的显_单片机8×8led点阵https://blog.csdn.net/m0_56646606/article/details/122980667?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171438431616800222828963%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171438431616800222828963&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-19-122980667-null-null.nonecase&utm_term=%E7%82%B9%E9%98%B5&spm=1018.2226.3001.4450