STM32開発(7) STM32F103表示 - デジタル管表示の詳細解説


1.基礎知識のポイント

TM1620 チップのマニュアルについて学びますこの実験は、GPIO アナログ タイミングを介して TM1620 デジタル チューブ ディスプレイを実現するための STM32F103 の開発に基づいています。

準備はできたか?私のショータイムを始めてください。


2. 開発環境

1. ハードウェア開発の準備
メイン制御: STM32F103ZET6
制御デジタル管チップ: TM1620
ここに画像の説明を挿入
2. ソフトウェア開発の準備
仮想マシン + VScode + STM32Cube を使用して、ソフトウェア開発用の STM32 を開発し、仮想マシンで直接コンパイルおよびダウンロードします。
この部分は参照できます:ソフトウェア開発環境の構築


3. STM32CubeMX 関連の設定

1. STM32CubeMX の基本構成この実験は、 CubeMX 詳細説明の基本フレームワーク
に基づいて開発されています。

2. TM1620 コントローラーの信号ピン構成 (GPIO 構成)
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入


四、Vscodeコード解説

1. デジタルチューブ関連構造の定義と初期化

//定义结构体类型
typedef struct
{
    
    
    Brightness_Mode_t  Brightness;
    
    void (*TM1620_Init)(void);                              //TM1620初始化
    void (*Disp)(Disp_NUM_t,uint8_t,Disp_DP_Status_t);      //数码管显示特定数组内容
    void (*Disp_Other)(Disp_NUM_t,uint8_t,Disp_DP_Status_t);// 数码管自定义内容显示
} Display_t;

Display_t Display ={
    
    
  Brightness_Mode_Level3,    // 显示亮度等级

  TM1620_Init,               // 初始化,下面有具体实现        
  Disp,                      // 数码管根据特定数组内容显示,下面有具体实现
  Disp_Other  				// 数码管自定义内容显示,下面有具体实现
};

2. マクロ定義を使用して、各ピンの高レベルと低レベルを表します

#define TM1620_STB_SET   HAL_GPIO_WritePin(GPIOC, TM1620_STB_Pin, GPIO_PIN_SET);
#define TM1620_STB_RESET HAL_GPIO_WritePin(GPIOC, TM1620_STB_Pin, GPIO_PIN_RESET);

#define TM1620_CLK_SET   HAL_GPIO_WritePin(GPIOC, TM1620_CLK_Pin, GPIO_PIN_SET);
#define TM1620_CLK_RESET HAL_GPIO_WritePin(GPIOC, TM1620_CLK_Pin, GPIO_PIN_RESET);

#define TM1620_DIN_SET   HAL_GPIO_WritePin(GPIOC, TM1620_DIN_Pin, GPIO_PIN_SET);
#define TM1620_DIN_RESET HAL_GPIO_WritePin(GPIOC, TM1620_DIN_Pin, GPIO_PIN_RESET);

3. チップの書き込みタイミングに合わせて、GPIO シミュレーションを使用する

//TM1620写一个数据
static void TM1620_write_date(uint8_t date)
{
    
    
  uint8_t i = 0;

  TM1620_STB_RESET;                // 使能脚拉低

  for(i=0; i<8; i++){
    
                  // 循环发送数据位
    TM1620_CLK_RESET;                // 时钟拉低

    if((date & 0x01) == 0x01){
    
          // 取出最低位
      TM1620_DIN_SET;
    }              // 数据位拉高  
    else
      TM1620_DIN_RESET;            // 数据位拉低 

    date = date>>1;                // 移位,准备下一个发送的数据
    TM1620_CLK_SET;                // 时钟拉高,发送数据
  }
}

4. デジタル管のデフォルト状態を初期化します
初期化プロセス中にデータを設定するコマンドは、アドレス自動インクリメント モードを使用する Disp_Addr_Mode_Auto です。タイミングはチップマニュアルに基づいており、デジタル管の連続表示を実現しています。

//TM1620初始化 地址增加模式   
static void TM1620_Init(void)      
{
    
    
  TM1620_write_date(Disp_Mode_GRID6_SGE8);            // 设置显示模式
  TM1620_STB_SET;

  TM1620_write_date(Disp_Addr_Mode_Auto);            // 设置数据命令
  TM1620_STB_SET;

  TM1620_write_date(Disp_Register_00H);            // 设置显示地址

  for(int i=0; i<Disp_Register_NUM; i++){
    
    
    TM1620_write_date(0x00);                        // Date
  }
  TM1620_STB_SET;

  TM1620_write_date(Display.Brightness);            // 设置控制命令
  TM1620_STB_SET;
}  

5.固定アドレス表示のデジタル管インターフェースを作る

uint8_t Date[16]    = {
    
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};  //数码管译码 0 - 9

static void Disp(Disp_NUM_t disp_num, uint8_t disp_value, Disp_DP_Status_t dp_status)  
{
    
    
  //参数范围检查
  if(disp_value > 0x0F)
  {
    
    
    System.Assert_Failed();
  }

  TM1620_write_date(Disp_Mode_GRID6_SGE8);            // 设置显示模式
  TM1620_STB_SET;

  TM1620_write_date(Disp_Addr_Mode_Fix);            // 设置数据命令
  TM1620_STB_SET;

  TM1620_write_date(disp_num);                       // 设置显示地址
  if(dp_status == Disp_DP_ON)
    TM1620_write_date(Date[disp_value]+0x80);
  else
    TM1620_write_date(Date[disp_value]);                     // Date
  TM1620_STB_SET;

  TM1620_write_date(Display.Brightness);            // 设置控制命令
  TM1620_STB_SET;
}

6.デジタルチューブはカスタムコンテンツを表示します

static void Disp_Other(Disp_NUM_t Disp_NUM,uint8_t Dat,Disp_DP_Status_t Disp_DP_Status) 
{
    
    
	//设置显示模式
	TM1620_write_date(Disp_Mode_GRID6_SGE8); 
	TM1620_STB_SET;
	
	//地址固定
	TM1620_write_date(Disp_Addr_Mode_Fix); 
	TM1620_STB_SET;
	
	//写地址
	TM1620_write_date(Disp_NUM);
	//写数据
	if(Disp_DP_Status == Disp_DP_ON)
		TM1620_write_date(Dat + 0x80);
	else
		TM1620_write_date(Dat);
	TM1620_STB_SET;
	
	//显示
  TM1620_write_date(Display.Brightness);
	TM1620_STB_SET; 
}


5. 結果のデモンストレーション

Display.Disp インターフェイスを呼び出して、デジタル チューブ ディスプレイを制御します。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_43564241/article/details/129410421