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

发布者:纯真年代最新更新时间:2020-02-20 来源: 51hei关键字:单片机驱动  LED数码管  TM1638芯片 手机看文章 扫描二维码
随时随地手机看文章

TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、空调 、家庭影院等产品的高段位显示屏驱动。
因为步进电机实验需要用到按键,但家有婴儿,没用松香铬铁之类的(技术早就还给老师了,也没有条件),只好在网上找,找到一个由TM1638做成的成品,感觉做工还不错,就买了一个,但其带的程序一时没看懂,花了些时间进行学习,觉得好精妙,就想分享一下。
绝不是给别人打广告,这程序确实我理解了很久。
附件是它完整的程序。
 
调用实现程序主要是显示与按键值获取。
1.显示:
为什么是0xc0|add呢?
因为芯片说明有:高位都是11, 就是C了。
 
void Write_DATA(unsigned char add,unsigned char DATA)                //指定地址写入数据
{
        Write_COM(0x44);
        STB=0;
        TM1638_Write(0xc0|add);
        TM1638_Write(DATA);
        STB=1;
}
2.按键获取:
注意这儿是从低位开始读的, 理解 的时候把B0~B7反过来理解就更好理解下面这个按键程序。在这儿花了很多时间来想这个。得到的 i 值就是按的第几个键。这儿真的这个程序写得太妙了,这个大神绝对的高手。

单片机程序

unsigned char Read_key(void)

