历史上的今天
返回首页

历史上的今天

今天是:2025年08月16日(星期六)

正在发生

2019年08月16日 | ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示

2019-08-16 来源:eefocus

一 矩阵键盘按键控制TM1629ALED显示原理:


    1.1 本实验实现矩阵键盘按键控制TM1629ALED显示


    1.2 实验思路:共阴极数码管,掌握数码管段选位选原理  熟悉TM1629A芯片手册


    1.3 开发环境 : MDK5 库函数版本开发 JLINK仿真 


二 实验步骤: 

2.1 keyled.h代码:


    #ifndef __KEYLED_H

    #define __KEYLED_H

    #include "sys.h"     

    #define SEG_NUM 16 //段选,2个8段

    #define GRID_NUM 8 //位选

    #define     WRITE_DATA_MODE_AUTO        0x40 // 地址自动加1方式写led显存

    #define     SET_START_ADDRESS       0xc0 // 设置起始地址

    #define     SET_DISP_OFF_COMMAND        0x87 // 关闭显示命令

    #define     DATA_COUNT          2*GRID_NUM  //数据传输个数

    extern  void    Initial_LED(void);  // 初始化

    extern void   DisplayOn(u8  bOn);   //led显示是否打开

    extern void  Display(u8  DspData[]); // led显示数字

    #endif


2.2 keyled.c代码(IO配置):


   #include "stm32f10x.h"

   #include "keyled.h"

   #include "key.h"

   #include "sys.h" 

   #include "delay.h" 

 //配置时钟和IO口

   #define SetClk    GPIO_SetBits(GPIOD,GPIO_Pin_3) //PD3

   #define ClrClk    GPIO_ResetBits(GPIOD,GPIO_Pin_3) //PD3 

   #define SetDIO  GPIO_SetBits(GPIOD,GPIO_Pin_2) //PD2

   #define ClrDIO  GPIO_ResetBits(GPIOD,GPIO_Pin_2) //PD2

   #define TM1638_PINS  0x001f  

 //片选第一二排数码管

   #define ResA    GPIO_ResetBits(GPIOD, GPIO_Pin_1);//PD1

   #define SetA    GPIO_SetBits(GPIOD, GPIO_Pin_1);//PD1  

 /*将一字节数据写到TM1629A中*/

   void WriteData(u8 data )

    {  

        u8 i;

        ResA ;

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

      {

        delay_ms(20);

        ClrClk;拉低时钟

        delay_ms(20);

       if(data & 0x01)

        SetDIO;    //打开数据线

       else

        ClrDIO;   //关闭数据线

       delay_ms(20);

        SetClk;  //拉高时钟

       data>>=1;  //数据右移一位

      } 

        delay_ms(20);

    }  

/*将所要传输的数据显示在led上*/

 void  Display(u8  DspData[])

    {

        u8    i;

         ResA  ;

        SetDIO; //打开数据线

        ClrClk; //拉低时钟

        WriteData(WRITE_DATA_MODE_AUTO); // 采用地址自动加1方式传输数据   

         SetA ;   

         delay_ms(20);

         ResA  ;   

        WriteData(SET_START_ADDRESS);   //  传输起始地址

            /* 传输数据*/

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

        {


         WriteData(DspData[i]);

        }


         SetA ;   

         delay_ms(20);

    }

       /*显示器辉度和开关设置*/

        void    DisplayOn(u8  bOn)

        {

            if(bOn)

                WriteData(0x88+6);

            else

                WriteData(SET_DISP_OFF_COMMAND);

             SetA ; 

        }   


      /*IO口配置*/

    void    Initial_LED(void)

        {       

            GPIO_InitTypeDef GPIO_InitStructure; 

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;


            GPIO_InitStructure.GPIO_Pin =  TM1638_PINS; 

            GPIO_Init(GPIOD , &GPIO_InitStructure);


            GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

            GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

            GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; 

            GPIO_Init(GPIOD, &GPIO_InitStructure);

            GPIO_SetBits(GPIOD, TM1638_PINS);

             SetA ; 

            DisplayOn(0);

        }


