標題:
單片機pwm按鍵輸出
[打印本頁]
作者:
zhiyu_zhimeiyu
時間:
2018-7-15 19:19
標題:
單片機pwm按鍵輸出
放暑假無聊就寫了個給一個學弟學習,也適合新手
每一行都有代碼注釋
#include<reg51.h> //定義單片機庫函數(shù)
#define uint unsigned int //定義無符號整形
#define uchar unsigned char //定義無符號字節(jié)型
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口
/************函數(shù)聲明**************/
void delayxms(uint z); //延時
void pwm_add(); //pwm加,即增加占空比
void pwm_dec(); //pwm減,即減少占空比
void timer0_init(); //定時器0初始化
/*********主函數(shù)********************/
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.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1