{

        unsigned char c[4],i,key_value=0;

        STB=0;

        TM1638_Write(0x42);                           //读键扫数据 命令

        for(i=0;i<4;i++)                

                c[i][i]=TM1638_Read();

        STB=1;                                                   //4个字节数据合成一个字节

        for(i=0;i<4;i++)

                key_value|=c[i][i]<        for(i=0;i<8;i++)

                if((0x01<                        break;

        return i;

}


关键字:单片机驱动  LED数码管  TM1638芯片 引用地址:单片机驱动LED数码管,按键TM1638芯片学习心得

上一篇:42步进电机控制单片机程序
下一篇:基于51单片机的排队叫号系统仿真与程序源码设计

推荐阅读最新更新时间:2024-11-11 13:40

STM32单片机的PSAM卡驱动模块设计
引言 刷卡消费随着人们生活水平的提高已经成为常用的支付方式之一。为了保证刷卡消费的安全性,将PSAM卡内嵌于各种终端刷卡设备中。PSAM(Purchase SecureAccess Module,销售点终端安全存取模块),由IC卡发行主管部门或者应用主管机构发行,是可以用于对IC卡进行脱机消费交易认证的安全认证卡,主要应用于商用POS、网点终端、直连终端等设备上,支持多级发卡机制,适用于多应用的环境,符合识别卡、带触点的集成电路卡标准、ISO/IEC 7816—1/2/3/4以及《中国人民银行PSAM卡规范》。 1 PSAM卡简介 PSAM卡是接触式CPU卡的一种。CPU卡也称智能卡,卡内集成电路带有微处理CPU,存储单元
[单片机]
STM32<font color='red'>单片机</font>的PSAM卡<font color='red'>驱动</font>模块设计
小小的水果竟能驱动AVR单片机
能工作的水果供电的AVR单片机的配置如下: 硬件:Mega88,32KHz外部晶振,2倍负压电路由AVR的PWM驱动,LCD是静态的笔端式LCD,用Mega88的IO口直接驱动,没有分时扫描。 软件:在Timer0中断服务程序中每2秒钟刷新LCD显示,平时AVR工作在空闲模式。Timer1提供PWM波形驱动2倍负压电路。 测量数据: 电路工作时水果电池电压2.5V,整机电流30uA,2倍负电压提供电压大约-3V。 本来觉得水果电池驱动LCD只是展示会上的噱头,三片柠檬的电力,应该足够带动LCD的。不过最初当我用Mega8L做了一个电路却不能用水果电池驱动时,我下决心亲自实践一番,看看水果供电的AVR单片机能否成功。这样
[单片机]
小小的水果竟能<font color='red'>驱动</font>AVR<font color='red'>单片机</font>?
基于AVR单片机的12864液晶(ks0108)驱动程序及仿真
#include iom16v.h #include avrdef.h #define EN 0 #define RS 1 #define CS1 2 #define CS2 3 unsigned char yang ={ 0xEF,0xFB,0xEF,0xFC,0x2F,0xFF,0x00,0x00,0x6F,0xFF,0xEF,0xDC,0xFF,0xEF,0xBD,0x73, 0x1D,0xBC,0xAD,0xDF,0xB5,0xE7,0x39,0xB8,0xBD,0x7F,0xBF,0xBF,0x3F,0xC0,0xFF,0xFF }; unsigned char ying ={ 0
[单片机]
基于AVR<font color='red'>单片机</font>的12864液晶(ks0108)<font color='red'>驱动</font>程序及仿真
51单片机驱动CT1642数码管显示源程序
拆解电视机顶盒找到带CT1642控制的数码管 在网上找到代码修改了一下 没有解决按键检测的问题 可根据自己的需求修改对应引脚 制作出来的实物图如下: 单片机源程序如下: sbit DAT=P2^2; sbit CLK=P2^1; sbit KEY=P2^0; u8 NixieTable ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; u8 NixieTablepos ={0,0x02,0x04,0x08}; void CT1642_Write(u8 Pos, u8 Val) { u8 i,Posn; // 1、移18位:对应C1--C4、6位空、Q2--Q9 P
[单片机]
51<font color='red'>单片机</font><font color='red'>驱动</font>CT1642数码管显示源程序
51单片机驱动数码管(LED)时的注意事项
    单片机输出驱动分为高电平驱动和低电平驱动两种方式。     所谓高电平驱动,就是端口输出高电平时的驱动能力,所谓低电平驱动,就是端口输出低电平时的驱动能力,当单片机输出高电平时,其驱动能力实际上是靠端口的上拉电阻来驱动的,实际测试表明,51单片机的上拉电阻的阻值在 330K左右,也就是说如果靠高电平驱动,本质上就是靠330K的上拉电阻来提供电流的,当然该电流是非常小的,小的甚至连发光二极管也难以点亮,如果要保证LED正常发光,必须要外接一个1K左右的上拉电阻,如果是一个led还好,要是10个、20个led的话,就要接10个、20个1K的上拉电阻,接电阻的本身是可以的,问题是接了上拉电阻以后,每当端口变为低电平0的时候,
[单片机]
单片机驱动三极管
Q1一直是截止的,所以Q2导通时,基极电流会从Vcc到R1到GND,Ice的电流是Ib的β倍,R1的阻值根据负载的需要来调整 因为R1的阻值可以取得很大,因为当输出1时,Q2截止。负载的电流根据R2的阻值来确定
[单片机]
<font color='red'>单片机</font><font color='red'>驱动</font>三极管
PIC单片机实例七:SED1565型液晶串行驱动
本来我一直以为只要学会了一种液晶控制器,就够了,所以我一直使用的是KS0108,但最近有网友让我写一个液晶串行驱动.我想了一下,的确有必要,因为他的最大优点在于他省了很多端口.所以,我找到SED1565系列(和ST7565差不多)尝试写了个驱动,以回馈网友,并用PROTEUS软件仿真通过,我想实际也基本可以用的. 一,原理图 芯片的接线很少,只使用了四个口,实际的液晶端口很多,但串行只用这四个就够了. 如液晶资料上说的,当P/S端接低电平时为串口模式. 串行传输时的时序如下所示: 所以CS2端口可以不用,一直接高电平.A0是指示输入的是数据或是命令,高电平为数据,低电平为命令. 在时钟上升沿时,数据输入. 二
[单片机]
PIC<font color='red'>单片机</font>实例七:SED1565型液晶串行<font color='red'>驱动</font>
ATMEGA8单片机对步进电机的驱动
#include #include #defineucharunsignedchar #defineuintunsignedint ucharnp; //步进电机运行数据表 constucharmotortb[]={0x11,0x99,0x88,0xCC,0x44,0x66,0x22,0x33}; voiddelay_nms(uintms)//每步延时de子程序 { uinti; for(i=0;i_delay_loop_2(8*250); } voida_step(uchard,uchart)//步进电机走一步d=0正转d=1反转t越大走得越慢 { if(d&0x01) { if(np==0) np=7; else np
[单片机]
ATMEGA8<font color='red'>单片机</font>对步进电机的<font color='red'>驱动</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved