STM32/Template
2025-06-26 02:35:40 +08:00
..
README.md 更新 Template/README.md 2025-06-26 02:35:40 +08:00

各种模板

修改后使用

数码管

//数码管地址常量宏定义
#define SEG_I2C_ADDR (0x60)
//#define SEG_I2C_ADDR (0x70)
  
#define SEG_MEM_ADDR (0x10)
  
//数码管初始化参数
uint8_t Seg_Pos = 0;
uint16_t Seg_Slow_Down = 0;
uint8_t Seg_Point[8] = {0,0,0,0,0,0,0,0};//默认没有小数点
uint8_t Seg_Buf[8] = {10,10,10,10,10,10,10,10};//默认全部熄灭
uint8_t Seg_Char[12] =
{
	0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x40	        //共阴 0-9,全灭 和 -
	//0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xB0		//共阳 0-9,全灭 和 -
};
  
//数码管处理部分
void Seg_Disp(uint8_t Wela, uint8_t Dula, uint8_t IsPoint)
{
	//小数点设置,需根据实际情况进行更改;以下代码适用于共阴极数码管
	uint8_t seg_data = Seg_Char[Dula];
	if(IsPoint)
		seg_data |= 0x80;  // 设置小数点
	else
		seg_data &= 0x7F;  // 清除小数点
  
	// 共阳极使用以下代码
	// if(IsPoint)
	// 	seg_data &= 0x7F;
	// else
	// 	seg_data |= 0x80;

	HAL_I2C_Mem_Write(&hi2c1,SEG_I2C_ADDR,SEG_MEM_ADDR+Wela,I2C_MEMADD_SIZE_8BIT,&seg_data,1,100);//用在mp157开发板中
}
  
//显示修改部分 ,使用主函数调用
void Seg_Proc()
{
	if(Seg_Slow_Down) return;
	Seg_Slow_Down = 1;

    //熄灭就是10
	Seg_Buf[0] = changeme;
	Seg_Point[0] = 1;//表示第一个数码管显示小数点
	Seg_Buf[1] = 10;
	Seg_Buf[2] = 10;
	Seg_Buf[3] = 10;
	Seg_Buf[4] = 10;
	Seg_Buf[5] = 10;
	Seg_Buf[6] = 10;
	Seg_Buf[7] = 10;
}
  
//定时器(1ms)中写以下代码
if(++Seg_Slow_Down == 500)  Seg_Slow_Down = 0;	// 数码管处理慢速定时器
  
Seg_Pos++;
if(Seg_Pos >= 8) Seg_Pos = 0;
Seg_Disp(Seg_Pos, Seg_Buf[Seg_Pos], Seg_Point[Seg_Pos]); // 数码管显示处理

按键扫描及消抖