STC8H8K64U 学习笔记 - PWM

STC8H8K64U 学习笔记 - PWM

环境说明

该内容仅针对我自己学习的开发板做的笔记,在实际开发中需要针对目标电路板的原理图进行针对性研究。

  • 芯片:STC8H8K64U
  • 烧录软件:stc-isp-v6.92G
  • 编码工具:天问

引脚说明

  • P0_0:蜂鸣器,按频率发音,1:高,0:低
  • P0_1:电动马达,0:停,1:动
  • P5_3:小蓝灯,0:灭,1:亮
  • P2_7:1 号 LED 灯,0:亮,1:灭
  • P2_6:2 号 LED 灯,0:亮,1:灭
  • P1_5:3 号 LED 灯,0:亮,1:灭
  • P1_4:4 号 LED 灯,0:亮,1:灭
  • P2_3:5 号 LED 灯,0:亮,1:灭
  • P2_2:6 号 LED 灯,0:亮,1:灭
  • P2_1:7 号 LED 灯,0:亮,1:灭
  • P2_0:8 号 LED 灯,0:亮,1:灭
  • P5_1:1 号按键,0:按下,1:弹起
  • P5_2:2 号按键,0:按下,1:弹起
  • P5_3:3 号按键,0:按下,1:弹起
  • P5_4:4 号按键,0:按下,1:弹起
  • P3_4:矩阵键盘第 1 行引脚
  • P3_5:矩阵键盘第 2 行引脚
  • P4_0:矩阵键盘第 3 行引脚
  • P4_1:矩阵键盘第 4 行引脚
  • P0_3:矩阵键盘第 1 列引脚
  • P0_6:矩阵键盘第 2 列引脚
  • P0_7:矩阵键盘第 3 列引脚
  • P1_7:矩阵键盘第 4 列引脚

PWM

  • 频率和周期的关系
    • 频率(Frequency): 表示单位时间内发生事件的次数。常用单位是赫兹(Hz),1赫兹等于每秒一个周期。
    • 周期(Period): 表示一个完整事件发生所需的时间。周期是频率的倒数。
    • 举例:
      • 24MHz(兆赫兹),每秒计算24M次,1M = 1k * 1k = 1 000 000
        • 那么周期的时间就是1/24MHz=41.67ns,那么计算1次需要41.67ns,就是说执行1次所需的时间
  • PWM全称是脉宽调制(Pulse Width Modulation),是一种通过改变信号的脉冲宽度来控制电路输出的技术。
  • PWM与引脚对应关系(引脚来源:《stc8h.pdf》的 997 页)

在这里插入图片描述

呼吸灯

通过 PWM 设置 LED 灯的亮度

#define PWM_DUTY_MAX 1000//PWM最大占空比值

#include <STC8HX.h>
uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
#include "lib/twen_board.h"
#include "lib/PWM.h"
#include "lib/delay.h"

uint16 index = 0;
int16 inc = 5;
uint16 frequency = 1000;

void setup() {
   
   
  twen_board_init();//天问51初始化
  
  pwm_init(PWM4N_P27, frequency, 0);
  pwm_init(PWM4P_P26, frequency, 0);
  // pwm_init(PWM3N_P15, frequency, 0);
  // pwm_init(PWM3P_P14, frequency, 0);
  // pwm_init(PWM2N_P23, frequency, 0);
  // pwm_init(PWM2P_P22, frequency, 0);
  // pwm_init(PWM1N_P21, frequency, 0);
  // pwm_init(PWM1P_P20, frequency, 0);
}

void loop() {
   
   
  pwm_duty(PWM4N_P27, index);
  pwm_duty(PWM4P_P26, index);
  // pwm_duty(PWM3N_P15, index);
  // pwm_duty(PWM3P_P14, index);
  // pwm_duty(PWM2N_P23, index);
  // pwm_duty(PWM2P_P22, index);
  // pwm_duty(PWM1N_P21, index);
  // pwm_duty(PWM1P_P20, index);
  
  delay(1);
  if(index >= 1000) {
   
   
    inc = -5;
  }
  if(index <= 0) {
   
   
    inc = 5;
  }
  index+= inc;
}

void main(void) {
   
   
  setup(
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值