微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 怎么驱动不了数码管呢?

怎么驱动不了数码管呢?

时间: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);
                }*/
        }
}

麻烦高手指点下

把电路贴上来,我帮你看一下

还得电路图!

谢谢斑竹了。这个共阴极的,共阳极就是把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天出货

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top