GNGN77

### nixie_tube.h

```c
#ifndef _NIXIE_TUBE_H
#define _NIXIE_TUBE_H

#include "main.h"

/****************************** define ******************************/
#define STB_H HAL_GPIO_WritePin(STB_GPIO_Port,STB_Pin,GPIO_PIN_SET)
#define STB_L HAL_GPIO_WritePin(STB_GPIO_Port,STB_Pin,GPIO_PIN_RESET)
#define CLK_H HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_SET)
#define CLK_L HAL_GPIO_WritePin(CLK_GPIO_Port,CLK_Pin,GPIO_PIN_RESET)
#define DIO_H HAL_GPIO_WritePin(DIO_GPIO_Port,DIO_Pin,GPIO_PIN_SET)
#define DIO_L HAL_GPIO_WritePin(DIO_GPIO_Port,DIO_Pin,GPIO_PIN_RESET)


/****************************** variable ******************************/


/****************************** function ******************************/
void NixieTubeInit(void);
void WriteByte(uint8_t dat);
void WriteCMD(uint8_t cmd);
void Display(uint8_t dat);
void Display4(uint8_t dat1,uint8_t dat2,uint8_t dat3,uint8_t dat4);

void TestDisplay(void);

#endif


```

### nixie_tube.c

```c
#include "nixie_tube.h"

// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// 0 1 2 3 4 5 6 7 8 9 a b c d e f 全灭 r
uint8_t LED_Ku[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x50};
/* 若要显示“数字.”这种形式,可编写为“LED_Ku[LED_Display[i]]|0x80” */
uint8_t LED_Display[] = {0,1,2,3};

 

void NixieTubeInit(void)
{
STB_H;
CLK_H;
DIO_H;
}
void WriteByte(uint8_t dat)
{
uint8_t i;

STB_L;
__NOP();
for(i = 0;i < 8;i++)
{
CLK_L;
__NOP();
/* 低位优先 */
(dat & 0x01)?DIO_H:DIO_L;
CLK_H;
__NOP();
dat >>= 1;
}
HAL_Delay(1);
}
void WriteCMD(uint8_t cmd)
{
STB_H;
HAL_Delay(1);
STB_L;
HAL_Delay(1);
/* STB下降沿后的Data输入的第一个字节为一条指令 */
WriteByte(cmd);
}
void Display(uint8_t dat)
{
uint8_t i;

/* 【显示模式】4位7段 */
WriteCMD(0x00);
/* 【数据设置】普通模式、地址自增、写数据到现实寄存器 */
WriteCMD(0x40);
/* 【地址设置】起始地址为0x00 */
WriteCMD(0xC0);
/* 注意!!!这里只有设置为8才能显示4位LED数码管 */
for(i = 0;i < 8;i++)
WriteByte(dat);
/* 【显示控制】开显示、辉度1/16 */
WriteCMD(0x88);
}
void Display4(uint8_t dat1,uint8_t dat2,uint8_t dat3,uint8_t dat4)
{
/* 【显示模式】4位7段 */
WriteCMD(0x00);
/* 【数据设置】普通模式、地址自增、写数据到现实寄存器 */
WriteCMD(0x40);
/* 【地址设置】起始地址为0x00 */
WriteCMD(0xC0);
/* 注意!!!这里只有设置为8才能显示4位LED数码管 */
WriteByte(dat1);
WriteByte(dat1);
WriteByte(dat2);
WriteByte(dat2);
WriteByte(dat3);
WriteByte(dat3);
WriteByte(dat4);
WriteByte(dat4);
/* 【显示控制】开显示、辉度1/16 */
WriteCMD(0x88);
}

void TestDisplay(void)
{
/* 测试Display */
{
Display(0x01);
HAL_Delay(1000);
Display(0x02);
HAL_Delay(1000);
Display(0x04);
HAL_Delay(1000);
Display(0x08);
HAL_Delay(1000);

Display(0x10);
HAL_Delay(1000);
Display(0x20);
HAL_Delay(1000);
Display(0x40);
HAL_Delay(1000);
Display(0x80);
HAL_Delay(1000);
}
/* 测试Display4 */
Display4(0x01,0x02,0x04,0x08);
HAL_Delay(2000);

Display4(LED_Ku[LED_Display[0]],LED_Ku[LED_Display[1]],LED_Ku[LED_Display[2]],LED_Ku[LED_Display[3]]);
HAL_Delay(2000);

LED_Display[0] = 14;
LED_Display[1] = 17;
LED_Display[2] = 17;
LED_Display[3] = 1;
Display4(LED_Ku[LED_Display[0]],LED_Ku[LED_Display[1]],LED_Ku[LED_Display[2]],LED_Ku[LED_Display[3]]);
HAL_Delay(2000);
}

```

 

posted on 2024-12-06 22:00  小李一s  阅读(4)  评论(0编辑  收藏  举报