历史上的今天
返回首页

历史上的今天

今天是:2025年03月25日(星期二)

正在发生

2020年03月25日 | 基于51单片机个8位数码管的简单拨号键盘

2020-03-25 来源:eefocus

我们知道,在拨号是,每拨一位数字,前边拨的数字就要向左挪一位,我们可以用一个一位数组,通过移动数组中数字的移动和8位数码管的动态扫描来实现位置的移动。


代码如下:


#include "reg52.h"           //此文件中定义了单片机的一些特殊功能寄存器


typedef unsigned int u16;     //对数据类型进行声明定义

typedef unsigned char u8;


#define GPIO_DIG P0

#define GPIO_KEY P1


sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;


u8 KeyValue;    //用来存放读取到的键值

u8 keyflag;     //用来回复是否有按键按下


u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值


u16 wei[8]={0}; //用来存放每一位数码管数字的数组


/*******************************************************************************

* 函 数 名         : delay

* 函数功能         : 延时函数,i=1时,大约延时10us

*******************************************************************************/

void delay(u16 i)

{

    while(i--); 

}


/*******************************************************************************

* 函 数 名         : KeyDown

* 函数功能         : 检测有按键按下并读取键值

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void KeyDown(void)

{

    char a=0;

    GPIO_KEY=0x0f;

    if(GPIO_KEY!=0x0f)//读取按键是否按下

    {

        keyflag=1;   //有按键按下,数值为1;

        delay(1000);//延时10ms进行消抖

        if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

        {   

            //测试列

            GPIO_KEY=0X0F;

            switch(GPIO_KEY)

            {

                case(0X07): KeyValue=0;break;

                case(0X0b): KeyValue=1;break;

                case(0X0d): KeyValue=2;break;

                case(0X0e): KeyValue=3;break;

            }

            //测试行

            GPIO_KEY=0XF0;

            switch(GPIO_KEY)

            {

                case(0X70): KeyValue=KeyValue;break;

                case(0Xb0): KeyValue=KeyValue+4;break;

                case(0Xd0): KeyValue=KeyValue+8;break;

                case(0Xe0): KeyValue=KeyValue+12;break;

            }

            while((a<50)&&(GPIO_KEY!=0xf0))  //检测按键松手检测

            {

                delay(1000);

                a++;

            }

        }

    }

}


/*******************************************************************************

* 函 数 名       : display

* 函数功能       : 扫描显示数码管

* 输    入       : 无

* 输    出         : 无

*******************************************************************************/

void display()    

{    


     LSA=0; LSB=0; LSC=0; P0=smgduan[wei[0]];delay(50); P0=0x00; 

     LSA=1; LSB=0; LSC=0; P0=smgduan[wei[1]];delay(50); P0=0x00;

     LSA=0; LSB=1; LSC=0; P0=smgduan[wei[2]];delay(50); P0=0x00; 

     LSA=1; LSB=1; LSC=0; P0=smgduan[wei[3]];delay(50); P0=0x00; 

     LSA=0; LSB=0; LSC=1; P0=smgduan[wei[4]];delay(50); P0=0x00; 

     LSA=1; LSB=0; LSC=1; P0=smgduan[wei[5]];delay(50); P0=0x00; 

     LSA=0; LSB=1; LSC=1; P0=smgduan[wei[6]];delay(50); P0=0x00; 

     LSA=1; LSB=1; LSC=1; P0=smgduan[wei[7]];delay(50); P0=0x00; 


}


/*******************************************************************************

* 函 数 名       : main

* 函数功能       : 主函数

* 输    入       : 无

* 输    出         : 无

*******************************************************************************/

void main()

{   

    u8 i;

    while(1)

    {   

         display(); //数码管显示

         KeyDown(); //判断按键是否按下

         if(keyflag==1)  //若按键按下,数组中每一位数字向前移动一位

         {  


            for(i=7;i>0;i--)

            {wei[i]=wei[i-1];}

            wei[0]=KeyValue;

            keyflag=0;

         }

    }       

}

推荐阅读

史海拾趣

