找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8单片机单击,双击,长按代码,纯逻辑语法

[复制链接]
跳转到指定楼层
#
ID:834124 发表于 2023-3-12 12:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
单片机初学入门写的,没用定时器计数器,纯粹的逻辑代码,高手请路过。
  1. #include <STC8Gxx.H>        

  2. //--声明全局函数--//
  3. void Delay10ms(unsigned int c);   //延时10ms
  4. unsigned int i, y, z, key_on;

  5. //--定义要使用的IO口--//
  6. sbit out_1 = P5^4;  //定义使用的IO口1
  7. sbit out_2 = P5^5;  //定义使用的IO口2
  8. sbit out_3 = P3^3;  //定义使用的IO口3
  9. sbit k1    = P3^2;  //定义按键使用的IO口


  10. void Delay10ms(unsigned int c)   //延时函数
  11. {
  12.     unsigned char a, b
  13.     for (;c>0;c--)
  14.         {
  15.                 for (b=162;b>0;b--)
  16.                 {
  17.                         for (a=235;a>0;a--);
  18.                 }
  19.         }      
  20. }

  21. void main()
  22. {                          
  23.         P5M0 = 0x18;
  24.         P5M1 = 0x00;        
  25.         P3M0 = 0x08;
  26.         P3M1 = 0x00;                //设置需要端口模式

  27.         out_1 = 0;
  28.         out_2 = 0;
  29.         out_3 = 0;                        //端口上电状态

  30.         i = 0; y = 0; z = 0; key_on = 0;        //变量初始化
  31.                
  32.         while(1)
  33.         {                        
  34.                 if((!k1 || z) && i<15)                //按键按下,并只会执行1.5S
  35.                 {                                          
  36.                         Delay10ms(2);
  37.                         if(!k1)                //按下
  38.                         {                                          
  39.                                 key_on = 1;        //标志位,允许计时开始
  40.                                 z = 1;        //状态锁定
  41.                         }
  42.                         if(z==1 && k1==1)        //松开
  43.                         {
  44.                                 y ++;        //y次数+1
  45.                                 z = 0;        //状态解锁
  46.                         }
  47.                 }

  48.                 if(key_on==1 && i<16)                //限制总时长1.6S
  49.                 {
  50.                         i ++;        //循环i次数+1
  51.                         Delay10ms(10);
  52.                 }

  53.                 /*
  54.                 1次:按y=0,z=0 ;松y=1,z=0
  55.                 2次:按y=1,z=1 ;松y=2,z=0  
  56.                 3次:按y=2,z=1 ;松y=3,z=0
  57.                 4次:按y=3,z=1 ;松y=4,z=0
  58.                 长按:按松均为 y=0,z=1
  59.                 */

  60.                 if(k1 && i>=15)                //松开后处理
  61.                 {                                                  
  62.                         if(y==0 && z==1)                //长按
  63.                         {
  64.                                 out_1 = 0; out_2 = 0; out_3 = 0;
  65.                         }
  66.                         else if(z==0 && y>0)
  67.                         {
  68.                                 if(y==1)     //单击
  69.                                 {
  70.                                         //out_3 = ~out_3;
  71.                                 }
  72.                                 else if(y==2)     //双击
  73.                                 {
  74.                                         out_1 = ~out_1;
  75.                                 }                                                
  76.                                 else if(y==3)     //三击
  77.                                 {
  78.                                         out_2 = ~out_2;
  79.                                 }
  80.                                 else     //4击及以上为长按
  81.                                 {                 
  82.                                         out_1 = 0; out_2 = 0; out_3 = 0;
  83.                                 }  
  84.                         }
  85.                         i = 0; y = 0; z = 0; key_on = 0;
  86.                 }
  87.         }
  88. }
复制代码

评分

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

查看全部评分

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

使用道具 举报

板凳
ID:1040201 发表于 2023-3-14 14:24 | 只看该作者

这个是用延时来做的 ,没用定时器 ,时间频率可以按自己的来算
回复

使用道具 举报

沙发
ID:1040201 发表于 2023-3-14 14:23 | 只看该作者
这个方法可以借用一下,感觉有点意思。
回复

使用道具 举报

楼主
ID:483407 发表于 2023-3-14 12:51 | 只看该作者
时钟是多少?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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