找回密码
 立即注册
楼主: soma

GPIO学习笔记之模拟手电筒

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

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-10 11:39:29 | 显示全部楼层
第二版增加闪灯板,可能不是很完善希望大家指正。
  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. uchar tr0cnt = 0;                //TR0计数
  8. uchar flash = 0xaa; //1,3,5,7交替闪灯
  9. void delayms(uint ms)
  10. {
  11.     uint i;
  12.     do {
  13.         i = MAIN_Fosc / 6000;
  14.         while(--i);
  15.     } while(--ms);
  16. }
  17. void Timer0_Isr(void) interrupt 1
  18. {
  19.     tr0cnt++;
  20.     P2 = flash;
  21.     if(tr0cnt==50) //1秒闪一次
  22.     {
  23.         flash = ~flash;
  24.         tr0cnt =0;
  25.     }
  26. }
  27. void Timer0_Init(void)                //20毫秒@24.000MHz
  28. {
  29.     AUXR &= 0x7F;                        //定时器时钟12T模式
  30.     TMOD &= 0xF0;                        //设置定时器模式
  31.     TL0 = 0xC0;                                //设置定时初始值
  32.     TH0 = 0x63;                                //设置定时初始值
  33.     TF0 = 0;                                //清除TF0标志
  34.     //TR0 = 1;                                //定时器0开始计时
  35.     ET0 = 1;                                //使能定时器0中断
  36.     EA =1;
  37. }
  38. void main(void)
  39. {
  40.     P2M0=0x00;
  41.     P2M1=0x00;
  42.     P3M0=0x00;
  43.     P3M1=0x00;
  44.     Timer0_Init();
  45.     while(1)
  46.     {
  47.         if(!key)
  48.         {
  49.             delayms(10);
  50.             if(!key)
  51.             {
  52.                 status++;
  53.                 if(status==1)
  54.                 {
  55.                     P2=0xfe; //P2.0亮灯
  56.                 }
  57.                 else if(status==2)
  58.                 {
  59.                     P2=0xf8; //P2.0-P2.2亮灯
  60.                 }
  61.                 else if(status==3)
  62.                 {
  63.                     P2=0xc0; //P2.0-P2.7亮灯
  64.                 }
  65.                 else if(status==4)
  66.                 {
  67.                     TR0=1; //开启定时器
  68.                 }
  69.                 else if(status==5)
  70.                 {
  71.                     TR0 = 0;  //关闭定时器
  72.                                                                                 tr0cnt = 0;
  73.                     status=0;
  74.                                                                           P2=0xff; //灭灯
  75.                 }
  76.                 while(!key); //等待按键释放
  77.             }
  78.         }
  79.     }
  80. }
复制代码


回复 支持 反对

使用道具 举报 送花

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

4

主题

43

回帖

1280

积分

金牌会员

积分
1280
发表于 2024-6-10 12:58:29 来自手机 | 显示全部楼层
soma 发表于 2024-6-10 08:14
stc8h.h这个头文件已经对寄存器进行配置了,所以不用再次配置sfr。P2口是共阳LED,低电平开灯,所以0xff ...

P2=0xf8这个呢 没看懂什么意思楼主能给解惑下么
回复 支持 反对

使用道具 举报 送花

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

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-10 13:13:58 来自手机 | 显示全部楼层
本帖最后由 soma 于 2024-6-10 13:15 编辑
ffzdh 发表于 2024-6-10 12:58
P2=0xf8这个呢 没看懂什么意思楼主能给解惑下么


开天斧P2灯使用共阳只有低电平时才会亮灯,0xf8=11111000b,所以这时候P2.0,P2.1,P2.2亮灯,其余灯灭。
回复 支持 反对

使用道具 举报 送花

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

4

主题

43

回帖

1280

积分

金牌会员

积分
1280
发表于 2024-6-10 13:34:21 来自手机 | 显示全部楼层
soma 发表于 2024-6-10 13:13
开天斧P2灯使用共阳只有低电平时才会亮灯,0xf8=11111000b,所以这时候P2.0,P2.1,P2.2亮灯,其余灯灭。 ...

多谢楼主 貌似懂了 P2是整组开始的地址给个16进制相当于全部设置了一遍从高往低一位就是一个io
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:450
  • 最近打卡:2025-05-06 04:24:11

17

主题

533

回帖

1330

积分

金牌会员

积分
1330
发表于 2024-6-10 16:18:27 | 显示全部楼层
我觉得再加一个延时消抖可能更好
自信就会温和,温和就会坚定!
回复 支持 反对

使用道具 举报 送花

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

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-6-10 17:04:37 来自手机 | 显示全部楼层
嵌入式之路 发表于 2024-6-10 16:18
我觉得再加一个延时消抖可能更好

已经加了一个10ms的消抖了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1563

回帖

2026

积分

金牌会员

积分
2026
发表于 2024-7-18 12:45:02 | 显示全部楼层
加个pwm,加个save.之前我有发一个,
挺好的.
飞哥帮忙写的
我加入了省电模式
可以自动保存当前亮度,下次开机就是那个亮度
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1563

回帖

2026

积分

金牌会员

积分
2026
发表于 2024-7-18 12:45:27 | 显示全部楼层
  1. #include "config.h"
  2. sbit key = P3^2; //按键
  3. void main ()
  4. {
  5. sys_init();
  6. pwm_init();
  7.                
  8.         while(1)
  9.   {
  10.                           if(!key)
  11.                 {         
  12.                             
  13.                             u8 status ;
  14.                         delayms(10); //软件防抖
  15.                         if(!key)
  16.                         {
  17.                                 status++;
  18.                                 if(status==1)
  19.                                 {
  20.                                         CCAP1H=5;//亮一灯
  21.                                 }
  22.                                 else if(status==2)
  23.                                 {        
  24.                                          CCAP1H=50;//亮3灯
  25.                                 }
  26.                                 else if(status==3)
  27.                                 {
  28.                                           CCAP1H=150;//亮6灯
  29.                                 }
  30.                                 else if(status==4)
  31.                                 {
  32.                                         status=0;//关灯
  33.                                          CCAP1H=0;
  34.                                 }
  35.                                 while(!key); //等待按键释放
  36.                         }
  37.                 }
  38.    }
  39. }
复制代码
回复 支持 反对

使用道具 举报 送花

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

19

主题

3196

回帖

4960

积分

论坛元老

积分
4960
发表于 2024-7-18 12:48:55 | 显示全部楼层
vb2*** 发表于 2024-7-18 12:45
加个pwm,加个save.之前我有发一个,
挺好的.
飞哥帮忙写的

PWM有计划加入现在还没开始写
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:358
  • 最近打卡:2025-05-09 00:47:13
已绑定手机

131

主题

1563

回帖

2026

积分

金牌会员

积分
2026
发表于 2024-7-18 12:54:27 | 显示全部楼层
so*** 发表于 2024-7-18 12:48
PWM有计划加入现在还没开始写

我发出来这个代码就是我加入pwm的.
按一下亮度改变,按一下改变.占空比自己设置
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 09:24 , Processed in 0.213218 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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