ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示

发布者:楼高峰最新更新时间:2019-08-16 来源: eefocus关键字:ARM  STM32  矩阵键盘  按键控制  LED显示 手机看文章 扫描二维码
随时随地手机看文章

一 矩阵键盘按键控制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按顺序显示。

关键字:ARM  STM32  矩阵键盘  按键控制  LED显示 引用地址:ARM开发(4)基于STM32的矩阵键盘按键控制TM1629A LED显示

上一篇:关于STM32F103型号的矩阵按键的程序书写
下一篇:STM32F103——4*4矩阵扫描(极简事件扫描,非主延时)

推荐阅读最新更新时间:2024-11-11 14:16

STM32端口模式配置
1、上拉输入:上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!强弱只是上拉电阻的阻值不同,没有什么严格区分。 2、下拉输入:就是把电压拉低,拉到GND。与上拉原理相似。 3、浮空输入:浮空(floating)就是逻辑器件的输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。 通俗讲就是让管脚什么都不接,浮空着。 4、模拟输入:模拟输入是指传统方式的输入。数字输入是输入PCM数字信号,即0,1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的
[单片机]
<font color='red'>STM32</font>端口模式配置
stm32GPIO学习
void LED_GPIO_Config(void) 24. { 25. /*定义一个GPIO_InitTypeDef 类型的结构体*/ 26. GPIO_InitTypeDef GPIO_InitStructure; 27. 28. /*开启GPIOC 的外设时钟*/ 29. RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE); 30. 31. /*选择要控制的GPIOC 引脚 */ 32. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 ; 33. 34. /*设置引脚模式为通用推挽输
[单片机]
Arm中国区CEO吴雄昂:拟2025年后在香港或上海上市
北京时间2月28日下午消息,据报道,ARM中国合资公司CEO吴雄昂近日表示,计划在2025年之后,让合资公司在香港或上海上市。    吴雄昂在接受媒体采访时称,自2018年成立以来,ARM中国合资公司已经实现了五年目标,2021年营收达到了7亿美元。    对于计划中的ARM IPO(首次公开招股),吴雄昂说:“我们支持ARM IPO,同时也希望ARM支持我们的IPO。”ARM持有中国合资公司47.33%的股权。    2020年,ARM曾宣布,中国合资公司董事会以7比1的投票结果,罢免了吴雄昂的CEO一职,理由是存在“利益冲突”。但吴雄昂认为,投票结果是无效的,拒绝离职,并一直掌控公司。    此外,吴雄昂还向媒体透露,他与AR
[半导体设计/制造]
再造STM32---第十七部分:USART—串口通讯
本章参考资料:《STM32F4xx 中文参考手册》 USART 章节。 学习本章时,配合《STM32F4xx 中文参考手册》 USART 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 特别说明, 本书内容是以 STM32F42xxx 系列控制器资源讲解。 17.1 串口通讯协议简介: 物理层: 规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬 件部分。 协议层: 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。 1-RS232标准: RS232标准串口通讯结构图: 1、 RS232标准串口主要用于工业设备直接通信 2、电平转换芯片一般有M
[单片机]
再造STM32---第十七部分:USART—串口通讯
STM32电机控制同步电角度测试说明
前言 在使用 ST FOC电机库 时,当使用Hall信号作为位置信号时,需要输入同步电角度数据,这个数据根据当前使用电机的特性进行输入,会在每次Hall信号变化时同步电角度,如果角度偏差较大时会影响控制效果,可能带来效率或者电机的震荡,初始测试还是有必要的,本文详细说明测试注意事项以及测试方法。 ST FOC电机库 电角度约定( STM32 PMSM FOC SDK电机控制固件库 ) 默认电机A相的反电动势最高点作为电角度的0度; 电机Hall A的上升沿到电机A相反电动势最高点的延迟角度为同步电角度; 测试准备 如果电机没有虚拟中点接出,需要连接三个相同阻值电阻到电机的三相接线上,电阻另外一端连接到一起作为虚拟中点;
[单片机]
<font color='red'>STM32</font>电机<font color='red'>控制</font>同步电角度测试说明
ARM Mali芯片家族将支持4K视频
    ARM 发表锁定智慧型手机与平板电脑的ARM Mali整合媒体系列产品,内含3款GPU、1款影音处理器,以及一款显示器处理器,其中的Mali-V550影音处理器与Mali-DP550显示器处理器皆可支援4K的影像品质。 ARM表示,高效率的影片编码(High Efficiency Video Coding,HEVC)标准已经成熟,基于该规格的内容也准备好从软体转移至硬体的实现,Mali-V550完整支援HEVC,可在更高的位元率(bit rates)下提供压缩的HD影音,同时保留省电与安全等传输特性,Mali-V550也是全球IP产业首个针对HEVC的单核影音编解码解决方案。 Mali-V550单一核心可在每秒60帧
[手机便携]
STM32的半主机机制介绍
半主机机制的作用 半主机是用于ARM目标的一种机制,可将来自STM32单片机应用程序的输入输出请求传送至运行仿真器的PC主机。使用此机制可以启用C库中的函数,如printf()和scanf(),来使用PC主机的屏幕和键盘。这样就可以看到单片机的输入输出,方便进行调试。注意:种机制的运行需要仿真器,否则无法运行。 简单的来说,半主机模式就是通过仿真器实现开发板在电脑上的输入和输出。 开发时单片机需要独立运行,开发者就应该去掉仿真器,把printf函数通过单片机的外设来实现,例如通过开发板的串口。 非半主机机制下printf函数的实现方法 Use MicroLIB(微库) 因为使用微库的话,不会使用半主机模式。 如下图,在点开MD
[单片机]
<font color='red'>STM32</font>的半主机机制介绍
基于Zynq的图形生成电路设计与实现
1引言 在飞机座舱显示系统中图形显示占据重要地位 .主显示器尺寸不断加大,分辨率不断提高,并日益朝着大屏幕化、综合化、信息化和智能化方向发展 .随着分辨率的提高,要显示的信息量也大幅增加,座舱图形综合显示系统是一个对实时性要求很高的系统 ,军用飞机在做战术动作时,画面变换速度快,要求图形的更新速度也必须很快,至少要比帧或场的刷新速度快,才可以避免画面的断续 .采用DSP+FPGA 的图形硬件加速架构,或者使用专用GPU 图形生成芯片,都可以生成高分辨的机载显示器图形,但随之而来的是产品成本的急剧增加以及功耗的不断上升 .为机载图形显示系统配置更合理的硬件设计和软件架构变得尤为迫切。 Xilinx最新平台Zynq将处理器的软
[单片机]
基于Zynq的图形生成电路设计与实现
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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