找回密码
 立即注册
查看: 1103|回复: 22

GPIO学习笔记之模拟手电筒

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-7 22:15:44 | 显示全部楼层 |阅读模式
本帖最后由 soma 于 2024-6-10 17:41 编辑

使用开天斧实现一个按键实现多种控制效果
  1. #include <STC8H.H>
  2. #define MAIN_Fosc 24000000UL
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar status = 0;
  6. sbit key = P3^5; //按键
  7. void delayms(uint ms)
  8. {
  9.          uint i;
  10.      do{
  11.           i = MAIN_Fosc / 6000;
  12.           while(--i);
  13.      }while(--ms);
  14. }
  15. void main(void)
  16. {
  17.         P2M0=0x00;P2M1=0x00;
  18.         P3M0=0x00;P3M1=0x00;
  19.         while(1)
  20.         {
  21.                 if(!key)
  22.                 {
  23.                         delayms(10); //软件防抖
  24.                         if(!key)
  25.                         {
  26.                                 status++;
  27.                                 if(status==1)
  28.                                 {
  29.                                         P2=0xfe;//亮一灯
  30.                                 }
  31.                                 else if(status==2)
  32.                                 {        
  33.                                         P2=0xf8;//亮3灯
  34.                                 }
  35.                                 else if(status==3)
  36.                                 {
  37.                                         P2=0xc0;//亮6灯
  38.                                 }
  39.                                 else if(status==4)
  40.                                 {
  41.                                         status=0;//关灯
  42.                                         P2=0xff;
  43.                                 }
  44.                                 while(!key); //等待按键释放
  45.                         }
  46.                 }
  47.         }
  48. }
复制代码




回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:526
  • 最近打卡:2025-05-09 08:02:13
已绑定手机

47

主题

1750

回帖

2737

积分

金牌会员

积分
2737
发表于 2024-6-8 06:57:55 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:528
  • 最近打卡:2025-05-09 08:05:09

109

主题

1923

回帖

5338

积分

论坛元老

积分
5338
发表于 2024-6-8 08:19:22 | 显示全部楼层
不错,你已经成功了一半!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:240
  • 最近打卡:2025-05-08 07:04:54

61

主题

818

回帖

1518

积分

金牌会员

积分
1518
发表于 2024-6-8 08:20:31 | 显示全部楼层
学习     主要原理是10毫秒把状态位加一    10ms太短了   1秒一改变 好控制
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:462
  • 最近打卡:2025-05-09 07:59:15

28

主题

162

回帖

1921

积分

金牌会员

积分
1921
发表于 2024-6-8 08:47:28 | 显示全部楼层
我觉得,else if(status==4)这句改成≥4比较合适,目前就这么简单的循环,还好,万一任务多了,跑非了咋整
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-8 08:56:34 来自手机 | 显示全部楼层
zhange 发表于 2024-6-8 08:20
学习     主要原理是10毫秒把状态位加一    10ms太短了   1秒一改变 好控制

只有按下按键状态位才加1,10ms是软件防抖。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-8 08:59:49 来自手机 | 显示全部楼层
18344371880 发表于 2024-6-8 08:47
我觉得,else if(status==4)这句改成≥4比较合适,目前就这么简单的循环,还好,万一任务多了,跑非了咋整
...

这个只是玩玩的。这种单按键多任务程序一般任务不会很多。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-9 18:10:51 来自手机 | 显示全部楼层
第二步,使用定时器实现闪灯效果,代码准备中。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:286
  • 最近打卡:2025-05-09 00:29:08

4

主题

43

回帖

1280

积分

金牌会员

积分
1280
发表于 2024-6-10 01:30:18 | 显示全部楼层
新手不懂请教一下代码

我在论坛看视频里讲的开头需要
sfr p0=0x80 ;
sfr p0m1=0x93;
sfr p0m0=0x94;

sfr p4=0xc0 ;
sfr p4m1=0xB3;
sfr p4m0=0xB4;

sfr p6=0xE8 ;
sfr p6m1=0xCB;
sfr p6m0=0xCC;

sbit P40=P4^0;
sbit P60=p6^0;

这里sbit P40=P4^0; 这个我的理解P40就等于 P4组第0个IO  P60一样
但是为啥楼主没写这些?
还有就是只在代码里写了 P2=0xf8 这个0xf8是什么意思呢? P2=0xff 这个是关灯? 直接给P2赋值0xff就是全组关灯?
楼主能给解惑一下么 万分感谢
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:430
  • 最近打卡:2025-05-09 08:24:27
已绑定手机

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-10 08:14:56 来自手机 | 显示全部楼层
ffzdh 发表于 2024-6-10 01:30
新手不懂请教一下代码

我在论坛看视频里讲的开头需要

stc8h.h这个头文件已经对寄存器进行配置了,所以不用再次配置sfr。P2口是共阳LED,低电平开灯,所以0xff关闭P2所有LED。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 09:22 , Processed in 0.283227 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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