stc12c5410ad 可调占空比 PWM输出

//===============================================================================
//|文件名称|main.c
//|--------|---------------------------------------------------------------------
//|描 述|stc5410 pwm单路输出 通过双按键可调占空比 改变全局变量time可调初始波形
//|--------|---------------------------------------------------------------------
//|调用文件|stc12c5410ad.h ; PWM.h; delay.h; 已全部包含在include.h中
//|--------|---------------------------------------------------------------------
//|E-mail |a582531983@https://www.360docs.net/doc/1e12642443.html,
//|--------|---------------------------------------------------------------------
//|开发环境|KEIL3.0
//===============================================================================
#include"include.h"
uchar time=0x80;
uchar flag=0;
void main()
{
pwminit_time(); //寄存器不能无限配置
while(1) //使程序停在while(1)中
{
keyscan();
if(flag==1) //使程序在按键按下时才从新配置寄存器
{
flag=0;
pwminit_time();
}
}
}

#ifndef _PWM_H
#define _PWM_H

sbit key1=P2^4;
sbit key2=P2^5;
//有参变量0模块 P3.7口 PWM输出
void pwminit_time();
//键盘扫描函数 key1 P2.4
void keyscan();
#endif

#include"include.h"

void pwminit_time()
{
CCON=0; //
CL=0; //计数器归0
CH=0;
CMOD=0x02; //时钟频率选择方式2 Fosc/2
CCAP0H=CCAP0L=time; //赋给比较寄存器原值
CCAPM0=0x42; //选择工作模式为4 8位PWM输出
CR=1; //启动PCA计数器
}
void keyscan()
{
if(key1==0)
{
delay_ms(5);
if(key1==0)
{
time=time-0x10;
if(time<=0x10)
time=0xff-time;
}
while(!key1);
flag=1;
}
if(key2==0)
{
delay_ms(5);
if(key2==0)
{
time=time+0x10;
if(time>=0xe0)
time=time-0xff;
}
while(!key2);
flag=1;
}
}


#ifndef _INCLUDE_H
#define _INCLUDE_H

#include"stc12c5410ad.h"
#include"PWM.h"
#include"delay.h"

#define uchar unsigned char
#define uint unsigned int

extern uchar time; //保证变量可以在.H文件中通用
extern uchar flag;
#endif

#ifndef _delay_h
#define _delay_h

#include


//功能函数

void delay_ms(unsigned int n);
void delay_1us(void);
void delay_us(unsigned int n);
#endif

#include"delay.h"


void delay_1ms(void) //延时1MS
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=128;b>0;b--)
for(a=10;a>0;a--)
{
;
}
}


void delay_ms(unsigned int n)
{
unsigned int j;
for(j=0;j{
delay_1ms();
}

}


void delay_1us(void)//delay us
{
unsigned char i;
for(i=0;i<13;i++);
}

void delay_us(unsigned int n)
{
unsigned int i;
for(i=0;idelay_1us();
}

相关主题
相关文档
最新文档