標(biāo)題: 51單片機(jī)通過(guò)按鍵控制舵機(jī)轉(zhuǎn)動(dòng)角度程序 [打印本頁(yè)]

作者: 斷劍殘血    時(shí)間: 2017-4-16 16:44
標(biāo)題: 51單片機(jī)通過(guò)按鍵控制舵機(jī)轉(zhuǎn)動(dòng)角度程序
#include<reg52.h>
sbit pwm=P3^0;//PWM信號(hào)輸出口
sbit up=P3^7;//角度增加按鍵檢測(cè)I/O口
sbit down=P3^6;//角度減少按鍵檢測(cè)I/O口
sbit we=P2^7;
sbit du=P2^6;
unsigned char angle;//角度標(biāo)識(shí)
unsigned char count;//0.5ms次數(shù)標(biāo)識(shí),可修改
unsigned code leddata[]={

                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄滅
                0x00  //自定義

                         };



void delay(unsigned char z)
{
unsigned char x,y;
  for(x=z;x>0;x--)
    for(y=114;y>0;y--);
}

void Time0_Init()//定時(shí)器初始化
{
TMOD=0x01;//定時(shí)器0工作在方式1
IE=0x82;
TH0=0xfe;
TL0=0x33;//11.0592MHz晶振,0.5ms
TR0=1;//定時(shí)器開始
}

void Time0_Int() interrupt 1
{
        TH0=0xfe;
        TL0=0x33;
        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(10);//按下延時(shí),消抖
                if(up==0)//確實(shí)按下
                {
                        angle++;//角度標(biāo)識(shí)加1
                        count=0;//按鍵按下則20ms周期從新開始
                        if(angle==6)
                                angle=5;//已經(jīng)是180度,則保持?
                                while(up==0);//等待按鍵放開?
                }
        }
        if(down==0)//角度減小按鍵是否按下
        {
                delay(10);
                if(down==0)
                {
                        angle--;//角度標(biāo)識(shí)減1
                        count=0;
                        if(angle==0)
                                angle=1;//已經(jīng)是0度,則保持
                                while(down==0);
                }
        }
}

void display()
{
        unsigned char bai,shi,ge;
        switch(angle)
        {
                case 1:bai=0;shi=0;ge=0;break;
                case 2:bai=0;shi=4;ge=5;break;
                case 3:bai=0;shi=9;ge=0;break;
                case 4:bai=1;shi=3;ge=5;break;
                case 5:bai=1;shi=8;ge=0;break;
        }
        du=0;
        P0=leddata[bai];
        du=1;
        du=0;
        we=0;
        P0=0xfe;
        we=1;
        we=0;
        delay(5);
        P0=leddata[shi];
        du=1;
        du=0;
        P0=0xfd;
        we=1;
        we=0;
        delay(5);
        P0=leddata[ge];
        du=1;
        du=0;
        P0=0xfb;
        we=1;
        we=0;
        delay(5);
}               
                       
void main()
{
        angle=1;
        count=0;
        Time0_Init();
        while(1)
        {
                keyscan();//按鍵掃描
                display();
        }
}


作者: SIMPLE千堆雪    時(shí)間: 2017-7-26 09:46
很棒棒 謝謝樓主
作者: liqiang1997    時(shí)間: 2017-7-26 18:07
謝謝,樓主

作者: yeyuaihaozhe    時(shí)間: 2017-9-5 19:28
樓主,我先問(wèn)你的這個(gè)程序能用嗎,有電路圖嗎
作者: yeyuaihaozhe    時(shí)間: 2017-9-5 19:29
樓主,我先問(wèn)你,你的這個(gè)程序能用嗎,有電路圖嗎
作者: qjyjack612510    時(shí)間: 2017-9-5 23:28
不管看得懂不,都必須頂下。。。
作者: 黃國(guó)雄hgx    時(shí)間: 2018-5-11 18:46
兄弟有沒(méi)有仿真圖
作者: 莊璧梵    時(shí)間: 2018-5-14 16:23
樓主,你這有電路圖嗎?可以仿真嗎?

作者: 夢(mèng)寧一    時(shí)間: 2019-1-15 16:08
這個(gè)是郭天祥的原程序




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1