历史上的今天
今天是:2025年08月14日(星期四)
2018年08月14日 | 基于STM32的常用数码管芯片TM1637驱动
2018-08-14 来源:eefocus
IIC协议这里就不多说了;
使用模拟IIC口 定义B14 B15
#define AnalonSDA_Pin GPIO_PIN_12
#define AnalonSDA_GPIO_Port GPIOB
#define AnalonSCL_Pin GPIO_PIN_13
#define AnalonSCL_GPIO_Port GPIOB
IO配置为输出
/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, AnalonSDA_Pin|AnalonSCL_Pin|BIG_SDA_Pin|BIG_SCL_Pin, GPIO_PIN_RESET);
/*Configure GPIO pins : PBPin PBPin */
GPIO_InitStruct.Pin = AnalonSDA_Pin|AnalonSCL_Pin|BIG_SDA_Pin|BIG_SCL_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
驱动程序如下
void TM1637_start(void)
{
SCLK_H;
Delay_us(1);
DIO_H;
Delay_us(1);
DIO_L;
Delay_us(1);
SCLK_L;
Delay_us(1);
}
void TM1637_stop(void)
{
SCLK_L;
Delay_us(1);
DIO_L;
Delay_us(1);
SCLK_H;
Delay_us(1);
DIO_H;
Delay_us(1);
}
void TM1637_ack(void)
{
SCLK_L;
DIO_H;
while(HAL_GPIO_ReadPin(GPIOB, BIG_SDA_Pin));
SCLK_H;
DIO_IN;
}
void TM1637_Write(unsigned char DATA) //写数据函数
{
unsigned char i;
for(i=0;i<8;i++)
{
SCLK_L;
if(DATA & 0x01)DIO_H; //SDA
else DIO_L;
DATA >>= 1;
SCLK_H;
}
TM1637_ack();
}
unsigned char READ_KEY(void)
{
unsigned char i,temp=0;
TM1637_start();
TM1637_Write(READ_COMMAND);
DIO_IN;
for(i=0;i<8;i++)
{
SCLK_L;
Delay_us(1);
temp<<=1;
SCLK_H;
if(HAL_GPIO_ReadPin(GPIOB, BIG_SDA_Pin))temp+=1;
Delay_us(1);
}
TM1637_ack();
TM1637_stop();
return temp;
}
void display_fix(unsigned char add,unsigned char DispData) //指定地址写入数据
{
TM1637_start(); //start signal sent to TM1637 from MCU
TM1637_Write(ADD_FIX);//
TM1637_stop(); //
TM1637_start(); //
TM1637_Write(ADDR_COMMAND|add);//
TM1637_Write(DispData);//
TM1637_stop(); //
}
void display_char(unsigned char add,unsigned char dis_char)
{
unsigned char point_flag,char_code;
point_flag=dis_char&0x80;
dis_char&=0x7f;
if(dis_char<16)
char_code=tab[dis_char];
else switch(dis_char)
{
case 'L':char_code=0x38;break;
case 'H':char_code=0x76;break;
case 'U':char_code=0x3e;break;
case 'N':char_code=0x37;break;
case 'P':char_code=0x73;break;
case 'J':char_code=0x0e;break;
case 'O':char_code=0x3f;break;
case 'o':char_code=0x5c;break;
case 'n':char_code=0x54;break;
case 'Y':char_code=0x6e;break;
case ' ':char_code=0;break;
default:char_code=dis_char;break;
}
display_fix(add,char_code|point_flag);
}
void init_TM1637(void)
{
unsigned char i;
TM1637_start();
TM1637_Write(ADD_AUTO);
TM1637_stop();
TM1637_start();
TM1637_Write(ADDR_COMMAND);
for(i=0;i<6;i++)
TM1637_Write(0);
TM1637_stop();
TM1637_start();
TM1637_Write(BRIGHT);
TM1637_stop();
}
void Delay_us(unsigned int i)
{
for(;i>0;i--);
}
最后在任务中调用
void StartDefaultTask(void const * argument)
{
unsigned char i,j;
init_TM1637();
for(;;)
{
for(i=0;i<16;i++)
{
for(j=0;j<4;j++)
{
display_char(j,((j+i)%16)|0x80);
}
HAL_Delay(500);
}
HAL_Delay(1);
}
}
史海拾趣
|
问题: Query:在从原理图更新到PCB的时候,如何保持原有器件的布局? 在Protel中,通常都会遇到需要修改原理图时,如何保持原有PCB板中器件的布局的问题。下面讲述一种有效的方式就是在PCB编辑窗口中使用菜单命令Project » Component Links来完成 ...… 查看全部问答> |
|
之前介绍过如何创建一个基本的Windows CE的平台,现在咱就上一次没有提到的部分进行一下补充定制并build OS。 首先,在VS2005 IDE中的View -> Other Windows -> Catalog Items中,添加或者删除相应的模块来完成OS定制,选项如下: 然后配置buil ...… 查看全部问答> |
|
本帖最后由 辛昕 于 2018-4-8 22:59 编辑 关于这个东西,我后来其实从来没捡起过。 但是,也就没有必要惦记着了。 当然了,每次说到这个东西,都会想起,故人已去~ 在做运放的过程中,知道了一个叫做模拟乘法器的东西。 但是想上网看看这个东 ...… 查看全部问答> |
|
Windows CE 5.0的ARMV4I补丁,名称如下: WinCEPB50-051231-Product-Update-Rollup-Armv4I.msi WinCEPB50-060131-2006M01-Armv4I.msi WinCEPB50-060228-2006M02-Armv4I.msi WinCEPB50-06 ...… 查看全部问答> |
|
谁有这样的程序,急求,可以和我联系. email:gcgaoxj@yahoo.com [ 本帖最后由 dreaming123 于 2011-3-16 21:42 编辑 ]… 查看全部问答> |
|
刚刚看到可以用:用社区芯币兑换51开发板PCB板!早知道在这里换了,自己花了150快大洋买了一个 能不能用社区芯币兑换ARM的开发板呢… 查看全部问答> |
|
请问有没有建立工程的教程,我按照官方网站的教程建立,(用的是ise13.1), 各种无奈啊,遇到的问题: 1、头文件的处理,我把用到的头文件拷到板级包的include文件夹,开始时可以,但是后面工程关闭,又出现 没找到头文件,那不是又得拷贝一次, ...… 查看全部问答> |
|
摘要:鉴于FPGA和DSP各自的优势,FPGA+DSP信号处理架构,已成为信号处理系统的常用结构。但目前此结构处理平台功能固定、通用性差,或对平台的介绍缺乏具体实现。文中针对以上两点提出一种通用信号处理系统。该系统不仅将两种处理器的优点集于一身 ...… 查看全部问答> |




