找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1821|回复: 2
收起左侧

请教大家一个关于12C5a60S2单片机自带PWM程序问题

[复制链接]
ID:617813 发表于 2021-5-1 01:18 | 显示全部楼层 |阅读模式
50黑币
我调用官方的PWM文件,直接修改CCAP0H值可以控制LED灯的暗亮,但是想用按键控制这个值就不能控制,大家看看是我哪里错了,下面是我的C文件,谢谢大家的帮忙
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sfr CCON = 0xD8;  //PCA 控制寄存器。 CF CR - - - - CCF1 CCF0 00xx,xx00
sfr CMOD = 0xD9;
sfr CL = 0xE9;
sfr CH = 0xF9;
sfr CCAP0L = 0xEA;
sfr CCAP0H = 0xFA;
sfr CCAPM0 = 0xDA;
sfr CCAPM1 = 0xDB;
sbit CR = 0xDE;
sbit key1=P3^4;
sbit key2=P3^5;

uchar aa;

void pwm();


void main(void)
{
pwm();
//aa=255;


   while(1)         ;               
{
                /* if(key1==0)
                         {
                           aa++;
                           if(aa==256)
                           aa=256;                        
                         } */


        // aa=256;
                 
         }

}


void pwm()
{
CMOD = 0x02; // Setup PCA timer            //0000 0010 空闲时不计数,不产生中断,时钟源为fosc/2,因此输出占用率为fosc/512
CL = 0x00;
CH = 0x00;
CCAP0L = 0xc0; //Set the initial value same as CCAP0H
CCAP0H =aa; //25% 设置为25%的占空比
CCAPM0 = 0x42; //0100,0010 Setup PCA module 0 in PWM mode  0100 0010, 8位 PWM
CR = 1; //Start PCA Timer.        //开启PCA计数器
}


最佳答案

查看完整内容

不是按键不能控制PWM,是楼主按键程序写错导致不能正常控制PWM。
回复

使用道具 举报

ID:617813 发表于 2021-5-1 10:22 | 显示全部楼层
wulin 发表于 2021-5-1 01:18
不是按键不能控制PWM,是楼主按键程序写错导致不能正常控制PWM。

谢谢了,大神。真的万分感谢
回复

使用道具 举报

ID:213173 发表于 2021-5-1 01:18 | 显示全部楼层
不是按键不能控制PWM,是楼主按键程序写错导致不能正常控制PWM。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sfr CCON = 0xD8;  //PCA 控制寄存器
  5. sfr CMOD = 0xD9;
  6. sfr CL = 0xE9;
  7. sfr CH = 0xF9;
  8. sfr CCAP0L = 0xEA;
  9. sfr CCAP0H = 0xFA;
  10. sfr CCAPM0 = 0xDA;
  11. sfr CCAPM1 = 0xDB;
  12. sbit CR = 0xDE;

  13. sbit key1=P3^4;
  14. sbit key2=P3^5;

  15. uchar aa;
  16. uchar count=0;
  17. bit sign=0;

  18. void pwm_Init();

  19. void main(void)
  20. {
  21.         pwm_Init();
  22.         aa=0x80;
  23.         while(1)
  24.         {
  25.                 if(!key1||!key2)
  26.                 {
  27.                         if(++count>=250&&sign==0)
  28.                         {
  29.                                 sign=1;
  30.                                 if(!key1 && aa>0x00)
  31.                                         aa--;//增加空比为
  32.                                 if(!key2 && aa<0xff)
  33.                                         aa++;//减少空比为
  34.                                 CCAP0H=aa;
  35.                         }
  36.                 }
  37.                 else
  38.                 {
  39.                         count=0;
  40.                         sign=0;
  41.                 }
  42.         }
  43. }

  44. void pwm_Init()
  45. {
  46.         CCON = 0x00;                        //初始化PCA控制寄存器
  47.         CMOD = 0x02;                        //设置PCA时钟源,PWM频率=11.0592MHZ/2/256=21.600KHZ
  48.         CL = 0x00;                                //复位PCA寄存器
  49.         CH = 0x00;                                //复位PCA寄存器
  50.         CCAP0H = CCAP0L = 0x80; //设置PWM0初始占空比为50%
  51.         CCAPM0 = 0x42;                        //允许CCP0脚用作脉宽调节输出
  52.         CR = 1;                                        //开启PCA计数器
  53. }
复制代码




回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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