久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4941|回復: 6
收起左側

51單片機,按鍵控制電動機+1602顯示

[復制鏈接]
ID:92134 發表于 2015-10-14 13:45 | 顯示全部樓層 |閱讀模式
#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);//按鍵檢測
void WriteLcd(unsigned char Dat,bit x); //1602LCD
void InitLCD(void);  //初始化1602函數
void InitInt05T0(void);  //初始化定時器中斷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,寫數據x=1
{
        E=0;
        LcdData=Dat;
        RS=x;
        RW=0;
        E=1;
        Delayms(1);
        E=0;
}

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

}


回復

使用道具 舉報

ID:1 發表于 2015-10-14 13:56 來自手機 | 顯示全部樓層
樓主能分享一下電路圖嗎?
回復

使用道具 舉報

ID:92134 發表于 2015-10-14 15:31 | 顯示全部樓層
admin 發表于 2015-10-14 13:56
樓主能分享一下電路圖嗎?

就這個了

按鍵+1602

按鍵+1602
回復

使用道具 舉報

ID:74784 發表于 2015-10-14 21:17 | 顯示全部樓層
感覺H橋電路有問題
不知樓主實際試驗過嗎?
回復

使用道具 舉報

ID:92134 發表于 2015-10-15 17:45 | 顯示全部樓層
沒有,只仿真了
回復

使用道具 舉報

ID:36525 發表于 2015-10-15 21:05 | 顯示全部樓層
對1602一直不熟悉
回復

使用道具 舉報

ID:91888 發表于 2015-10-15 22:35 | 顯示全部樓層
看得不怎么明白
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲社区在线 | 国产成人在线一区二区 | 国产一区二区视频在线观看 | 欧美日韩亚洲国产 | 日韩视频一区在线观看 | 亚洲精品乱码久久久久久按摩观 | 亚洲精品久久久久久久久久久 | 九九国产 | 亚洲区一 | 国产精品久久免费观看 | 欧美精品一区二区三区在线播放 | 人人看人人搞 | 欧美 日韩 国产 成人 在线 91 | av手机免费在线观看 | 久久久久久99| 国产精品久久久久久久久久久久久 | 综合色婷婷 | 丁香五月网久久综合 | 精品伊人久久 | 99久久精品免费看国产高清 | 国产精品一区二区不卡 | 亚洲午夜视频 | 91中文在线观看 | 色呦呦网站 | 成人影视网址 | 欧洲妇女成人淫片aaa视频 | 在线亚洲欧美 | 欧美一区二区在线观看视频 | 亚洲精品高清视频 | 国产免费一区二区三区最新6 | 一区二区三区精品在线视频 | 99re在线| 午夜在线视频 | 男人天堂网址 | 国产人成精品一区二区三 | 在线亚洲人成电影网站色www | 亚洲精品成人网 | 不卡视频一区 | 国产欧美一区二区在线观看 | 在线国产视频 | 瑞克和莫蒂第五季在线观看 |