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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5208|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

串口通信控制步進(jìn)電機(jī)LCD1602顯示程序及PROTEUS仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主




#include "AT89X51.h"
//#include <reg52.h>
#include <intrins.h>

//#define RIGHT_RUN 1            //正轉(zhuǎn)值
//#define LEFT_RUN 0                //反轉(zhuǎn)值

unsigned char i,j;
unsigned char date,da,m=1;

unsigned char SPEED[4];
unsigned int RunSpeed=50;                   //速度
//unsigned char RunState=RIGHT_RUN;  //運(yùn)行狀態(tài)

/***********1602液晶顯示部分子程序****************/
//Port Definitions**********************************************************
sbit LcdRs                = P2^0;
sbit LcdRw                = P2^1;
sbit LcdEn          = P2^2;
sfr  DBPort         = 0x90;                //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.數(shù)據(jù)端口

//內(nèi)部等待函數(shù)**************************************************************************
unsigned char LCD_Wait(void)
{
        LcdRs=0;
        LcdRw=1;        _nop_();
        LcdEn=1;        _nop_();
                                                
        LcdEn=0;
        return DBPort;               
}
//向LCD寫入命令或數(shù)據(jù)************************************************************
#define LCD_COMMAND                        0      // Command
#define LCD_DATA                        1      // Data
#define LCD_CLEAR_SCREEN        0x01      // 清屏
#define LCD_HOMING                  0x02      // 光標(biāo)返回原點(diǎn)
void LCD_Write(bit style, unsigned char input)
{
        LcdEn=0;
        LcdRs=style;
        LcdRw=0;                _nop_();
        DBPort=input;        _nop_();//注意順序
        LcdEn=1;                _nop_();//注意順序
        LcdEn=0;                _nop_();
        LCD_Wait();        
}

//設(shè)置顯示模式************************************************************
#define LCD_SHOW                        0x04    //顯示開(kāi)
#define LCD_HIDE                        0x00    //顯示關(guān)         

#define LCD_CURSOR                        0x02         //顯示光標(biāo)
#define LCD_NO_CURSOR                0x00    //無(wú)光標(biāo)                     

#define LCD_FLASH                        0x01    //光標(biāo)閃動(dòng)
#define LCD_NO_FLASH                0x00    //光標(biāo)不閃動(dòng)

void LCD_SetDisplay(unsigned char DisplayMode)
{
        LCD_Write(LCD_COMMAND, 0x08|DisplayMode);        
}

//設(shè)置輸入模式************************************************************
#define LCD_AC_UP                        0x02
#define LCD_AC_DOWN                        0x00      // default

#define LCD_MOVE                        0x01      // 畫(huà)面可平移
#define LCD_NO_MOVE                        0x00      //default

void LCD_SetInput(unsigned char InputMode)
{
        LCD_Write(LCD_COMMAND, 0x04|InputMode);
}

//初始化LCD************************************************************
void LCD_Initial()
{
        LcdEn=0;
        LCD_Write(LCD_COMMAND,0x38);           //8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣
        LCD_Write(LCD_COMMAND,0x38);
        LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //開(kāi)啟顯示, 無(wú)光標(biāo)
        LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
        LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC遞增, 畫(huà)面不動(dòng)
}

//液晶字符輸入的位置************************
void GotoXY(unsigned char x, unsigned char y)
{
        if(y==0)
                LCD_Write(LCD_COMMAND,0x80|x);
        if(y==1)
                LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}

//將字符輸出到液晶顯示
void Print(unsigned char *str)
{
        while(*str!='\0')
        {
                LCD_Write(LCD_DATA,*str);
                str++;
        }
}


//******************串口初始化函數(shù)****************************//

