怎么驱动不了数码管呢?
时间:10-02
整理:3721RD
点击:
我用的STC的单片机,共阳极的数码管,用的驱动芯片TM1638,你们看看我的程序,哪里出了问题,数码管不亮啊。帮忙指点下谢谢了。在线等~~~
#include <stc12c5a60.h>
#define DATA_COMMAND 0X40
#define DISP_COMMAND 0x80
#define ADDR_COMMAND 0XC0
//TM1638模块引脚定义
sbit DIO=P2^1;
sbit CLK=P2^0;
sbit STB=P4^0;
unsigned char num[10]; //各个数码管显示的值
//共阴数码管显示代码
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳极数码管0~F
void TM1638_Write(unsigned char DATA) //写数据函数
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if(DATA&0X01)
DIO=1;
else
DIO=0;
DATA>>=1;
CLK=1;
}
}
/*unsigned char TM1638_Read(void) //读数据函数
{
unsigned char i;
unsigned char temp=0;
DIO=1; //设置为输入
for(i=0;i<8;i++)
{
temp>>=1;
CLK=0;
if(DIO)
temp|=0x80;
CLK=1;
}
return temp;
} */
void Write_COM(unsigned char cmd) //发送命令字
{
STB=0;
TM1638_Write(cmd);
STB=1;
}
void Write_DATA(unsigned char add,unsigned char DATA) //指定地址写入数据
{
Write_COM(0x44);
STB=0;
TM1638_Write(0xc0|add);
TM1638_Write(DATA);
STB=1;
}
void init_TM1638(void)
{
unsigned char i;
Write_COM(0x8b);//亮度
Write_COM(0x40); //写 数据命令
STB=0;
TM1638_Write(0xc0); //写地址命令
for(i=0;i<16;i++)
TM1638_Write(0x00);
STB=1;
}
/*unsigned char led(unsigned char adress_led,da_led)
{
STB=1;
TM1638_Write(0x44);
STB=1;
TM1638_Write(adress_led);
TM1638_Write(da_led);
STB=1;
return 0;
}
*/
int main(void)
{
//unsigned char i;
init_TM1638();
//初始化TM1638
// for(i=0;i<8;i++)
// Write_DATA(i<<1,tab[0]); //初始化寄存器
while(1)
{
Write_DATA(0x00,0x01);
Write_DATA(0x02,0x01);
Write_DATA(0x04,0x01);
Write_DATA(0x06,0x01);
Write_DATA(0x08,0x01);
Write_DATA(0x0a,0x01);
Write_DATA(0x0c,0x00);
/*i=Read_key(); //读按键值
if(i<8)
{
num[i]++;
while(Read_key()==i); //等待按键释放
if(num[i]>15)
num[i]=0;
Write_DATA(i*2,tab[num[i]]);
Write_allLED(1<<i);
}*/
}
}
#include <stc12c5a60.h>
#define DATA_COMMAND 0X40
#define DISP_COMMAND 0x80
#define ADDR_COMMAND 0XC0
//TM1638模块引脚定义
sbit DIO=P2^1;
sbit CLK=P2^0;
sbit STB=P4^0;
unsigned char num[10]; //各个数码管显示的值
//共阴数码管显示代码
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳极数码管0~F
void TM1638_Write(unsigned char DATA) //写数据函数
{
unsigned char i;
for(i=0;i<8;i++)
{
CLK=0;
if(DATA&0X01)
DIO=1;
else
DIO=0;
DATA>>=1;
CLK=1;
}
}
/*unsigned char TM1638_Read(void) //读数据函数
{
unsigned char i;
unsigned char temp=0;
DIO=1; //设置为输入
for(i=0;i<8;i++)
{
temp>>=1;
CLK=0;
if(DIO)
temp|=0x80;
CLK=1;
}
return temp;
} */
void Write_COM(unsigned char cmd) //发送命令字
{
STB=0;
TM1638_Write(cmd);
STB=1;
}
void Write_DATA(unsigned char add,unsigned char DATA) //指定地址写入数据
{
Write_COM(0x44);
STB=0;
TM1638_Write(0xc0|add);
TM1638_Write(DATA);
STB=1;
}
void init_TM1638(void)
{
unsigned char i;
Write_COM(0x8b);//亮度
Write_COM(0x40); //写 数据命令
STB=0;
TM1638_Write(0xc0); //写地址命令
for(i=0;i<16;i++)
TM1638_Write(0x00);
STB=1;
}
/*unsigned char led(unsigned char adress_led,da_led)
{
STB=1;
TM1638_Write(0x44);
STB=1;
TM1638_Write(adress_led);
TM1638_Write(da_led);
STB=1;
return 0;
}
*/
int main(void)
{
//unsigned char i;
init_TM1638();
//初始化TM1638
// for(i=0;i<8;i++)
// Write_DATA(i<<1,tab[0]); //初始化寄存器
while(1)
{
Write_DATA(0x00,0x01);
Write_DATA(0x02,0x01);
Write_DATA(0x04,0x01);
Write_DATA(0x06,0x01);
Write_DATA(0x08,0x01);
Write_DATA(0x0a,0x01);
Write_DATA(0x0c,0x00);
/*i=Read_key(); //读按键值
if(i<8)
{
num[i]++;
while(Read_key()==i); //等待按键释放
if(num[i]>15)
num[i]=0;
Write_DATA(i*2,tab[num[i]]);
Write_allLED(1<<i);
}*/
}
}
麻烦高手指点下
把电路贴上来,我帮你看一下
还得电路图!
谢谢斑竹了。这个共阴极的,共阳极就是把GR1-7和SG1-10换一下。
这个事电路图
现在解决了吗?还有那些按键咋回事啊?
TM1638 是一种带键盘扫描接口的内存映射型LED(发光二极管显示器)驱动控制专用电路,可以驱动10段*8位,80点阵,8*2按键识别。内部集成有MCU 数字接口、数据锁存器、LED 高压驱动及8级灰度调节电路、内部RC振荡、内置上电复位及低电压复位电路、键盘扫描等电路,芯片的段位可通过软件设置来实现10*8进行配置来适应不同连接的LED数码屏,同时可根据不同的显示场合调节LED的灰度,以实现降低功耗的要求,同时具备多段方便数字计算显示。本产品性能优良,质量可靠。采用SOP28 的封装形式。
我这里是深圳市天微电子有限公司,可以提供关于TM1638技术支持和服务,
欢迎来电,手机:13824381476 肖R
QQ联系:190892814
PCB打样找华强 http://www.hqpcb.com/3 样板2天出货