学习提升 发表于 2025-5-9 14:25:52

学习板功能介绍

学习提升 发表于 2025-5-9 14:29:13

STC8A8K64S4单片机内置PWM控制直流电机 源程序
#include <stc8.h>
#include "hc595.h"
#include "pwm.h"

#define CYCLE         100      // 设置PWM周期为1000H个PWM时钟

unsigned char table[] = {90,70,50,30,10};// 定义5个档位的占空比
sbit keyContrl = P0^7;// 独立按键总开关
sbit key1 = P0^0;       // 独立按键1

void Delay(unsigned int xms) // 毫秒级延时
{
      unsigned int i, j;
      for(i=xms;i>0;i--)
      {
                for(j=921;j>0;j--);
      }
}
void main()               
{
      unsigned char i = 0;
      P_SW2 = 0x80;
      PWMCKS = 0x00;         // PWM时钟为系统时钟
      PWMC = CYCLE;          // 设置PWM周期为CYCLE个PWM时钟
      PWM5T1= 0;             // 在计数值为0时,开始输出低电平
      PWM5T2= 0;             // 在计数值为0时,开始输出高电平
      PWM5CR= 0x88;          // 使能PWM5_2输出
      P_SW2 = 0x00;

      PWMCR = 0x80;          // 启动PWM模块
      keyContrl = 0;
       while (1)
      {
                if(!key1)          // 独立按键1,被按下
                {
                        Delay(10);   // 延时消抖
                        if(!key1)
                        {
                              i++;       // 档位增加1
                              if(i>4)    // 大于最大档位后,归零
                              {
                                        i = 0;
                              }
                        }
                        while(!key1);// 等待按键抬起
                }
                PWM5T2= table;// 把i档位的占空比赋给PWM5T2
               
                // 访问逻辑地址位于XDATA区域的特殊功能寄存器前需要
                // 将 P_SW2(BAH)寄存器的最高位(EAXFR)置 1
                P_SW2 |= 0x80;      
               
                display(0,i);      // 显示档位(0~4,共5个档位)
      }
}

学习提升 发表于 2025-5-27 11:30:12

单片机控制程序需要多实践才能掌握单片机的编程思路
页: 1 2 [3]
查看完整版本: 第一集 序言