标题:
单片机pwm按键输出
[打印本页]
作者:
zhiyu_zhimeiyu
时间:
2018-7-15 19:19
标题:
单片机pwm按键输出
放暑假无聊就写了个给一个学弟学习,也适合新手
每一行都有代码注释
#include<reg51.h> //定义单片机库函数
#define uint unsigned int //定义无符号整形
#define uchar unsigned char //定义无符号字节型
uchar time; //计算中间变量
double count=20; //定义占空比,并初始占空比为20%
sbit PWM=P2^0; //P2^0口输出PWM
sbit key_add=P3^4; //电机加速的按键 的I/O口
sbit key_dec=P3^5; //电机减速的按键 的I/O口
/************函数声明**************/
void delayxms(uint z); //延时
void pwm_add(); //pwm加,即增加占空比
void pwm_dec(); //pwm减,即减少占空比
void timer0_init(); //定时器0初始化
/*********主函数********************/
void main()
{
timer0_init(); //定时器初始化
delayxms(5); //延时
while(1)
{ pwm_add(); //pwm加
pwm_dec(); //pwm减
}
}
/****************延时处理**********************/
void delayxms(uint z) //延时xms程序
{
uint x,y;
for(y=z;x>0;x--)
for(y=110;y>0;y--);
}
/****************pwm加**********************/
void pwm_add() //电机加速
{
if(key_add==0)
{
delayxms(2); //此处时间不能太长,否者会的中断产生冲突
if(key_add==0)
{
count+=5; //每按一次加速按键占空比加0.5
if(count>=100) //限定占空比上限
{
count=100;
}
}
while(!key_add); //松手检测
}
}
/****************pwm减**********************/
void pwm_dec()//电机减速
{
if(key_dec==0)
{
delayxms(2);//此处时间不能太长,否者会的中断产生冲突
if(key_dec==0)
{
count-=5; //每按一次减速按键占空比减0.5
if(count<=0) //限定占空比下限
{
count=0;
}
}
while(!key_dec);//松手检测
}
}
/***********定时器0初始化***********/
void timer0_init()
{
TMOD=0x01; //定时器0工作于方式1
TH0=(65536-200)/256; //设置100hz
TL0=(65536-200)%256;
TR0=1; //打开定时器0
ET0=1; //打开中断0
EA=1; //打开总中断
}
/**************定时0中断处理******************/
void timer0_int() interrupt 1
{
TR0=0; //设置定时器初值期间,关闭定时器
TH0=(65536-10)/256; //设置100hz
TL0=(65536-10)%256;
TR0=1; //打开定时器0
time++; //计算中间变量
if(time<count) //count为占空比
{
PWM=1; //输出高电平
}
else
PWM=0;
if(time>=100)
{
time=0;
}
}
复制代码
作者:
feecoollexs
时间:
2018-7-16 23:18
谢谢分享
作者:
WFX777888
时间:
2019-7-15 05:36
谢谢分享资料
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1