2.2 main.c代码(实现按键值LED显示效果):


        #include "delay.h"

        #include "key.h"

        #include "sys.h"

        #include "beep.h"

        #include "keyled.h" 

         int main(void)

         {    

         u8 i,flag;


              u8 key=0;

u8   seg88Code[16]={0x3f, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0X7C, 0x39, 0x5E, 0x79, 0x71};


            delay_init(); //  延时               

            KEY_Init();   // 按键初始化     

            BEEP_Init();  //  蜂鸣器初始化      

           Initial_LED(); //  数码管初始化

     /*实现按键值在1到15范围内led显示0到15,具体显示功能可以改,基本思路就是这样*/

            while(1)

            {

                flag=0;

            key=KEY_Scan();

        for(i=1;i<16;i++)

                {


            if(key==i)

            {


                if(key==i)

                {flag =1;

                 break;

                }   

            } 

              }                     

        if(flag==1)

            {   

                DisplayOn(1);

                Display(seg88Code);

                 delay_ms(2); 

            }

        else{

                  DisplayOn(0); 

            } 

             delay_ms(2); 

        }

    }


三 接线测试:


 3.1 与板子接线测试效果良好,按键值在1到16范围内,LED 0到15按顺序显示。

推荐阅读

史海拾趣

DEMMELPRODUCTS公司的发展小趣事

DEMMELPRODUCTS公司深知人才是企业发展的根本。因此,公司始终注重人才培养和团队建设。通过制定科学的培训计划和激励机制,公司吸引了一批优秀的研发、生产和销售人才。同时,公司还鼓励员工之间进行知识和经验的分享与交流,形成了积极向上的团队氛围。这些优秀的人才和团队为公司的发展提供了有力的支持。

Clulite公司的发展小趣事
  1. 创业初期
    • 描述Clulite公司的创始人或核心团队如何识别电子行业中的某个市场机遇。
    • 讲述他们是如何筹集初始资金,设立公司,并开发出第一款产品或解决方案的。
    • 可以提及公司在初创阶段面临的挑战,如技术难题、市场竞争等。
  2. 技术创新
    • 讲述Clulite如何通过研发创新,推出了一款颠覆性的产品或技术,从而获得了市场认可。
    • 详细描述这一创新过程,包括研发团队的努力、关键技术的突破等。
    • 提及这一创新如何帮助公司在市场上取得了竞争优势。
  3. 市场拓展
    • 描述Clulite如何逐步扩大市场份额,从地区市场走向全国乃至国际市场。
    • 可以讲述公司如何建立销售网络、与合作伙伴建立合作关系,以及参与行业展会等活动来推广品牌和产品。
    • 提及公司在市场拓展过程中遇到的挑战和应对策略。
  4. 品质管理
    • 讲述Clulite如何注重产品质量和客户体验,通过严格的质量控制流程来提升产品可靠性。
    • 描述公司如何建立完善的售后服务体系,为客户提供及时、专业的支持。
    • 提及这些举措如何帮助公司赢得了客户的信任和口碑。
  5. 可持续发展
    • 讲述Clulite如何关注环境保护和社会责任,推动公司的可持续发展。
    • 描述公司如何采取环保措施,减少生产过程中的污染排放。
    • 提及公司如何参与社会公益事业,回馈社会。

请注意,这些故事需要根据Clulite公司的实际情况进行调整和补充。如果你需要更具体的内容,建议查阅Clulite公司的官方网站、新闻报道或行业分析报告,以获取更详细的信息和数据。

Gentron Corp公司的发展小趣事
确保电源插头和插座正常工作,电源线未损坏,电源电压符合电路要求。
东通电子公司的发展小趣事

东通电子自成立以来,始终将品质和技术创新作为公司发展的核心。在有机薄膜电容器的生产过程中,公司严格把控原材料质量,采用进口优质材料,确保产品的稳定性和可靠性。同时,公司不断投入研发资金,引进先进技术和设备,提升产品的技术含量和附加值。这些举措使得东通电子的有机薄膜电容器在市场上赢得了良好的口碑。

