C51独立键盘按键检测示例

发布者:快乐球球最新更新时间:2023-10-22 来源: eefocus关键字:C51  独立键盘  按键检测 手机看文章 扫描二维码
随时随地手机看文章

独立按键检测很简单.就是检测单片机的i/o口哪个是低电平然后就能判断是哪个键被按下了.当然还要去抖动,也就是要延时.不然会有很多误动作.


效果图:

电路图

说下程序实现的功能:


SW16是数码管+1


SW17是数码管-1


SW18是数码管清零


SW19是数码管自动+1


源代码


#include

#define uchar unsigned char

#define uint unsigned int

sbit key1=P3^2;

sbit key2=P3^3;

sbit key3=P3^4;

sbit key4=P3^5;

sbit P20=P2^0;

sbit P21=P2^1;

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};

void delayms(unit);

uchar numt0,num;


void display(uchar numdis) //数码管扫描

{undefined

    uchar shi,ge;

    shi=numdis/10;

    ge=numdis%10;

   

    P20=0;

    P0=table[ge];

    delayms(5);

    P20=1;


    P21=0;

    P0=table[shi];

    delayms(5);

    P21=1;


}


void delayms(uint xms) //延时

{undefined

    uint i,j;

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

        for (j=110;j>0;j--);


}


void init()   初始化函数

{undefined

    TMOD=0x01;

    TH0=(65536-45872)/256;

    TL0=(65536-45872)%256;

    EA=1;

    ET0=1;

    TR0=0;

}


void keyscan()  //独立按键扫描函数

{undefined

  if (key1==0)

  {undefined

       delayms(10);

    if(key1==0)

    {undefined

        num++;

        if(num==60)

            num=0;

            while(!key1);

           

    }

  }

 

 

  if(key2==0);

  {undefined

    delayms(10);

    if(key2==0)

    {   

         if(num==0)

            num=60;

            num--;

            while(!key2);

    }

  }



  if(key3==0)

  {undefined

        delayms(10);

     if(key3==0)

        {undefined

             num=0;

            while(!key3);   

        }

  }


  if(key4==0)

  {undefined

       delayms(10);

    if(key4==0)

    {undefined

         while(!key4);

        TR0=~TR0;

    }

  }


}


int main(void)  //主函数

{undefined

     init();

    while(1)

    {undefined

         keyscan();

        display(num);


    }


}


void T0_time() interrupt 1  //定时器中断服务

{undefined

     TH0=(65536-45872)/256;

    TL0=(65536-45872)%256;

    numt0++;

    if(numt0==20)

    {undefined

         numt0=0;

        if(num==60)

            num=0;

    }


}

关键字:C51  独立键盘  按键检测 引用地址:C51独立键盘按键检测示例

上一篇:矩阵键盘+数码管动态显示
下一篇:独立按键c语言代码,C51独立按键的识别示例程序

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

