STM32--數碼管顯示使用


STM32 – 數碼管顯示

簡介

1.硬件部分
STM32F103C8T6 最小系統板 一位共陰數碼管
2.軟件部分
Keil軟件編程 數碼管碼表

硬件部分

數碼管

簡介

數碼管,也稱作輝光管,是一種可以顯示數字和其他信息的電子設備。玻璃管中包括一個金屬絲網制成的陽極和多個陰極。大部分數碼管陰極的形狀為數字。管中充以低壓氣體,通常大部分為氖加上一些汞和/或氬。給某一個陰極充電,數碼管就會發出顏色光,視乎管內的氣體而定,一般都是橙色或綠色。

分類

數碼管也稱LED數碼管,不同行業人士對數碼管的稱呼不一樣,其實都是同樣的產品。
按發光二極管單元連接方式可分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極管的陽極接到一起形成公共陽極(COM)的數碼管,共陽數碼管在應用時應將公共極COM接到+5V,當某一字段發光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段就不亮。共陰數碼管是指將所有發光二極管的陰極接到一起形成公共陰極(COM)的數碼管,共陰數碼管在應用時應將公共極COM接到地線GND上,當某一字段發光二極管的陽極為高電平時,相應字段就點亮,當某一字段的陽極為低電平時,相應字段就不亮。

1.共陽數碼管

共陽數碼管在應用時應將公共極COM接到+5V,當某一字段發光二極管的陰極為低電平時,相應字段就點亮,當某一字段的陰極為高電平時,相應字段就不亮。

2.共陰數碼管

對於共陰極數碼管來說,當某個發光二極管的陽極為高電平時,發光二極管點亮,相應的段被顯示。同樣,共陽極數碼管的陽極連接在一起,公共陽極接+5V,當某個發光二極管的陰極接低電平時,該發光二極管被點亮,相應的段被顯示

在這里插入圖片描述

數碼管碼表

unsigned char code smgduan[17] ={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};//共陽數碼管
unsigned char code  smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};共陰數碼管

靜態數碼管硬件電路設計

在這里插入圖片描述

實物

在這里插入圖片描述

軟件部分

/********************************************************************** * 文件名 :smg.c * 描述 :smg 應用函數庫 * 硬件連接:----------------- * | PA0 - A | * | PA1 - B | * | PA2 - C | * | PA3 - D | * | PA4 - E | * | PA5 - F | * | PA6 - G | * | PA7 - DP | * ----------------- *********************************************************************/

#include "smg.h"
#include "delay.h"
//共陽數碼管斷碼表
u8 const smg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

/* * 函數名:SMG_GPIO_Config * 描述 :配置數碼管用到的I/O口 * 輸入 :無 * 輸出 :無 */
void SMG_GPIO_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;       
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);	 // turn off all led
}

/* * 函數名:SMG_Display * 描述 :驅動數碼管顯示0-F * 輸入 :無 * 輸出 :無 */
void SMG_Display(void)
{
	u8 i;
	for(i=0;i<16;i++)
    {
			GPIO_Write(GPIOA,smg_data[i]);
        	delay_ms(1000);    		
    }
}

void Display_N(u8 N)
{
	GPIO_Write(GPIOA,smg_data[N]);   		
}
smg.h
#ifndef __SMG_H
#define __SMG_H

#include "stm32f10x.h" 

void SMG_GPIO_Config(void);
void SMG_Display(void);
void Display_N(u8 N);

#endif /* __SMG_H */

數碼管案例(基於51單片機 四位數碼管模塊(74HC595))

在這里插入圖片描述
14腳:DS(SER),串行數據輸入引腳

13腳:OE, 輸出使能控制腳,它是低電才使能輸出,所以接GND

12腳:RCK,存儲寄存器時鍾輸入引腳。上升沿時,數據從移位寄存器轉存帶存儲寄存器。

11腳:SCK,移位寄存器時鍾引腳,上升沿時,移位寄存器中的bit 數據整體后移,並接受新的bit(從SER輸入)。

10腳:MR,低電平時,清空移位寄存器中已有的bit數據,一般不用,接 高電平即可。

9 腳 :串行數據出口引腳。當移位寄存器中的數據多於8bit時,會把已有的bit“擠出去”,就是從這里出去的。用於595的級聯。

Qx:並行輸出引腳

注意:

當芯片資料上面的引腳說有橫線時,屬於低電平工作。否則高電平工作;

共陽數碼管如果要點亮,對應的引腳需要給1

共陰數碼管如果要點亮,對應的引腳需要給0

#include"reg51.h"
unsigned char code LED_0F[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf};//共陽數碼管碼表
unsigned char code  smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
 //-----------------------------------------------------------------------------
// 函數原形定義
#define uchar unsigned char
#define uint unsigned int
//能夠使用unsigned char //unsigned int 盡量使用最原始的變量類型名字

void main (void);					// 主函數
void LED4_Display (void);			// LED數碼管顯示
void LED_OUT(uchar X);				// LED數碼管單字節串行移位函數

unsigned char code LED_0F[];		// LED字模表
/* 端口引腳定義*/
sbit DIO = P1^0;				//串行數據輸入
sbit RCLK  = P1^1;				//時鍾脈沖信號――上升沿有效
sbit SCLK = P1^2;				//打入信號――――上升沿有效

//-----------------------------------------------------------------------------
// 全局變量
unsigned char LED[8];	//用於LED的8位顯示緩存


//*****************************************************************************
// 主程序
//
void main (void) 
{

	LED[0]=9;
	LED[1]=0;
	LED[2]=8;
	LED[3]=5;

	while(1)
	{
		LED4_Display ();
	} 
} 

// LED數碼管顯示函數
void LED4_Display (void)
{
	unsigned char code *led_table;          // 查表指針
	unsigned char i;
	//顯示第1位
	led_table = LED_0F + LED[0];
	i = *led_table;

	LED_OUT(i);			
	LED_OUT(0x01);	//0x01顯示在第一位 

	RCLK = 0;
	RCLK = 1;
	//顯示第2位
	led_table = LED_0F + LED[1];
	i = *led_table;

	LED_OUT(i);		
	LED_OUT(0x02);	//0x02顯示在第2位 

	RCLK = 0;
	RCLK = 1;
	//顯示第3位
	led_table = LED_0F + LED[2];
	i = *led_table;

	LED_OUT(i);			
	LED_OUT(0x04);	//0x04顯示在第3位

	RCLK = 0;
	RCLK = 1;
	//顯示第4位
	led_table = LED_0F + LED[3];
	i = *led_table;

	LED_OUT(i);			
	LED_OUT(0x08);	//0x08顯示在第4位 

	RCLK = 0;
	RCLK = 1;
}

// LED數碼管單字節串行移位函數
void LED_OUT(unsigned char number)
{
	unsigned char i;
	for(i=8;i>=1;i--)
	{
	 if (number & 0x80)
          {
               DIO=1;
          } 
          else
          {
              DIO=0;
          }
		number<<=1;
		SCLK = 0;
		SCLK = 1;
	}
}

參考資料

共陽數碼管字型碼,共陰數碼管字型碼
在這里插入圖片描述
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM