51单片机驱动TM1650
时间: 2023-10-30 18:03:56 浏览: 544
TM1650是一种常用的LED数码管驱动芯片,可以驱动8位共阴数码管或者共阳数码管。以下是51单片机驱动TM1650的基本步骤:
1.将TM1650的SCL引脚和51单片机的P1口的某一位相连。
2.将TM1650的SDA引脚和51单片机的P1口的另一位相连。
3.初始化TM1650,发送起始信号,然后发送地址码。
4.发送控制字节,确定数码管的亮度和显示方式等。
5.发送数据,将要显示的数据发送给TM1650。
6.结束通信,发送停止信号。
以下是51单片机驱动TM1650的示例代码:
```
#include<reg52.h>
sbit SDA=P1^0;
sbit SCL=P1^1;
void delay_us(int us)
{
while(us--)
_nop_();
}
void TM1650_Write(unsigned char dat)
{
unsigned char i;
for(i=0; i<8; i++)
{
SDA = dat & 0x80;
SCL = 0;
delay_us(5);
SCL = 1;
dat <<= 1;
}
SDA = 1;
SCL = 0;
delay_us(5);
SCL = 1;
delay_us(5);
}
void TM1650_Start()
{
SDA = 1;
SCL = 1;
delay_us(5);
SDA = 0;
delay_us(5);
SCL = 0;
delay_us(5);
}
void TM1650_Stop()
{
SDA = 0;
SCL = 1;
delay_us(5);
SDA = 1;
delay_us(5);
}
void TM1650_Init()
{
TM1650_Start();
TM1650_Write(0x48); //地址码,共阳数码管用0x68
TM1650_Stop();
TM1650_Start();
TM1650_Write(0x40); //控制字节,亮度最大,显示模式为普通
TM1650_Stop();
}
void TM1650_Display(unsigned char *p)
{
unsigned char i;
TM1650_Start();
TM1650_Write(0x48); //地址码,共阳数码管用0x68
for(i=0; i<8; i++)
TM1650_Write(p[i]);
TM1650_Stop();
}
void main()
{
unsigned char num[8]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07};
TM1650_Init();
while(1)
{
TM1650_Display(num);
}
}
```
在上述代码中,num数组存放了要显示的数字的编码,其中0x3f对应数字0,0x06对应数字1,以此类推。在主函数中,调用TM1650_Init函数初始化TM1650,然后不断调用TM1650_Display函数进行显示。
阅读全文