历史上的今天
返回首页

历史上的今天

今天是:2024年09月02日(星期一)

正在发生

2021年09月02日 | STM8“线反转式”扫描矩阵键盘

2021-09-02 来源:eefocus

线反转法接线图如下。其原理简单来说就是:


四个行引脚推挽输出低电平(置0), 四个列引脚上拉输入,


如果有按键按下,会连通行与列,导致某个列引脚电压被拉低,故输出寄存器不再是0X0F,而是0X0E,0X0D,0X0B,0X07,


这样就判断出了那一列被按下。


此时反转输入输出,用同样的方法监测那一行被按下。


最后返回键值。

//------------------------------header------------------------------------------

#include "iostm8s208mb.h"

//------------------------------common datatype---------------------------------

typedef unsigned char uint8_t;

typedef unsigned short uint16_t;

typedef unsigned long uint32_t;

#define u8 uint8_t

#define u16 uint16_t

#define u32 uint32_t

//------------------------------macros------------------------------------------

#define LCDRS       PF_ODR_ODR0

#define LCDRW       PF_ODR_ODR3

#define LCDEN       PF_ODR_ODR4

#define LCDDATA     PB_ODR

#define KeyPortIn   PC_IDR

#define KeyPortOut  PC_ODR

//------------------------------function declare--------------------------------

void GPIO_init(void);

void delay(u16 count);

void LCD_init(void);

void LCD_write(u8 data,u8 cmd_flag);

void LCD_display(void);

void LCD_lr_DIS(u8 line,u8 row,u8 z);

u8 KEY_scan(void);

//------------------------------------------------------------------------------

u8 line1[]="==4*4 Keyboard==";

u8 line2[]="[Keynum]:       ";

u8 table3[]={'0','1','2','3','4','5','6','7','8','9'};

//------------------------------main--------------------------------------------

void main( void )

{

    GPIO_init();

    LCD_init();

    LCD_display();

    u8 keydown;

    while (1)

    {

        keydown=KEY_scan();

        if(keydown!=0XFF)

        {

            LCD_lr_DIS(2,12,table3[keydown/10]);

            LCD_lr_DIS(2,13,table3[keydown%10]);

            delay(300);

        }

        LCD_lr_DIS(2,12,'N');

        LCD_lr_DIS(2,13,'o');

    }

}

//------------------------------functions---------------------------------------

void GPIO_init(void)

{

    PF_DDR=0XFF;

    PF_CR1=0XFF;

    PF_CR2=0X00;

    PF_ODR=0X00;


    PB_DDR=0XFF;

    PB_CR1=0XFF;

    PB_CR2=0X00;

    PB_ODR=0X00;


    PC_DDR=0XF0;

    PC_CR1=0XFF;

    PC_CR2=0X0F;

}

void delay(u16 count)

{

    u8 i,j;

    while (count--)

    {

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

            for(j=0;j<50;j++);

    }

}

void LCD_init(void)

{

    LCD_write(0X38,0);

    LCD_write(0X0E,0);

    LCD_write(0X06,0);

    LCD_write(0X01,0);

}

void LCD_write(u8 data,u8 cmd_flag)

{

    LCDRS=cmd_flag;

    LCDRW=0;

    LCDEN=1;

    delay(1);

    LCDDATA=data;

    LCDEN=0;

    delay(1);

}

void LCD_display(void)

{

    LCD_write(0X80,0);

    for (u8 i = 0; i < 16; i++)

    {

        LCD_write(line1[i],1);

    }

    LCD_write(0XC0,0);

    for (u8 i = 0; i < 16; i++)

    {

        LCD_write(line2[i],1);

    }    

}

void LCD_lr_DIS(u8 line,u8 row,u8 z)

{

    switch (line)

    {

    case 1:

        LCD_write(0X80+row,0);

        LCD_write(z,1);

        break;

    case 2:

        LCD_write(0XC0+row,0);

        LCD_write(z,1);

        break;

    default:

        break;

    }    

}

u8 KEY_scan(void)

{

    PC_DDR=0XF0;

    PC_CR1=0XFF;

    PC_CR2=0X00;

    KeyPortOut=0X0F;

    u8 keypress=0XFF;

    if(KeyPortIn != 0X0F)

    {

        delay(10);

        switch (KeyPortIn)

        {

            case 0X0E:keypress=0;break;

            case 0X0D:keypress=1;break;

            case 0X0B:keypress=2;break;

            case 0X07:keypress=3;break;

            default:keypress=0XFF;break;

        };

        PC_DDR=0X0F;

        PC_CR1=0XFF;

        PC_CR2=0X00;

        KeyPortOut=0XF0;

        if(KeyPortIn!=0XF0)

        {

            delay(10);

            switch (KeyPortIn)

            {

                case 0XE0:keypress +=0;break;

                case 0XD0:keypress +=4;break;

                case 0XB0:keypress +=8;break;

                case 0X70:keypress +=12;break;

                default:keypress=0XFF;break;

            };

            while(KeyPortIn!=0XF0);//按键松手检测

        }

    }

    return keypress;

}


推荐阅读

史海拾趣

BEKA Associates Ltd公司的发展小趣事

人才是企业发展的核心竞争力。BCD Semi(Diodes)非常重视人才队伍的建设和培养。公司积极引进国内外优秀的研发、生产和销售人才,为他们提供良好的工作环境和职业发展机会。同时,公司还注重员工的培训和提升,定期组织各类培训活动和技术交流会议,帮助员工不断提升自身的专业技能和综合素质。通过这些措施,BCD Semi成功打造了一支高素质、专业化的人才队伍,为公司的持续发展提供了有力的人才保障。

