打印
[51单片机]

atmega16按键控制PWM占空比问题

[复制链接]
2431|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Easy_Deng|  楼主 | 2014-4-19 15:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用16产生了10K,50%占空比的PWM波,但是用按键无法控制PWM的占空比
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
int num=50;

//*******延时函数*******//
void delay(uint MS)  //约为1MS的延时函数                  
{
uint i,j;
for(i=0;i<MS;i++)
for(j=0;j<1141;j++);       //1141是在8MHz晶振下为MS毫秒
}

//******PWM初始化******//
void KPWM(void)
{
DDRD = 0x30;       //PD5,PD6输出
PORTD = 0x00;      //不带上拉输出

TCCR1A = 0xA3;     //两路PWM,匹配清零
TCCR1B = 0x19;     //快速PWM模式,位数可调,预分频1

OCR1A=100;        //频率为10K
OCR1B=num;       //匹配初值,占空比为50%左右
}

//*******按键程序********//
void key()
{
DDRB=0x00;       //PB口输入状态
PORTB=0XFF;      //PB口带上拉输入   
if(PINB==0XFE)    //如果PB0按下
{
delay(10);        //延时1毫秒,按键防抖
if(PINB==0XFE)
{
   num=num+5;       //比较值加5,即占空比增加5%
if(num==90)        //判断占空比是否到90%
{
   num=90;          //占空比钳位在90%
}
}
while(PINB==0XFE);  //按键释放程序
}
if(PINB==0XFD)      //如果PB1按下
{
delay(10);          //延时10毫秒,按键防抖
if(PINB==0XFD)        
{
  num=num-5;         //比较值减5,即占空比减少5%
if(num==10)         //判断占空比是否到10%
{
  num=10;             //占空比钳位在10%
}
}
while(PINB==0XFD);  //按键释放程序
}
}

//*******主函数********//
void main()
{
while(1)
{
   KPWM();             //PWM产生函数
   key();              //按键函数
}
}

相关帖子

沙发
Easy_Deng|  楼主 | 2014-4-19 15:36 | 只看该作者
是用proteus仿真的

使用特权

评论回复
板凳
shiningtome| | 2014-5-10 08:21 | 只看该作者


单双面板 5*5CM以内的,pcb打样50元/款,在线支付48元/款。
以上报价要求工艺为:FR-4,板厚0.6-1.6mm,绿油白字,有铅喷锡工艺,数量为10片内,材料均采用建滔KB顶级板材,样板免费全测!免颜色费!网银和支付宝在线支付享受9.5折扣
板材多样化:单面纸板(94V0)样板,半玻纤cem-1,铝基板等 小批量快速生产品质保证。
PCB小批量快速生产在线支付享受9折扣优惠。
深圳顺易捷科技有限公司销售联系人:韩先生
手机13480101190 /13510965133  
QQ800055586
电话:0755-84086168,传真0755-84069526
E-mail :syjpcb@163.com

使用特权

评论回复
地板
mfkyygt| | 2014-5-10 22:01 | 只看该作者
端口的初始化建议在上电后就要处理,而非放在循环体while内,重新整理流程和思路试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

27

帖子

1

粉丝