找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机驱动LED数码管,按键TM1638芯片学习心得

查看数: 7944 | 评论数: 6 | 收藏 7
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-2-18 17:11

正文摘要:

TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、空调 、家庭影院等产品的高段位显示屏驱动。 因为步进电 ...

回复

ID:292876 发表于 2020-3-19 16:54
这个模块自带程序实际使用不方便,可以按照上面的改,主程序按键如何操作很简单了!判断键值就行
ID:292876 发表于 2020-3-19 16:53

   //------------下面是读按键和键值分离程序------------

unsigned char Read_key(void)
{
        unsigned char c[4],i,key_value=0;
        STB=0;
        TM1638_Write(0x42);
        Delay10us();
        for(i=0;i<4;i++)
                c[i]=TM1638_Read();
        STB=1;                                       

            //K1组合8键
        if(c[0]==0x04) key_value=1;           //KS1K1
        if(c[0]==0x40) key_value=2;           //KS2K1
        if(c[1]==0x04) key_value=3;           //KS3K1
        if(c[1]==0x40) key_value=4;           //KS4K1
        if(c[2]==0x04) key_value=5;           //KS5K1
        if(c[2]==0x40) key_value=6;           //KS6K1
        if(c[3]==0x04) key_value=7;           //KS7K1
        if(c[3]==0x40) key_value=8;           //KS8K1
          //K2组合8键
        if(c[0]==0x02) key_value=9;           //KS1K2
        if(c[0]==0x20) key_value=10;   //KS2K2
        if(c[1]==0x02) key_value=11;   //KS3K2
        if(c[1]==0x20) key_value=12;   //KS4K2
        if(c[2]==0x02) key_value=13;   //KS5K2
        if(c[2]==0x20) key_value=14;   //KS6K2
        if(c[3]==0x02) key_value=15;   //KS7K2
        if(c[3]==0x20) key_value=16;   //KS8K2
          //K3组合8键
        if(c[0]==0x01) key_value=17;   //KS1K3
        if(c[0]==0x10) key_value=18;   //KS2K3
        if(c[1]==0x01) key_value=19;   //KS3K3
        if(c[1]==0x10) key_value=20;   //KS4K3
        if(c[2]==0x01) key_value=21;   //KS5K3
        if(c[2]==0x10) key_value=22;   //KS6K3
        if(c[3]==0x01) key_value=23;   //KS7K3
        if(c[3]==0x10) key_value=24;   //KS8K3

        return key_value;
}


ID:626079 发表于 2020-2-18 22:54
最简单的改动,现在实现了只显示1或0状态。只是这样的话理论上所有的按键都可以控制电机开启了。。。。
                        while(Read_key()==i);                       //等待按键释放
//                        if(num[i]>15)                                           //原程序是按一下键,自动计数加1.可以加到15
                       
                        if(num[i]>1)                                           //改为实现了只显示1与0(加到1,就值改为0),1电机启动,0电机断开
                        num[i]=0;
                        Write_DATA(i*2,tab[num[i]]);
                        Write_allLED(1<<i);
                }
               
               
                if(num[i]==1)
                        {
                          //电机开启程序
                        }
ID:626079 发表于 2020-2-18 21:31
但是这样的显示执行结果不是我想要的。明天再研究改一下程序。我只需要按一个键做开关,显示1或0就可以了,别的键都不需要改变。或者有哪个大神帮我改一下。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表