Initial_com()
{
EA=1;        //開(kāi)總中斷
ES=1;        //允許串口中斷
ET1=1;        //允許定時(shí)器T1的中斷
TMOD=0x20;   //定時(shí)器T1,在方式3中斷產(chǎn)生波特率
PCON=0x00;   //SMOD=0
SCON=0x50;   
TH1=0xfd;    //波特率設(shè)置為9600(晶振12M)
TL1=0xfd;
TR1=1;       //開(kāi)定時(shí)器T1運(yùn)行控制位
}

/***************************************************/
//1ms延時(shí)程序
void clock(unsigned int Delay)
{  unsigned int i;
   for(;Delay>0;Delay--)
    for(i=0;i<124;i++);

}
//速度數(shù)據(jù)轉(zhuǎn)換成液晶顯示字符********
void DoSpeed_to_str()
{
    SPEED[0]=(1000*6/RunSpeed/100)+48;
    SPEED[1]=1000*6/RunSpeed%100/10+48;
    SPEED[2]=1000*6/RunSpeed%10+48;
        SPEED[3]='\0';
}
//LCD顯示數(shù)據(jù)***********************
void LCD_show()
{
  DoSpeed_to_str();        //轉(zhuǎn)換成液晶顯示字符
  GotoXY(10,0);            //液晶字符顯示位置
  Print(SPEED);                           //顯示速度值
  GotoXY(0,0);             //液晶字符顯示位置
  Print("RUN SPEED:");     //顯示"SPEED:"
  GotoXY(0,1);             //液晶字符顯示位置
  Print("RUN STATE:");           //顯示"RUN STATE:"
}

/***************主程序**************/
main()
{
    P0_2=1;                          //開(kāi)機(jī)默認(rèn)狀態(tài)為運(yùn)轉(zhuǎn)
        LCD_Initial();    //液晶初始化
        clock(100);
        GotoXY(10,1);     //液晶字符顯示位置
    Print(" CW");     //顯示"CW"
    Initial_com();          //串口初始化
while(1)
{         
  if(RI)                          
  {
                  
   date=SBUF;                 //串口接收
   if(date!=0x39)
   SBUF=date;

            da=date&0xb1;  //串口控制加速
           if(da==0x31)               
                    {
              if(RunSpeed>=12)
              RunSpeed=RunSpeed-2;
//             P1=0x01;
                     }

            da=date&0xb2;        //串口控制減速
           if(da==0x32)               
                    {
             if(RunSpeed<=100)
             RunSpeed=RunSpeed+2;
//             P1=0x01;
                        }

            da=date&0xb3;  //串口控制正轉(zhuǎn)
           if(da==0x33)
                    {
//             RunState=RIGHT_RUN;        
             P0_0=1;
//             P1=0x01;
                         GotoXY(10,1);                //液晶字符顯示位置
             Print(" CW");                                 //顯示"CW"
                        }

           da=date&0xb4;   //串口控制反轉(zhuǎn)
          if(da==0x34)
                    {
//             RunState=LEFT_RUN;
              P0_0=0;
//              P1=0x01;
                          GotoXY(10,1);               //液晶字符顯示位置
              Print("CCW");                                 //顯示"CCW"
                     }
                        
           da=date&0xb5;   //串口控制停止
          if(da==0x35)
                    {
              P0_2=0;
                     }
           da=date&0xb6;   //串口控制運(yùn)轉(zhuǎn)
          if(da==0x36)
                    {
              P0_2=1;
                     }        
        
   RI=0;  //清除接收中斷標(biāo)志
  }


     if(P3_4==0)//按鍵控制反轉(zhuǎn)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_4==0)
                    {

//              RunState=LEFT_RUN;
              P0_0=0;
//              P1=0x01;
                          GotoXY(10,1);               //液晶字符顯示位置
              Print("CCW");                                 //顯示"CCW"

                          while(P3_4==0);

                     }
        }
      if(P3_5==0)//按鍵控制正轉(zhuǎn)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_5==0)
                    {

//             RunState=RIGHT_RUN;        
             P0_0=1;
//             P1=0x01;
                         GotoXY(10,1);                //液晶字符顯示位置
             Print(" CW");                                 //顯示"CW"

                          while(P3_5==0);

                        }
        }
          if(P3_2==0)//按鍵控制加速
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_2==0)
                    {

              if(RunSpeed>=12)
              RunSpeed=RunSpeed-2;
//              P1=0x01;

                          while(P3_2==0);

                     }
        }
      if(P3_3==0)//按鍵控制減速
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_3==0)
                    {

             if(RunSpeed<=100)
             RunSpeed=RunSpeed+2;
//             P1=0x01;

                          while(P3_3==0);

                        }
        }
