IIC驱动程序
iic.c //管脚需要自行定义
void start(void) //产生IIC起始信号
{
IIC_SCL =1;
delay_us(2);
IIC_SDA =1;
delay_us(2);
IIC_SDA =0;
}
void stop(void) //停止信号
{
IIC_SCL =0;
delay_us(2);
IIC_SDA =0;
delay_us(2);
IIC_SCL =1;
delay_us(2);
IIC_SDA =1;
}
void Write_Byte(u8 dat) //写字节
{
u16 i = 0;
for(i = 0; i<8;i++)
{
IIC_SCL = 0;
delay_us(2);
if(dat&0x01) //先传低位再传高位
{
IIC_SDA=1;
delay_us(3);
}
else
{
IIC_SDA=0;
delay_us(3);
}
dat>>=1;
IIC_SCL = 1;
delay_us(3);
}
}
TM1640驱动点亮LED灯
TM1640.c
u8 DisBuf[16] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void Init_Display() //显示初始化
{
u8 i;
start();
Write_Byte(0x40); //0x40 工作状态 地址自动增加
stop();
start();
Write_Byte(0xC0); //地址模式
for(i=0;i<16;i++)
{
Write_Byte(DisBuf[i]);
}
stop();
start();
Write_Byte(0x8d); //亮度指令
stop();
}
main函数
main.c
void main(void)
{
IO_Init();
Init_Display();
// Updata_Display();
while(1)
{
;
}
}
其他管脚需要根据自己的硬件自行定义
其他函数
void delay_us(u16 us)
{
while(us--)
{
_nop_(); //需要头文件 #include "intrins.h"
}
}