C51的中断函数的格式
C51的中断函数的格式为:void FuncIr(void) interrupt x void 函数名(void) interrupt n using m { 函数体语句 } interrupt using 是C51中断服务程序引入关键字只能用于C51中断服务程序逻辑 定义中断函数时,using是一个选项,可以省略不用。如果不用则由编译器选择一个寄存器组作为绝对寄存器组。 n是中断号 0 是外部中断0 1 是定时中断T0 2 是外部中断1 3 是定时中断T1 4 是串行中断 5 是定时器T2
[单片机]
S51的由来及与C51的区别
AT89很多初学51单片机的网友会有这样的问题:AT89S51是什么?书上和网络教程上可都是8051,89C51等!没听说过有89S51,这里,初学者要澄清单片机实际使用方面的一个产品概念,MCS-51单片机是美国INTEL公司于1980年推出的产品,典型产品有 8031(内部没有程序存储器,实际使用方面已经被市场淘汰)、8051(芯片采用HMOS,功耗是630mW,是89C51的5倍,实际使用方面已经被市场淘汰)和8751等通用产品,一直到现在, MCS-51内核系列兼容的单片机仍是应用的主流产品(比如目前流行的89S51、已经停产的89C51等),各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。   有
[单片机]
关于C51中“大小端存储”问题的详解
1. Little-Endian(小端存储),即将低字节的数据存储于低地址中,Big-Endian(大端存储)反之。 2. 小端存储称为Intel模式,大端存储称为Motorola模式。 3. C51中LCALL指令将下一指令的执行地址压入堆栈中(堆栈地址由低向高增长),先存入低字节地址,再存入高字节地址,亦即使用“小端模式(Intel模式)”;除此之外,C51中的其它指令和数据,均使用“大端模式(Motorola模式)”。 The 8051 is an 8-bit machine and has no instructions for directly manipulating data objects that a
[单片机]
C51 手动计算定时器 中断简介
以下由软件计算得出12M晶振,定时器模式16位在12T下1毫秒的时间 void Timer0Init(void) //1毫秒@12.000MHz{ AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0x18; //设置定时初值 TH0 = 0xFC; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时}1.2.3.4.5.6.7.8.9.10. 验证软件的结果: 晶振为12M,一个震荡用时为(1/12M)秒 12T的单片机一个机器
[单片机]
基于C51程序设计中字节对齐对程序的影响
一。什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节对齐。其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台要求对 数据存放进行对齐,会在存取效率上带来损失。比如有些
[单片机]
基于<font color='red'>C51</font>程序设计中字节对齐对程序的影响
按键检测非阻塞代码(2种模式)
按键检测的2种模式(低电平触发和高电平触发) 12f509为控制芯片 GP5口是按键检测口 key_time_cnt//延时计数器 key_flag//按键标志(key_flag=1按键有效,否则无效) TIME_MAX//计数阀值 num//按键的功能变量 模式1(低电平触发) if(GP5==1)//如果I/O是高电平,说明没有键按下 { key_flag=0;//按键标志清零(无效) key_time_cnt=0;//延时计数器清零 } else if(key_flag==0)//这句话的意思其实是else if((key_flag==0)&&(GP5==0))按键被按下,而且是第一次被按下 { key_time_cnt+
[单片机]
<font color='red'>按键</font><font color='red'>检测</font>非阻塞代码(2种模式)
单片机解码315M的pt2262编码的c51程序
这是一个用软件来解码pt2262信号的c51程序,经过测试是可以使用的,要注意接受模块要远离单片机的晶振 不然干扰太严重无法解码的 或者距离很近. /*----------------------------------------------------------------- ; Copyright (C) 2006 WangChanghong INTEGRATED PRODUCTS, INC. ; All rights reserved. ; MCU:AT89s52 ,晶体频率:12MHz : 作者:汪长洪 : 时间:2006年08月01日 ; 地点:威海 ;------------------------
[单片机]
Keil C51中变量的使用
引言 8051内核单片机是一种通用单片机,在国内占有较大的市场份额。在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功。由于51内核单片机的存储结构的特殊性,Keil C51中变量的使用与标准C有所不同。正确地使用变量,有利于获得高效的目标代码。下面详细介绍Keil C51中变量的使用方法。 1 CPU存储结构与变量的关系 变量都需要有存储空间,存储空间的不同使得变量使用时的工作效率也不同。 标准C的典型运行环境是8086(含IA-32系列)内核,其存储结构是CPU内部有寄存器,外部有存储器,寄存器的访问速度大大高于存储器的访问速度。在标准C中,不加特别定义的变量是放在存储器中的,使用register可以
[单片机]
Keil <font color='red'>C51</font>中变量的使用

推荐帖子

MSP430不同时钟怎么选择时钟源?
在MSP430中时钟源有低频振荡器,高频振荡器和数控振荡器,时钟有主时钟,子系统时钟,和辅助系统时钟,怎么配置时钟才能选择我所需要的时钟源啊?MSP430不同时钟怎么选择时钟源?你所说的前三个是时钟源,后三个是时钟系统。建议好好看看RM里面关于时钟的这一章,弄清楚各个时钟的关系和区别。armcu发表于2014-8-1617:01你所说的前三个是时钟源,后三个是时钟系统。建议好好看看RM里面关于时钟的这一章,弄清楚各个时钟的关系和... 我的意思是比如我要把主时钟的时
东方龙未名 微控制器 MCU
AD603出现底部失真,不知什么原因造成的。
按照AD603手册上的图画pcb,只改变了部分电容的大小,下图已标出。https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=562358&page=1#pid2233599这是之前仿真的帖子,和手册里给的一样。pcb里电阻R4和R7没焊上去,这两电阻只与增益倍数范围有关。现在的问题是用示波器看波形发现输出波形底部有失真。如下图,底部程斜波上升。增大脉冲宽度后底部和顶部均有失真。减小频率后发现底部出现震荡。增大频率后
魔双月壁 模拟电子
09年在全国电子设计大赛论文写作要求
09年在全国电子设计大赛论文写作要求09年在全国电子设计大赛论文写作要求我下下来看看但是刚刚朋友也传了一个给我看看是不是一样的我也下来看看!我下下来看看但是刚刚朋友也传了一个给我看看是不是一样的我要了~~~~~~~~~~~~~~~~~~~~~~~~~~~~~下来看看!!!!!!!!!!!!谢谢楼主啦正做着呢,好东西,谢谢分享!谢了,收下,正急用‘没芯币下了没aishangxinhsiua:\'(:\'(看看怎么样
Rick37 电源技术
想学点前沿技术
想学点前沿技术,想到了可以去学些外文资料,可惜很多专业词汇不懂。不知有没有一些外文资料,或者专业英语书的介绍!想学点前沿技术想学前沿技术的关键是先打好基础,盲目去看外文资料的意义很有限,专业词汇的理解首先要建立在对中文术语的掌握和理解上,这也是属于基础性的知识,所以还是绕不开打好基础。
wumigai 单片机
如何使用CAD的自动追踪功能
CAD自动追踪功能怎么使用?CAD中自动追踪功能可以很方便的画一条距离某一点特定距离的垂线,接下来看看CAD自动追踪的详细使用教程,需要的朋友可以参考下。1、首先打开CAD软件,并新建一个图纸,先画了一条长40mm的线段2、正常的情况下,选择再画直线,从已画线段的左端点出发,会有自动追踪的标记。如图,箭头所指的数字是左端点到鼠标的距离。3、这是可以直接用键盘输入距离,要画线段的起点就确定了。我输入的是10,距离也恰好为10.4、但是有时候自动追踪的功能不能用了,
浩辰CAD PCB设计
保安队HMI开发板-STM32H7S7(焊接篇)
MCU:STM32H7S7NORFLASH:MX25UW256PSRAM:APS256XXNEMMC:THGBMJG6C1LBAIL保安队HMI开发板-STM32H7S7(焊接篇)STM32H7S不是今年刚出的芯片吗?这就有人用上了? 趁热乎
bloody41760 stm32/stm8
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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