加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

嵌入式外設(shè)-16X16點陣顯示器

04/30 08:32
5232
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

一、模塊介紹

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

  • 聯(lián)系方式.docx

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

方案定制,程序設(shè)計方案、單片機程序設(shè)計與講解、APP定制開發(fā)。本公眾號致力于向讀者傳遞關(guān)于程序設(shè)計和開發(fā)的相關(guān)知識,并分享一些關(guān)于軟件開發(fā)的最佳實踐。如果您有什么問題或建議,請隨時聯(lián)系我們。我們將竭誠為您服務(wù)