一、模塊介紹
16X16點陣顯示器是一種采用LED點陣組成的顯示設(shè)備,
它由16行16列的LED點組成,用于顯示字符、圖形等信息。每個LED點可以獨立控制亮滅,通過控制每個點的亮度,可以組合成不同的字符和圖形,實現(xiàn)信息的顯示。 16X16點陣顯示器通常用于戶外廣告、公交車站信息顯示、商場信息公告、停車場引導(dǎo)等領(lǐng)域,具有顯示效果好、可視距離遠、使用壽命長等特點。
16X16點陣顯示器的工作原理是通過控制器發(fā)送指令,控制每個LED點的亮滅,形成所需的字符和圖形??刂破骺梢酝ㄟ^串口、并口、網(wǎng)絡(luò)等方式與計算機或其他設(shè)備連接,實現(xiàn)信息的傳輸和顯示。
16X16點陣顯示器的優(yōu)點包括:
1. 顯示效果好:采用LED點陣顯示,字符和圖形清晰,可視距離遠。
2. 使用壽命長:LED燈具有很長的使用壽命,一般可以達到10萬小時以上。
3. 低功耗:LED燈具有較低的功耗,有利于節(jié)能降耗。
4. 安裝方便:可以根據(jù)需要進行懸掛、固定等方式安裝。
5. 維護簡單:LED點陣顯示器采用模塊化設(shè)計,維護方便。
6. 廣泛應(yīng)用:適用于各種場合的信息顯示,如戶外廣告、公交車站、商場、停車場等。 總之,16X16點陣顯示器是一種性能優(yōu)良、應(yīng)用廣泛的顯示設(shè)備,具有很高的實用價值。
二、資料獲取
關(guān)注微信公眾號--星之援工作室 發(fā)送關(guān)鍵字(16X16點陣)
????
效果展示
接線規(guī)則(可在lcd.h中自行修改)
三、代碼編寫
main
/*--------------------------------------------------------*
* *
* 星之援網(wǎng)絡(luò)科技工作室學習資料v1.0 *
* *
* 程序介紹:16*16實驗 *
* 實現(xiàn)效果:顯示漢字何 *
* *
*--------------------------------------------------------*
*/
#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); //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
// 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
// 狀態(tài)
#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 : 系統(tǒng)設(shè)置PB3和PB4為普通IO口
* @Input : deviceSta,設(shè)備狀態(tài)
* @Output : None
* @Return : None
* @Others : JTAG調(diào)試方式會受影響
* @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); // 根據(jù)設(shè)定參數(shù)初始化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 發(fā)送數(shù)據(jù)
* @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; //上升沿發(fā)送數(shù)據(jù)
delay_us(1);
CLK_OFF;
delay_us(1);
dat >>= 1;
}
}
/*!
* @brief num為字數(shù) 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; //更新數(shù)據(jù)時候關(guān)閉顯示。等更新完數(shù)據(jù),打開138顯示行。防止重影。
Display_Buffer[0] = dat[0][i];
Display_Buffer[1] = dat[0][i+16];
Send(Display_Buffer[1]);
Send(Display_Buffer[0]);
LAT_ON; //鎖存數(shù)據(jù)
delay_us(1);
LAT_OFF;
delay_us(1);
Scan_Line(i); //選擇第i行
G_OFF;
delay_us(100);; //延時一段時間,讓LED亮起來。
}
}
/*********************************************************************************
* @Function : 系統(tǒng)設(shè)置PB3和PB4為普通IO口
* @Input : deviceSta,設(shè)備狀態(tài)
* @Output : None
* @Return : None
* @Others : JTAG調(diào)試方式會受影響
* @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);
}
四、參考
聯(lián)系方式 微信號:13648103287