欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī),按鍵控制電動(dòng)機(jī)+1602顯示 [打印本頁]

作者: moose    時(shí)間: 2015-10-14 13:45
標(biāo)題: 51單片機(jī),按鍵控制電動(dòng)機(jī)+1602顯示
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define CWD Moto1=1;Moto2=0
#define CCWD Moto1=0;Moto2=1
#define stop Moto1=1;Moto2=1
#define LcdData P0

sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit FuncKey=P1^2; //
sbit IncKey=P1^0;//
sbit DecKey=P1^1; //
sbit Moto1=P2^3; //
sbit Moto2=P2^4;

bit MotoStatus;
bit PulseStatus;//PWM

unsigned char NumChange;  
unsigned char HPulseNum; //
unsigned char LPulseNum; //

void Delayms(unsigned int xms);  //ms
void KeyScan(void);//按鍵檢測(cè)
void WriteLcd(unsigned char Dat,bit x); //1602LCD
void InitLCD(void);  //初始化1602函數(shù)
void InitInt05T0(void);  //初始化定時(shí)器中斷T0
void StatusLCD(void);

unsigned char FirstLine[15]={"MotoStatus: CWD"};//1602LCD顯示
unsigned char SecondLine[8]={"H/L:  0%"};

void Delayms(unsigned int xms)
{
        unsigned int i,j;
        for(i=xms; i>0; i--)
                for(j=110; j>0; j--);
}

void WriteLcd(uchar Dat,bit x)//寫指令x=0,寫數(shù)據(jù)x=1
{
        E=0;
        LcdData=Dat;
        RS=x;
        RW=0;
        E=1;
        Delayms(1);
        E=0;
}

void InitLcd(void)
{
        WriteLcd(0x38,0);//功能開關(guān)(38H)
        WriteLcd(0x0C,0);//顯示開關(guān)(0CH)
        WriteLcd(0x06,0);//輸入模式(06H)
        WriteLcd(0x01,0);//清除顯示(01H)
        WriteLcd(0x02,0);//光標(biāo)返回指令(02H or 03H)
}
void StatusLCD(void)
{
        if(!MotoStatus)  //˳順時(shí)針CWD
        {        
                FirstLine[11]=' ';
                FirstLine[12]='C';
                FirstLine[13]='W';
                FirstLine[14]='D';
        }
        else//逆時(shí)針
        {
          FirstLine[11]='C';
                FirstLine[12]='C';
                FirstLine[13]='W';
                FirstLine[14]='D';
        }
                if(NumChange<100)
                SecondLine[4]= ' ';
                else    //取占空比百位轉(zhuǎn)換ASCLL碼
                SecondLine[4]=NumChange/100+0x30;
        if(NumChange<10)
                SecondLine[5]= ' ';
                else  //取占空比十位轉(zhuǎn)換ASCLL碼
                SecondLine[5]=NumChange%100/10+0x30;
                SecondLine[6]=NumChange%10+0x30;
}




void         InitInt0T0( void)
{       
                TMOD=0X02;
                EA=1;
                EX0=1;
                ET0=1;
                PX0=1;
                PT0=0;
                IT0=1;
                TH0=6;
                TL0=6;
                TR0=1;
}

void KeyScan(void)
{
        if(!FuncKey)
        {
                Delayms(10);
                if(!FuncKey)
                {
                        while(!FuncKey);
                        MotoStatus=~MotoStatus;
                }
        }
        if(!IncKey)
        {
                Delayms(10);
                if(!IncKey)
                {
                        while(!IncKey);
                        NumChange+=10;
                        if(NumChange>=100)NumChange=100;
                }
        }
        if(!DecKey)
        {
                Delayms(10);
                if(!DecKey)
                {
                        while(!DecKey);
                        NumChange-=10;
                        if ((NumChange<10)|(NumChange>100))NumChange=0;
                }
        }
       
}

void Int0Serv( ) interrupt 0
{
        KeyScan();
}
void T0Serv()interrupt 1
{
        if(!PulseStatus)
        {
                if(HPulseNum--!=0)
                {
                        if(!MotoStatus)
                        {
                                CWD;
                        }
                        else
                        {
                                CCWD;
                        }
                }
                else
                {
                        PulseStatus=!PulseStatus;
                        LPulseNum=100-NumChange;
                }
        }
        else
        {
                if(LPulseNum--!=0)
                {
                        stop;
                }
                else
                {
                        PulseStatus=!PulseStatus;
                        HPulseNum=NumChange;
                }
        }
}



void main()
{
        uchar y;
        InitLCD();
        InitInt0T0();
        HPulseNum=NumChange;
       
        while(1)
        {
                StatusLCD();
                WriteLcd(0x80,0);
                for(y=0; y<15; y++)
                WriteLcd(FirstLine[y],1);
       
                WriteLcd(0xc0,0);
                for(y=0; y<8; y++)
                        WriteLcd(SecondLine[y],1);
               
        }

}



作者: admin    時(shí)間: 2015-10-14 13:56
樓主能分享一下電路圖嗎?
作者: moose    時(shí)間: 2015-10-14 15:31
admin 發(fā)表于 2015-10-14 13:56
樓主能分享一下電路圖嗎?

就這個(gè)了

電路圖.PNG (57.01 KB, 下載次數(shù): 172)

按鍵+1602

按鍵+1602

作者: lxa0    時(shí)間: 2015-10-14 21:17
感覺H橋電路有問題
不知樓主實(shí)際試驗(yàn)過嗎?
作者: moose    時(shí)間: 2015-10-15 17:45
沒有,只仿真了
作者: ls0899    時(shí)間: 2015-10-15 21:05
對(duì)1602一直不熟悉
作者: fyang    時(shí)間: 2015-10-15 22:35
看得不怎么明白




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