找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15单片机按键松开会乱码,想问一下这种情况怎么解决

[复制链接]
跳转到指定楼层
楼主
ID:441427 发表于 2019-3-3 20:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <STC15F2K60S2.H>
  2. #include <intrins.h>
  3. #include "GPIO.h"//里面是延时函数和初始化

  4. uc bs[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  5. /**********************
  6. 按键扫描
  7. **********************/
  8. ui keys_scanning ()
  9. {  
  10. ui key_x,key_y,key;
  11.     P1=0xf0;
  12.    delay(1);
  13.   if(P1 != 0xf0)
  14.   {
  15.    delay(1);
  16.    P1=0xf0;
  17.       delay(1);
  18.    if(P1!=0xf0)
  19.    {
  20.    switch(P1)
  21.     {
  22.      case 0xe0:key_x=0;break;
  23.      case 0xd0:key_x=1;break;
  24.      case 0xb0:key_x=2;break;
  25.      case 0x70:key_x=3;break;
  26.     }
  27.    P1=0x0f;
  28.    delay(1);   
  29.    switch(P1)
  30.     {
  31.      case 0x07:key_y=0;break;
  32.      case 0x0b:key_y=1;break;
  33.      case 0x0d:key_y=2;break;
  34.      case 0x0e:key_y=3;break;
  35.     }  
  36.    }
  37.    else
  38.    {
  39.     key=0;
  40.    }   
  41.   }
  42.   key = key_x*4+key_y;
  43.   return(key);
  44. }
  45. /**********************
  46. 数码管显示
  47. **********************/
  48. void display(unsigned int shuzi)
  49. {
  50. P0=0x00;
  51. P3=bs[shuzi/1000%10];
  52. P0=0x10;
  53. delay(1);

  54. P0=0x00;
  55. P3=bs[shuzi/100%10];
  56. P0=0x20;
  57. delay(1);

  58. P0=0x00;
  59. P3=bs[shuzi/10%10];
  60. P0=0x40;
  61. delay(1);

  62. P0=0x00;
  63. P3=bs[shuzi%10];
  64. P0=0x80;
  65. delay(1);
  66. }
  67. /**********************
  68. 主函数
  69. **********************/
  70. void main()
  71. {
  72.   IO_Itin();
  73.   while(1)
  74.   {
  75.      display(keys_scanning());
  76.     delay(5);
  77.   }
  78. }
复制代码

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

使用道具 举报

沙发
ID:123289 发表于 2019-3-4 08:01 | 只看该作者
如何你能不用delay来做,差不多就好了。

评分

参与人数 2黑币 +13 收起 理由
正规007 + 8 回帖助人的奖励!
吴语吖 + 5 赞一个!

查看全部评分

回复

使用道具 举报

板凳
ID:213173 发表于 2019-3-4 09:03 | 只看该作者
按键扫描改这样试试
  1. /**********************
  2. 按键扫描
  3. **********************/
  4. ui keys_scanning ()
  5. {  
  6.         ui key_x,key_y,key;
  7.         P1=0xf0;
  8.         _nop_();
  9.         if(P1!=0xf0)
  10.         {
  11.                 delay(10);
  12.                 if(P1!=0xf0)
  13.                 {
  14.                         switch(P1)
  15.                         {
  16.                                 case 0xe0:key_x=0;break;
  17.                                 case 0xd0:key_x=1;break;
  18.                                 case 0xb0:key_x=2;break;
  19.                                 case 0x70:key_x=3;break;
  20.                         }
  21.                         P1=0x0f;
  22.                         _nop_();   
  23.                         switch(P1)
  24.                         {
  25.                                 case 0x07:key_y=0;break;
  26.                                 case 0x0b:key_y=1;break;
  27.                                 case 0x0d:key_y=2;break;
  28.                                 case 0x0e:key_y=3;break;
  29.                         }  
  30.                         key = key_x*4+key_y+1;//1~16
  31.                         return(key);
  32.                 }
  33.         }       
  34.         else        return 0x00;  
  35. }
复制代码

评分

参与人数 2黑币 +18 收起 理由
正规007 + 8 赞一个!
吴语吖 + 10 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:441427 发表于 2019-3-5 22:37 | 只看该作者
wulin 发表于 2019-3-4 09:03
按键扫描改这样试试

多谢大佬,已解决
回复

使用道具 举报

5#
ID:369368 发表于 2019-3-5 23:35 | 只看该作者
用数码管的话要消影
回复

使用道具 举报

6#
ID:367803 发表于 2019-3-5 23:41 | 只看该作者
看看是怎样解决的。
回复

使用道具 举报

7#
ID:483991 发表于 2019-3-6 10:59 | 只看该作者
wulin 发表于 2019-3-4 09:03
按键扫描改这样试试

很好,就是要这样做
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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