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

標題: 串口通信_遙控小車(有線) [打印本頁]

作者: 小年添加    時間: 2014-11-23 19:25
標題: 串口通信_遙控小車(有線)
串口通信_遙控小車(有線),,蠻不錯的

帶仿真文件,主機程序 和從機程序

串口通信_遙控小車(有線).zip

146.77 KB, 下載次數: 67, 下載積分: 黑幣 -5


作者: admin    時間: 2014-11-23 22:02
主機程序:
#include "reg51.h"
#include "intrins.h"
#include<stdlib.h>
#define uchar unsigned char
#define uint unsigned int

sbit P10=P1^0; //前進
sbit P11=P1^1; //后退
sbit P12=P1^2; //左轉
sbit P13=P1^3; //右轉

uchar Temp[8]={1,2,3,4,5,6};         //運動編碼。數字型

/********************************************************************
函數功能:定時器及串口初始化函數
入口參數:
出口參數:
********************************************************************/
void Timer_init() {
        TMOD = 0x20;            //定時器1工作方式2(8位自動重裝定時器)
        TH1  = 0xf4;            //波特率2400b/s。
        TL1  = 0xf4;                //定時器初值必須同時裝入TH0和TL0
        PCON = 0;                        //波特率不加倍
        SCON = 0X50;                //串口方式1(10位幀,其中8位數據,異步)。TI和RI清零,允許接收
        TR1  = 1;                        //啟動T1
}

/********************************************************************
函數功能:發送一個字節
入口參數:  dat
出口參數:
********************************************************************/
void Send(uchar dat)
{
  SBUF=dat;
  while(TI==0);
  TI=0;
}

/********************************************************************
函數功能:主函數
入口參數:
出口參數:
********************************************************************/
void main()
{
        Timer_init();
        while(1)
        {
                                                    /*P13  P12  P11  P10*/
          if(P1==0xfe) Send(Temp[0]);           //前進直行           1        1         1          0
          if(P1==0xfd) Send(Temp[1]);           //后退直行           1        1         0          1
          if(P1==0xfa) Send(Temp[2]);           //前進左轉           1        0         1          0
          if(P1==0xf6) Send(Temp[3]);           //前進右轉           0        1         1          0
          if(P1==0xf9) Send(Temp[4]);           //后退左轉           1        0         0          1
          if(P1==0xf5) Send(Temp[5]);           //后退右轉           0        1         0          1
    }
}
作者: admin    時間: 2014-11-23 22:03
從機程序:

#include<reg51.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define MotorData P2                    //步進電機控制接口定義

sbit P10=P1^0;          //前進顯示
sbit P11=P1^1;          //后退顯示
sbit P12=P1^2;          //左轉顯示
sbit P13=P1^3;          //右轉顯示
sbit P24=P2^4;    //
sbit P25=P2^5;    //
sbit P26=P2^6;    //
sbit P27=P2^7;          //

uchar code turn[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};   //旋轉編碼

/********************************************************************
函數功能:延時x毫秒函數
入口參數: x
出口參數:
********************************************************************/
void delay(uchar x)                //設晶體振蕩器的頻率為12MHz
{
   uchar k;
   while(x--)                      //延時大約x毫秒      
   for(k=0;k<125;k++){}
}

/********************************************************************
函數功能:定時器及串口初始化函數
入口參數:
出口參數:
********************************************************************/
void Timer_init() {
        TMOD = 0x20;            //定時器1工作方式2(8位自動重裝定時器);定時器0工作方式1(16位計數器)
        TH1  = 0xf4;            //波特率2400b/s。
        TL1  = 0xf4;                //定時器初值必須同時裝入TH0和TL0
        PCON = 0;                        //波特率不加倍
        SCON = 0X50;                //串口方式1(10位幀,其中8位數據,異步)。TI和RI清零,允許接收
        TR1  = 1;                        //啟動T1
}

/********************************************************************
函數功能:接收一個字節
入口參數:
出口參數: dat
********************************************************************/
uchar Get(void)
{
  uchar dat;
  while(RI==0);
  RI=0;
  dat=SBUF;
  return dat;
}

/********************************************************************
函數功能:順時針轉動(前進)
入口參數:
出口參數:
********************************************************************/
void MotorCW(void)
{
uchar i;
for(i=0;i<8;i++)
  {
   MotorData=turn[i];   
   delay(30);    //轉速調節
  }
}

/********************************************************************
函數功能:逆時針轉動(后退)
入口參數:
出口參數:
********************************************************************/
void MotorCCW(void)
{
uchar i;
for(i=0;i<8;i++)
  {
   MotorData=turn[8-i];
   delay(30);   //轉速調節
  }
}


/********************************************************************
函數功能:主函數
入口參數:
出口參數:
********************************************************************/
void main(void)
{
        uchar Temp;
        Timer_init();
        while(1)
        {
          P1=0xff;
          Temp=Get();
     
         switch(Temp)
         {
          case 1: {P10=0; MotorCW();}         break;   //前進直行
          case 2: {P11=0; MotorCCW();}        break;   //后退直行
          case 3: {P10=0; P12=0; MotorCW();}  break;   //前進左轉
          case 4: {P10=0; P13=0; MotorCW();}  break;   //前進右轉
          case 5: {P11=0; P12=0; MotorCCW();} break;   //后退左轉
          case 6: {P11=0; P13=0; MotorCCW();} break;   //后退右轉
         }
        }                 
}
作者: 騰飛的龍    時間: 2015-8-6 17:36
很好的雙機通信程序謝謝分享!贊。。!
作者: 騰飛的龍    時間: 2015-8-6 17:41
這個程序沒有中斷服務函數不知道好用不好用。
作者: herohuang    時間: 2016-1-18 13:55
不錯學習下,呵呵
作者: 1589777657    時間: 2023-11-9 01:25
有沒有電路圖,控制通道能不能加多一些




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