找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4560|回復(fù): 1
收起左側(cè)

按鍵控制51單片機(jī)輸出pwm脈沖大小控制舵機(jī)

[復(fù)制鏈接]
ID:37685 發(fā)表于 2013-9-5 13:37 | 顯示全部樓層 |閱讀模式
#include<reg51.h>

unsigned char count; //0.5ms次數(shù)標(biāo)識(shí),可修改
sbit pwm=P2^0;        //PWM信號(hào)輸出口
sbit up=P3^4;        //角度增加按鍵檢測I/O口
sbit down=P3^5;        //角度減少按鍵檢測I/O口


unsigned char angle; //角度標(biāo)識(shí)


void delay(unsigned char z)
{
unsigned char x,y;
for(x=125;x>0;x--)
for(y=z;y>0;y--);
}
void Time0_Init()         //定時(shí)器初始化
{
TMOD=0x01;         //定時(shí)器0工作在方式1
IE=0x82;
TH0=0xff;
TL0=0xa3;         //11.0592MHz晶振,0.5ms
TR0=1;         //定時(shí)器開始
}
void Time0_Int() interrupt 1
{
TH0=0xff;
TL0=0xa3;
if(count<angle)         //判斷0.5ms次數(shù)是否小于角度標(biāo)識(shí)
pwm=1;         //確實(shí)小于,pwm輸出高電平
else
pwm=0;         //大于則輸出低電平
count=(count+1); //0.5ms次數(shù)加1
count=count%40;         //次數(shù)始終保持為40即保持周期為20ms
}
void keyscan()         //按鍵掃描
{
if(up==0)        //角度增加按鍵是否按下
{
delay(20); //按下延時(shí),消抖
if(up==0) //確實(shí)按下
{
angle++;        //角度標(biāo)識(shí)加1
count=0;        //按鍵按下 則20ms周期從新開始
if(angle==20)
angle=19;        //已經(jīng)是180度,則保持
//        while(up==0); //等待按鍵放開
}
}
if(down==0)         //角度減少按鍵是否按下
{
delay(20);
if(down==0)        
{
angle--;        //角度標(biāo)識(shí)減1
count=0;
if(angle==4)
angle=5;         //已經(jīng)是0度,則保持
//        while(down==0);
}
}
}
void main()
{
angle=12;
count=0;
Time0_Init();
while(1)
{
keyscan();         //按鍵掃描


}
}
回復(fù)

使用道具 舉報(bào)

ID:55601 發(fā)表于 2013-10-3 14:59 | 顯示全部樓層
喜歡,好東東
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表