Hitano Enterprise Corp公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐不可或缺的重要设备之一。它作为连接电视与外部信号源的桥梁,不仅实现了传统模拟电视向数字电视的跨越,还极大地丰富了电视节目的选择和观看体验。

从专业角度来看,机顶盒的主要功能是接收数字电视信号,并将其转换成适合在电视机上播放的格式。无论是来自有线电缆、卫星天线、宽带网络还是地面广播的信号,机顶盒都能有效接收并解码,从而呈现出高清甚至超高清的画质和震撼的音效。此外,机顶盒还具备网络交互功能,用户可以通过它连接到互联网,享受在线购物、观看网络视频、玩游戏等多元化服务。

从科普层面讲,机顶盒的出现极大地改变了人们的电视观看方式。它不再局限于单向接收信息,而是成为了一个能够与用户进行互动的智能终端。通过机顶盒,观众可以自由选择观看的节目,甚至参与到节目的互动中,极大地提升了观看的参与感和乐趣。同时,机顶盒还提供了丰富的增值服务,如电子节目指南、因特网网页浏览等,进一步满足了用户的多样化需求。

综上所述,机顶盒以其强大的功能和广泛的应用场景,成为了现代家庭娱乐的重要组成部分。随着技术的不断进步和消费者需求的日益多样化,机顶盒的功能和应用场景也将不断扩展和丰富。

Aeroflex公司的发展小趣事

Aeroflex是一家提供高性能测试和测量解决方案的公司,在航空航天、国防、通信和工业等领域拥有广泛的应用。以下是Aeroflex公司发展的五个相关故事:

  1. 公司成立和早期发展: Aeroflex公司成立于1973年,最初是一家由David King在新泽西州创建的小型创业公司,专注于为航空航天和国防行业提供测试和测量设备。随着公司在测试领域的技术积累和市场认可,其业务逐渐扩大,开始在全球范围内提供解决方案。

  2. 技术创新和产品发展: Aeroflex致力于技术创新,不断推出符合行业标准和客户需求的新产品。公司在射频和微波测试领域取得了突破,推出了一系列高性能测试仪器和系统,包括信号发生器、频谱分析仪和网络分析仪等,为客户提供全面的测试解决方案。

  3. 全球扩张和市场拓展: 随着市场需求的增长和业务规模的扩大,Aeroflex逐步在全球范围内建立了广泛的销售和服务网络。公司在美国、欧洲、亚洲和其他地区设立了多个分支机构和办事处,以加强对客户的支持和服务,并拓展新的市场领域。

  4. 公司并购和战略合作: 为加速业务增长和拓展技术能力,Aeroflex通过并购和战略合作不断扩大业务范围。公司先后收购了多家具有先进技术和市场地位的企业,加强了在航空航天、国防和通信等领域的竞争实力。

  5. 成为关键行业供应商: 长期以来,Aeroflex凭借卓越的技术和服务,成为航空航天、国防、通信和工业等关键行业的重要供应商之一。公司在测试和测量领域的领先地位得到了进一步巩固,为客户提供了高品质、可靠的产品和解决方案,赢得了良好的声誉和市场口碑。

迪一电子公司的发展小趣事

随着市场的不断变化和技术的快速发展,迪一电子公司意识到必须不断创新才能保持竞争力。于是,公司加大研发投入,引进高端技术人才,与国内外知名科研机构合作,成功研发出一系列具有竞争力的新产品。这些新产品不仅提高了公司的市场占有率,还为公司赢得了良好的口碑。

B&F;公司的发展小趣事

在航空领域,产品质量直接关系到乘客的生命安全。因此,B&F公司一直将质量控制放在首要位置。公司采用严格的生产流程和质检标准,确保每一架FK系列飞机都符合最高标准。此外,公司还注重电子系统的可靠性和稳定性测试,确保飞机在各种恶劣环境下都能正常运行。这种对质量的严格把控,为B&F公司赢得了客户的信任和市场的认可。

Hitachi (Renesas )公司的发展小趣事

面对日益严峻的环境问题,B&F公司意识到可持续发展是未来发展的重要方向。因此,公司开始实施一系列可持续发展战略,包括采用环保材料、优化生产流程、推广节能减排技术等。在电子系统方面,公司致力于研发更加节能高效的航空电子设备,以减少飞行对环境的影响。这些举措不仅有助于提升公司的社会形象,也为公司的长期发展奠定了坚实的基础。