Barkston Plastics Engineering Ltd.公司的发展小趣事

面对国内市场的饱和,Barkston Plastics Engineering Ltd.开始寻求国际化发展的道路。然而,国际市场环境的复杂性和文化差异给公司带来了诸多挑战。在经历了一系列的市场调研和风险评估后,Barkston成功打入欧洲市场,通过与当地企业的合作,逐步扩大了其国际影响力。这一国际化发展进程不仅为公司带来了更广阔的市场空间,也提升了其在全球电子行业中的地位。

Chicago Miniature公司的发展小趣事

1931年,Chicago Miniature Lamp(CML)在美国创立,初始阶段,公司面临着资金短缺、市场竞争激烈等诸多挑战。然而,创始人凭借对光电技术的深刻理解和对市场的敏锐洞察,坚信微型照明有着巨大的发展潜力。他们不断研发新型微型照明产品,逐渐在市场中站稳脚跟。公司初期虽然规模较小,但产品质量可靠,逐渐获得了客户的认可。

问答坊 | AI 解惑

嵌入式

嵌入式系统的好资料…

查看全部问答>

三角波参数测试仪——09年四川

本帖最后由 paulhyde 于 2014-9-15 04:14 编辑 [local]2[/local]“TI”杯时我们三人的作品。 三角波参数测试仪。  …

查看全部问答>

【藏书阁】电路分析 (面向21世纪课程教材)

目录: 第一章 线性电路的复数解法 1.1 电源与元件的概念 1.2 常参量线性电路的复数解法 1.3 一阶RC滤波器 1.4 二级LC滤波器 思考题 习题 第二章 线性电路的s域解法 2.1 拉普拉斯变换 2.2 线性电路的s域解法 2.3 卷积 附录2 拉氏变换 ...…

查看全部问答>

关于可视对讲,一直疑惑的问题

做了这么多年的门禁和可视对讲,做过了好多的产品,现在市场上的产品真的是五花八门, 国内到底谁家, 才是工程商的不二选择......…

查看全部问答>

cycloneIII_3c25的原装开发板到手了-发资料

整快板子上的外设不是很多,但是存储器资源丰富。并预留了一个HSMC接口,可以用来扩展。有三张光盘,一张是介绍开发板的使用,例程,入门指导,另两张是Quartus2的软件,常用库,NIOS2开发资料。先简单介绍到这里,把开发板的资料传上来共享(全部 ...…

查看全部问答>

DSP2407在转速测定中的应用

DSP2407在转速测定中的应用…

查看全部问答>

通过MR16谈谈自己对LED行业的想法--antsin

本人一直在一家电源IC原厂华东区做FAE,07年公司从linear挖了一个团队进入LED驱动行业,我随之也开始进入这个行业。在勤勤勉勉的耕耘3年中,我从学习到与客户分享我的学习经验,很多客户都会跟我讲,王工,从你身上我学到了很多。但这时我告诫自己 ...…

查看全部问答>

如何设置vxworks(主机)的IP地址,和网关?如果设置成功,我能否在windows下 用ping 命令对运行中的vxworks进行网络连接??能ping通吗

如何设置vxworks(主机)的IP地址,和网关????????? 如果设置成功,我能否在windows下 用ping 命令对运行中的vxworks进行网络连接??能ping通吗?? …

查看全部问答>

【MSP430共享】MSP430 电容单触式传感器设计指南

MSP430 电容单触式传感器设计指南,这是官网应用手册,很权威的。 [ 本帖最后由 鑫海宝贝 于 2011-10-12 09:35 编辑 ]…

查看全部问答>

LCD液晶显示

LCD1604驱动模块 /*备注一:LCD1604只含有ASCII码表内字符的字库,无汉字字库,不能自行打点,不便画曲线*/ /*本模板功能一:在任意位置显示阿拉伯数字 */ /*本模板功能二:在任意位置显示字符及字符串 */ #include #include \"lcd1604.h\" /* ...…

查看全部问答>