找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8单片机一个IO检测两个按键+LED 源程序

[复制链接]
跳转到指定楼层
楼主
ID:1014008 发表于 2022-3-29 15:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<all.h>
  2. sbit LED=P1^0;
  3. sbit k=P1^1;
  4. bit led1=0,led2=0;
  5. u8 value=0;
  6. void GPIO_Init()
  7. {
  8.                 P7M0=0X00;
  9.                 P7M1=0X00;
  10.                 P6M0=0X00;
  11.                 P6M1=0X00;
  12.                 P5M0=0x00;
  13.                 P5M1=0X00;
  14.                 P4M0=0X00;
  15.                 P4M1=0X00;
  16.                 P3M0=0X00;
  17.                 P3M1=0X00;
  18.                 P2M0=0x00;
  19.                 P2M1=0X00;
  20.                 P1M0=0X00;
  21.                 P1M1=0X00;
  22.                 P0M0=0X00;
  23.                 P0M1=0X00;
  24. }
  25. void LEDRY(u8 a)
  26. {
  27.         switch(a)
  28.         {
  29.                 case 0:P1M1|=0X01;break;//高阻,全灭
  30.                 case 1:P1M1&=0XFE;LED=1;break;//上拉,一个亮
  31.                 case 2:P1M1&=0XFE;LED=0;break;//上拉,一个亮
  32.                 case 3:P1M1&=0XFE;LED=~LED;break;//上拉模式
  33.         }
  34. }
  35. void key_scan(u8 c)
  36. {
  37.                 switch(c)
  38.                 {
  39.                         case 0://k=0;
  40.                                                 P1M0=0X00;
  41.                                                 P1M1|=0X02;//高阻模式
  42.                                                 //if(k==1)//一定是正按键按下
  43.                                                 break;
  44.                         case 1:k=1;        
  45.                                                 P1M0=0X00;
  46.                                                 P1M1&=0XFD;//上拉模式
  47.                                                 //if(k==0)//一定是负按键按下
  48.                                                 break;
  49.                 }
  50. }
  51. void Key_Enter()
  52. {
  53.                 static bit k12=0,flag=1,flag2=1;
  54.                 static u16 count=0;
  55.                 if(flag)//扫描检测
  56.                 {
  57.                                 k12=~k12;
  58.                                 key_scan(k12);
  59.                 }
  60.                 if((k12&&k==0&&flag2)||(k12==0&&k==1&&flag2))
  61.                 {
  62.                                 flag=0;//停止扫描
  63.                                 count++;
  64.                                 if(count>=1000)
  65.                                 {
  66.                                                 count=0;
  67.                                                 flag2=0;//禁止再次进入
  68.                                                 if(k)
  69.                                                         led2=~led2;
  70.                                                 else
  71.                                                         led1=~led1;
  72.                                 }
  73.                 }
  74.                 if((k12&&k)||(k12==0&&k==0))
  75.                 {
  76.                                 flag=1;//允许扫描
  77.                                 count=0;
  78.                                 flag2=1;//
  79.                 }
  80.         
  81.         
  82.         
  83. }
  84. void main()
  85. {               
  86.                 u16 count=0,i=0;
  87.                 u8 xdata j=0;
  88.                 GPIO_Init();
  89.                 UartInit();
  90.                 while(1)
  91.                 {        
  92.                                 value=0;
  93.                                 if(led1)
  94.                                         value+=2;
  95.                                 if(led2)
  96.                                         value++;
  97.                                 LEDRY(value);
  98.                                 Key_Enter();
  99.                                 
  100.                                 
  101.                                 count++;
  102.                                 if(count>=500)
  103.                                 {
  104.                                                 count=0;
  105.                                                 i++;
  106.                                                 if(i>=1000)
  107.                                                 {
  108.                                                         i=0;
  109.                                                         j++;
  110.                                                         j%=4;
  111.                                                 }
  112.                                 }        
  113.                 }
  114. }
复制代码

Keil代码下载: STC8-一个IO检测两个按键 LED.rar (51.87 KB, 下载次数: 15)

评分

参与人数 1黑币 +30 收起 理由
admin + 30 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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