请注意,这些故事是基于B&F公司在航空领域的发展情况和可能的电子技术应用构建的,并非真实发生的故事。如果需要更多关于B&F公司在电子行业发展的具体信息,建议查阅公司官方网站或相关新闻报道。

启英泰伦(Chiplntelli)公司的发展小趣事

随着技术的不断进步和市场需求的日益增长,启英泰伦的芯片产品历经了多次迭代。从最初的AI语音芯片,到后来的AI语音Wi-Fi芯片、AI语音BLE芯片,公司形成了系列化的芯片产品布局。这些芯片广泛应用于智能家居、智能家电、智慧照明等领域,为客户提供了更自然、更简单、更智能的人机交互体验。启英泰伦的芯片产品在市场上获得了广泛的认可,服务客户超过5000家,累计装机量突破2000万台。

问答坊 | AI 解惑

哥们今天刚画的16口以太网交换机的原理图(改进过)

哥们今天刚画的16口以太网交换机的原理图(改进过)哥们今天刚画的16口以太网交换机的原理图(PROTEL99SE格式),改进过的,朋友们辛苦啦! [ 本帖最后由 西门 于 2009-5-12 18:50 编辑 ]…

查看全部问答>

华为PCB规范

希望对你有用…

查看全部问答>

只要懂C语言就能轻松玩转Luminary ARM ?

LM3S系列单片机采用的是结构简单、性能出众的ARM Cortex-M3处理器内核。Luminary官方(已被TI收购)免费公开地提供了基于C语言(符合ANSI C标准)的驱动库软件包,并且源代码是公开的。因此用户完全可以摒弃晦涩难懂的汇编语言,也不需要掌握底层寄 ...…

查看全部问答>

【藏书阁】C51 用户手册

这是一本关于Intel 80C51 以及广大的51 系列单片机的书 这本书介绍给读者一些新的技术使你的8051 工程和开发过程变得简单 请注意这本书的目的可不是教你各种8051 嵌入式系统的解决方法。 周立功…

查看全部问答>

想用2262,2272做遥控小车,怎样才能使小车前进的同时转弯?

想用2262,2272做个遥控小车,可这个芯片在同一时段只能有一个端口输出,前进时就不能转弯了,不知道该怎样解决,请大家想想,给点思路,用单片机控制也行。…

查看全部问答>

请教如何在Win CE 下开发Driver【或寻北京兼职人员】

想请教一下如何开发Win CE 下的Dirver。 开发流程,用到的技术,是怎么样子的。 希望能帮忙找点例子和相关的文档。 我这边有个嵌入式的项目,目前准备自学后再做。 也希望能得到嵌入式工程师的帮助,大家一起接下这个单子。 如果有兴趣的可以 ...…

查看全部问答>

GPRS开发扫盲

目前手里有个项目要用到GPRS进行大数据量的传输。因为对这个没什么概念,想请各位扫一下盲。 1. DTU和开发板有什么区别? 2. 我要着手进行开发的话,是买市面上现成的DTU还是开发板进行开发呢?如果是在开发板开发好了以后,市面上的成品能用么? ...…

查看全部问答>

小女子罗玉凤求助-_-!

我把nboot烧写到FLASH的BL0块中,然后把EBOOT烧写到BL2块中,然后通过EBOOT把NK.BIN再下载到FLASH中, 问题一: 那么这个NK.BIN是被EBOOT下载到FLASH哪个地方的呢?是不是代码在EBOOT哪个地方?还是在别的地方?能否告诉下小弟! 问题二: 为什么EBOOT非 ...…

查看全部问答>

捕捉的脉冲可以大于65535么?

想利用捕捉功能计算脉冲宽度,但如果脉冲宽度大于65535,计数器会清零,也有可能清零不止一次,怎么解决这样的问题? 谢谢…

查看全部问答>

LM3S9B92板子少了个作键盘的程序和PC连接

连接之后PC机没有反映,驱动怎么装? 各位赐教!谢谢!…

查看全部问答>