/*
      if(P3_6==0)//停止控制(測(cè)試)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P3_6==0)
                    {
                          ++m;
              m=m%2;
                          if(m)
                          P0_2=0;
                          else
                          P0_2=1;
                          while(P3_6==0);

                        }
        }
*/               
               

          if(P0_2)                                 
            {
                clock(RunSpeed);     //延時(shí)(控制脈沖寬度,從而調(diào)節(jié)步進(jìn)電機(jī)運(yùn)行速度)
        P0_1=P0_1^0x01;                 //P0_1取反(產(chǎn)生控制脈沖)
                LCD_show();                         //LCD顯示
                }
          else
           {
            GotoXY(10,0);            //液晶字符顯示位置
        Print("000");                         //顯示"000"
                }           
  }   
}


串口通信控制步進(jìn)電機(jī)(源程序).zip (52.49 KB, 下載次數(shù): 80)
Proteus7.5才能打開(kāi):
步進(jìn)電機(jī)控制仿真.zip (24.14 KB, 下載次數(shù): 68)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:915366 發(fā)表于 2021-6-7 14:09 | 只看該作者
樓主 你的Proteus仿真程序怎么打開(kāi)呀
回復(fù)

使用道具 舉報(bào)

板凳
ID:915366 發(fā)表于 2021-6-7 14:11 | 只看該作者
沒(méi)有工程文件
回復(fù)

使用道具 舉報(bào)

地板
ID:328014 發(fā)表于 2021-6-7 14:45 | 只看該作者

步進(jìn)電機(jī)仿真.DSN 這個(gè)是Proteus7.5版本的工程文件 需要安裝Proteus7.5
回復(fù)

使用道具 舉報(bào)

5#
ID:915366 發(fā)表于 2021-6-7 21:36 | 只看該作者
51hei團(tuán)團(tuán) 發(fā)表于 2021-6-7 14:45
步進(jìn)電機(jī)仿真.DSN 這個(gè)是Proteus7.5版本的工程文件 需要安裝Proteus7.5

已經(jīng)解決了 我用的8.8 可以導(dǎo)入舊版本的原理圖文件 很絲滑
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区在线观看视频 | 欧美日韩在线免费 | 一级黄色片一级黄色片 | 亚洲欧美日韩精品久久亚洲区 | 黄色网址大全在线观看 | 亚洲天堂影院 | 成人亚洲一区 | 久久久精品网站 | 亚洲91精品| 99视频在线 | 国产一区二区三区免费视频 | 亚洲高清一区二区三区 | 亚洲三级在线观看 | 美女视频黄色片 | 亚洲三级在线 | 久久一区二区三区四区五区 | 久久久久久久久久影视 | 九九九国产 | av天天看| 日本在线免费看最新的电影 | 澳门永久av免费网站 | 五月激情久久 | 久久久精品网 | 国产乱码精品一区二区三区中文 | 日本午夜在线视频 | 天天干天天操 | 中文字幕免费视频 | 一本一道久久a久久精品综合 | 国内久久 | 亚洲精品日本 | 成人3d动漫一区二区三区91 | 亚洲国产18| 中文字幕精品一区二区三区精品 | 黄色三级在线播放 | 三级成人在线 | 99精品久久久国产一区二区三 | av夜夜操| 在线免费观看a级片 | 国产精品国色综合久久 | 日韩精品人成在线播放 | 日韩在线免费 |