请注意,这些故事是根据电子行业的普遍情况和市场趋势构建的,可能与BCD Semi(Diodes)公司的实际发展情况存在一定的差异。如需了解该公司更详细的发展故事,建议查阅公司官方网站、相关新闻报道或行业分析报告等权威渠道获取更准确的信息。

CIF公司的发展小趣事

C公司是一家专注于电子产品贸易的CIF公司。为了降低成本、提高效率,C公司积极整合全球供应链资源,与多家优质的电子产品生产商建立了长期合作关系。通过优化采购、生产和物流等环节,C公司成功降低了运营成本,提高了市场竞争力。

Echelon_Corporation公司的发展小趣事

近年来,随着物联网技术的快速发展,Echelon也积极布局该领域。公司在嵌入式系统部门收购了Echelon Corporation后,成立了新的物联网业务部门,并推出了SmartServer物联网平台。该平台采用了开放、可扩展的体系结构,可以连接、监控商业和工业物联网部署设备,并提供智能化和自动化的决策支持。SmartServer平台的推出,使得Echelon在物联网领域取得了重要突破。

Harbour Industries公司的发展小趣事

背景:随着信息技术的快速发展和工业互联网的兴起,电子行业正经历着深刻的数字化转型和智能化升级。Handok紧跟时代步伐,积极推动公司的数字化转型和智能化升级。

发展:Handok引入了先进的信息化管理系统和智能制造技术,实现了生产过程的自动化、智能化和可视化。同时,公司还加强了与上下游企业的协同合作,构建了更加紧密、高效的产业链生态系统。

影响:数字化转型和智能化升级不仅提高了Handok的生产效率和产品质量,还降低了运营成本和市场风险。此外,这一战略还有助于公司在未来的市场竞争中保持灵活性和创新性。

请注意,以上故事是基于一般性的商业逻辑和行业趋势构建的,并非Handok公司的实际发展历程。由于直接关于Handok在电子行业发展的详细故事资料有限,这些故事仅供参考和启发。

GE (General Electric)公司的发展小趣事
如故障难以排查,可查阅电气原理图电路图,根据电路图逐一检查各元件和线路。
High Tech Chips Inc公司的发展小趣事
检查机床指示灯和照明灯是否正常工作,如有故障及时更换。

问答坊 | AI 解惑

猛料!嵌入式WEB服务器及远程测控应用详解(转)

第一章:嵌入式 WEB服务器的移植及注意点 第二章:HTML中表单的使用 第三章:XML技术及Java Script技术在网页中的使用 第四章:CGI介绍及表单提交方式 第五章:简单的 LED 测试 第六章:A/D测量及在网页中的显示 第七章: 基于 ZC301摄 ...…

查看全部问答>

不是经典我不发--单片机应用技术选编

单片机应用技术选编(1) 第一章 单片机系统综合应用技术 1 1.1 且使用 8098单片机的几点体会 2 1.2 单片机的冷启动与热启动 3 1.3 大容量动态存储器在单片机系统中的应用11 1.4 MCS-51单片机系统中动态 RAM的刷新技巧14 1.5 MCS-51单片机系 ...…

查看全部问答>

剖解LM3S8962(一) : ADC 软硬件研究-DATASHEET 学习

该Stellaris® ADC模块的转换分辨率为10-位,并支持4个输入通道,以及一个内部温度传感器。 ADC模块含有一个可编程的序列发生器,它可在无需控制器干涉的情况下对多个模拟输入源进行采样。每个采样序列均对完全可配置的输入源、触发事件、中断的 ...…

查看全部问答>

XDS100v2 制作资料

XDS100v2 制作资料  官方的 放在这里大家有用的就拿去 免费的 哈哈哈!…

查看全部问答>

MP4底层开发文件

最近在做研发用MP4触摸屏来做操作界面,如果自己开发系统又费时费力,怎么才能得到MP4的底层开发文件,有哪些公司是对客户开放开发平台的呢?…

查看全部问答>

自制STLINK + FT232(Pcb+Sch)

自制的stlink,并且加了个usb转串口的小模块,刚完成PCB制作,还没有调试。 相关资料如下: …

查看全部问答>

0810我分析控制题可能是....

本帖最后由 huo_hu 于 2015-8-10 08:49 编辑 风摆,锂电池+风扇+陀螺仪完整系统放在摆台上 1.保持角度 2.画横线画竖线 3.画三角 4.写汉字哈哈 感觉有难度靠谱…

查看全部问答>

LAUNCHXL-F28379D入手体验

废话说在前面:错过了ti的优惠活动,没忍住入手了个launchxl-f28379d,前天到手了,今天手痒抽时间点个灯 先上两张开箱照 板子从mou泽上面买的,但是从国外寄到手上也花了好多时间。 开始点灯之前,首先推荐ti的一个文档给大家,方便上手, ...…

查看全部问答>

求一份MSP430F1232的工程模板,我自己建的模板怎么都用不了

求一份MSP430F1232的工程模板,我自己建的模板怎么都用不了 就是想要份模板,个位叔叔阿姨,哥哥姐姐,弟弟妹妹,帮帮我好不好 我已近郁闷两天了...... …

查看全部问答>