以前一直用的TM1628来驱动共阴数码管,最近一项目需要驱动共阳,不知道那里应该调整下,现在还没有显示过;下面是驱动
#include "tm1628.h"
void send_8bit(u8 dat)
{
u8 i;
for(i=0;i<8;i++){
if(dat&0x01)
TM_dio = 1;
else
TM_dio = 0;
TM_clk = 0;
nop();
nop();
nop();
nop();
nop();
nop();
TM_clk = 1;
nop();
nop();
nop();
dat = dat>>1;
}
}
void command(u8 com)
{
TM_stb = 1;
TM_stb = 0;
send_8bit(com);
}
void delay_ms(u16 x)//廷时1ms*x
{
u16 a,b;
for(b=x;b>0;b--)
for(a=125;a>0;a--);
}
void delayus(void)
{
;
}//延时4us
void WR_TM1628_Byte(u8 TM_dat)
{
u8 i;
for(i=0;i<8;i++)
{
TM_dio=(TM_dat&0x01);//强制转成:位,低位先发送
TM_clk=0;//---------|
TM_dat>>=1;//-------|
TM_clk=1;//---------|___|----/上升沿有效
}
}
void Wr_TM_CMD(u8 TMcmd)
{
TM_stb=0;//片选,0有效
WR_TM1628_Byte(TMcmd);
TM_stb=1;//片选,0有效
TM_dio=1;
}
void TM1628_clear_display(void)
{
Wr_TM_CMD(0x03);//显示模式
Wr_TM_CMD(0x40);//地址自动加一
TM_stb=0;//片选,0有效
WR_TM1628_Byte(0xc0);//地址0开始
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);//第一个8
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);//第二个8加传感器启动中
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
WR_TM1628_Byte(0x00);
TM_stb=1;//片选,0有效
Wr_TM_CMD(0x8f);//送亮度指令
}
void TM1628_all_display(void)
{
Wr_TM_CMD(0x03);//显示模式
Wr_TM_CMD(0x40);//地址自动加一
TM_stb=0;//片选,0有效
WR_TM1628_Byte(0xc0);//地址0开始
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);//第一个8
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);//第二个8加传感器启动中
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
WR_TM1628_Byte(0xff);
TM_stb=1;//片选,0有效
Wr_TM_CMD(0x8f);//送亮度指令
}
void TM1628_display(u8 addr,u8 dat)
{
Wr_TM_CMD(0x03);//显示模式
Wr_TM_CMD(0x44);//地址自动加一
TM_stb=0;//片选,0有效
WR_TM1628_Byte(addr);//地址0开始
WR_TM1628_Byte(dat);
TM_stb=1;//片选,0有效
Wr_TM_CMD(0x8f);//送亮度指令
}
void TM1628_init(void)
{
GPIO_Init(GPIOC, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_SLOW);
GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_SLOW);
GPIO_Init(GPIOC, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_SLOW);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>