找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7774|回复: 7
打印 上一主题 下一主题
收起左侧

51单片机独立式键盘的按键一键多功能程序

  [复制链接]
跳转到指定楼层
楼主
ID:318620 发表于 2018-5-24 18:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按K5按键 P0口LED等会变化 每按一次 变化一次

单片机源程序如下:
  1. //独立式键盘的按键功能扩展:"以一当四"
  2. #include<reg52.h>        //  包含51单片机寄存器定义的头文件
  3. unsigned char ID;    //储存按键ID
  4. sbit S1=P1^4;          //位定义S1为P1.4

  5. /**************************************************************
  6. 函数功能:延时子程序
  7. **************************************************************/
  8. void delay(void)    //因为仅对一个按键扫描,所以延时时间较长约200ms
  9. {
  10.   unsigned char i,j;
  11.   for(i=0;i<200;i++)
  12.    for(j=0;j<100;j++)
  13.            ;
  14. }


  15. /**************************************************************
  16. 函数功能:主函数
  17. **************************************************************/
  18. void main(void)
  19. {
  20.    TMOD=0x02;     //使用定时器T0的模式2
  21.           EA=1;          //开总中断
  22.         ET0=1;         //定时器T0中断允许
  23.         TR0=1;         //定时器T0开始运行
  24.         TH0=256-200;   //定时器T0赋初值,每200微妙来1次中断请求
  25.         TL0=256-200;

  26.   ID=0;
  27.    while(1)
  28.           {
  29.                   switch(ID)
  30.             {
  31.               case 0: P0=0xfe;
  32.                       break;
  33.                                   case 1: P0=0xfd;
  34.                       break;
  35.                                   case 2: P0=0xfb;
  36.                       break;
  37.                                   case 3: P0=0xf7;
  38.                       break;            
  39.             }
  40.      }
  41.    }
  42. /**************************************************************
  43. 函数功能:定时器T0的中断服务子程序,进行键盘扫描
  44. **************************************************************/
  45. void intersev(void) interrupt 1 using 1
  46. {
  47.   TR0=0;  //关闭定时器T0
  48.   P1=0xff;
  49.   if(S1==0)       //如果是按键S1按下
  50.     {
  51.            delay();       //延时20ms,软件消抖
  52.             if(S1==0)       //如果是按键S1按下
  53.                    ID=ID+1;
  54.                    while(!S1);
  55.           }   
  56.         if(ID==4)
  57.            ID=0;       

  58.           TR0=1;               //启动定时器T0

  59. }
复制代码

所有资料51hei提供下载:
独立式键盘的按键一键多功能程序.rar (10.41 KB, 下载次数: 61)


评分

参与人数 1黑币 +5 收起 理由
舒克和贝塔 + 5

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:337051 发表于 2018-5-24 19:22 | 只看该作者
谢谢分享
回复

使用道具 举报

板凳
ID:337808 发表于 2018-5-25 21:05 来自手机 | 只看该作者
使用delay()函数以后就很被动了
回复

使用道具 举报

地板
ID:67344 发表于 2018-7-14 20:16 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
ID:250337 发表于 2018-7-14 21:57 | 只看该作者
感觉没有必要使用定时器,普通键盘扫描函数就可以搞定吧
回复

使用道具 举报

6#
ID:441403 发表于 2019-6-21 10:51 | 只看该作者
没大用处 不能任意跳 就是没用的
回复

使用道具 举报

7#
ID:66287 发表于 2019-6-24 15:01 | 只看该作者
楼主真是高手,中断里面用 delay(),再加上while(!S1);,你这程序还能干其他活?
回复

使用道具 举报

8#
ID:718536 发表于 2020-4-4 21:48 | 只看该作者
bhjyqjs 发表于 2019-6-24 15:01
楼主真是高手,中断里面用 delay(),再加上while(!S1);,你这程序还能干其他活?

while(!S1);这个等待按键弹起的值吧?收到弹起值之后跳出这个循环等待......我是新手,不知道这样理解对不对。而且因为这个程序功能单一,这样操作感觉并没有占用太多资源....理解得不对,万望高手斧正。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表