用ATMEGA128A编写一个TM1628驱动四位数码管显示任意数字的函数
时间: 2023-05-11 09:05:26 浏览: 197
四位数码管显示程序
5星 · 资源好评率100%
好的,以下是用ATMEGA128A编写的TM1628驱动四位数码管显示任意数字的函数的代码:
```c
#include <avr/io.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_SetDisplay(unsigned char addr, unsigned char data)
{
TM1628_SendCommand(0x44); // 写入数据命令
PORTC &= ~(1 << STB_PIN); // STB引脚拉低
TM1628_WriteByte(0xC0 | addr); // 写入地址
TM1628_WriteByte(data); // 写入数据
PORTC |= (1 << STB_PIN); // STB引脚拉高
}
void TM1628_Init()
{
DDRC |= (1 << CLK_PIN) | (1 << DIO_PIN) | (1 << STB_PIN); // 设置引脚为输出模式
PORTC |= (1 << CLK_PIN) | (1 << DIO_PIN) | (1 << STB_PIN); // 引脚拉高
TM1628_SendCommand(0x8A); // 设置亮度
TM1628_SendCommand(0x40); // 固定地址模式
}
void TM1628_DisplayNumber(unsigned int num)
{
unsigned char digit[4];
digit[0] = num % 10;
digit[1] = (num / 10) % 10;
digit[2] = (num / 100) % 10;
digit[3] = (num / 1000) % 10;
TM1628_SetDisplay(0x00, digit[0]);
TM1628_SetDisplay(0x01, digit[1]);
TM1628_SetDisplay(0x02, digit[2]);
TM1628_SetDisplay(0x03, digit[3]);
}
int main()
{
TM1628_Init();
TM1628_DisplayNumber(1234);
while(1);
return 0;
}
```
希望这个代码能够帮到你!
阅读全文