用ATMEGA128A编写一个TM1628驱动四位共阴数码管显示任意数字的函数
时间: 2023-05-11 21:05:26 浏览: 68
好的,以下是用ATMEGA128A编写的TM1628驱动四位共阴数码管显示任意数字的函数:
```c
#include <avr/io.h>
#include <util/delay.h>
#define CLK_PIN 0 // CLK引脚
#define DIO_PIN 1 // DIO引脚
#define STB_PIN 2 // STB引脚
void TM1628_WriteByte(unsigned char data)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
PORTC &= ~(1 << CLK_PIN); // CLK引脚拉低
if (data & 0x01)
{
PORTC |= (1 << DIO_PIN); // DIO引脚拉高
}
else
{
PORTC &= ~(1 << DIO_PIN); // DIO引脚拉低
}
data >>= 1;
PORTC |= (1 << CLK_PIN); // CLK引脚拉高
}
}
void TM1628_SendCommand(unsigned char cmd)
{
PORTC &= ~(1 << STB_PIN); // STB引脚拉低
TM1628_WriteByte(cmd);
PORTC |= (1 << STB_PIN); // STB引脚拉高
}
void TM1628_Init(void)
{
DDRC |= (1 << CLK_PIN) | (1 << DIO_PIN) | (1 << STB_PIN); // CLK、DIO、STB引脚设置为输出
PORTC |= (1 << CLK_PIN) | (1 << DIO_PIN) | (1 << STB_PIN); // CLK、DIO、STB引脚拉高
TM1628_SendCommand(0x8a); // 设置亮度为最大
TM1628_SendCommand(0x40); // 固定地址模式
TM1628_SendCommand(0xc0); // 设置起始地址为0
}
void TM1628_DisplayNumber(unsigned char num)
{
unsigned char i;
unsigned char buf[4];
for (i = 0; i < 4; i++)
{
buf[i] = num % 10;
num /= 10;
}
TM1628_SendCommand(0xc0); // 设置起始地址为0
for (i = 0; i < 4; i++)
{
TM1628_WriteByte((i << 1) | 0x01); // 设置地址
TM1628_WriteByte(buf[i]); // 写入数据
}
}
int main(void)
{
TM1628_Init();
while (1)
{
TM1628_DisplayNumber(1234);
_delay_ms(1000);
TM1628_DisplayNumber(5678);
_delay_ms(1000);
}
return 0;
}
```
这个函数可以驱动TM1628芯片,实现四位共阴数码管的显示。其中,CLK、DIO、STB引脚分别连接到ATMEGA128A的GPIO口,可以根据需要进行修改。