普通网友 2017-03-23 06:15 采纳率: 100%
浏览 1253
已采纳

求代码,PIC16F84的伺服代码

急需PIC16F84的伺服代码,需要控制4个舵机连接端口,急需PIC16F84的伺服代码,需要控制4个舵机连接端口

  • 写回答

2条回答 默认 最新

  • 普通网友 2017-03-25 07:17
    关注

    之前做过,这是部分代码:
    function varargout = servo_control(varargin)

    % Begin initialization code - DO NOT EDIT
    gui_Singleton = 1;
    gui_State = struct('gui_Name', mfilename, ...
    'gui_Singleton', gui_Singleton, ...
    'gui_OpeningFcn', @servo_control_OpeningFcn, ...
    'gui_OutputFcn', @servo_control_OutputFcn, ...
    'gui_LayoutFcn', [] , ...
    'gui_Callback', []);
    if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
    end

    if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
    else
    gui_mainfcn(gui_State, varargin{:});
    end
    % End initialization code - DO NOT EDIT

    %*-*-FUNCI DE CONDICIONES INICIALES*-*-*
    function servo_control_OpeningFcn(hObject, eventdata, handles, varargin)
    %*-*-INICIO DE CONDICIONES INICIALES*-*-*
    %*-*-CIGO para centrar la interfaz
    movegui(hObject,'center')
    %*-*-FIN de CIGO para centrar la interfaz
    %*-*-Limpiar la pantalla y mostrar mensaje*-*-*-*-
    clc; disp('Programa Ejecutdose')
    %*-*-Configuraci del puerto serial*-*-*-*-*-*-*-*
    handles.SerPIC = serial('COM1');%Seleccionar puerto COM1
    set(handles.SerPIC,'BaudRate',2400);%Velocidad 2400 baudios
    set(handles.SerPIC,'DataBits',8);%8 bits de datos
    set(handles.SerPIC,'Parity','none');%Sin control de paridad
    set(handles.SerPIC,'StopBits',1);%Un bit de parada
    set(handles.SerPIC,'FlowControl','none');%Sin control de flujo
    fopen(handles.SerPIC); %--Abrir el puerto serial
    %********----------***************-----------************----------*
    %*-*-FIN DE CONDICIONES INICIALES*-*-*

    % Choose default command line output for servo_control
    handles.output = hObject;
    % Update handles structure
    guidata(hObject, handles);

    % --- Outputs from this function are returned to the command line.
    function varargout = servo_control_OutputFcn(hObject, eventdata, handles)
    varargout{1} = handles.output;

    %********PROGRAMACIPRINCIPAL*-*-*-*-*-*-*-
    %CONTIENE:
    %CONTROL DE LOS SLIDER QUE ENVIAN DATOS SERIALES
    %AL MICROCONTROLADOR PIC 16F628A

    % ----------- MOVIMIENTO DE LA MU袳CA-PIN 4-------------------
    function motor_uno_Callback(hObject, eventdata, handles)
    set(handles.motor_uno,'Enable','inactive')
    val_s=round(get(hObject,'Value'));
    grados=round((val_s*0.9)-45);
    set(handles.pos_1,'String',grados);
    fprintf(handles.SerPIC,'%c',[char(4) char(val_s)]);
    pause(0.7)
    set(handles.motor_uno,'Enable','on')
    %----------------------------------------------------

    % ----------- MOVIMIENTO DEL CODO-PIN 2-------------------.
    function motor_dos_Callback(hObject, eventdata, handles)
    %Slider que controla el motor del codo
    set(handles.motor_dos,'Enable','inactive')
    maxi=get(hObject,'Max');%Tomar valor mimo
    mini=get(hObject,'Min');%Tomar valor mimo
    val_s=round(get(hObject,'Value'));
    val_s=maxi-val_s+mini;%Inverside movimiento
    grados=round((val_s*0.9)-45);
    set(handles.pos_2,'String',grados);
    fprintf(handles.SerPIC,'%c',[char(2) char(val_s)]);%
    pause(0.7)
    set(handles.motor_dos,'Enable','on')
    %---------------------------------------------------------------

    % ----------- MOVIMIENTO DE GIRO -PIN 3-------------------.
    function motor_tres_Callback(hObject, eventdata, handles)
    %Slider que controla el motor tres (codo)
    set(handles.motor_tres,'Enable','inactive')
    val_s=round(get(hObject,'Value'));
    grados=round((val_s*0.9)-45);
    set(handles.pos_3,'String',grados);
    fprintf(handles.SerPIC,'%c',[char(3) char(val_s)]);%
    pause(0.7)
    set(handles.motor_tres,'Enable','on')
    %------------------------------------------------------------------

    % ----------- MOVIMIENTO DE LA BASE-PIN 1-------------------
    function motor_cuatro_Callback(hObject, eventdata, handles)
    set(handles.motor_cuatro,'Enable','inactive')
    maxi=get(hObject,'Max');%Tomar valor mimo
    mini=get(hObject,'Min');%Tomar valor mimo
    val_s=round(get(hObject,'Value'));
    val_s=maxi-val_s+mini;%Inverside movimiento
    grados=round((val_s*0.9)-45);%Conversia grados
    set(handles.pos_4,'String',grados);
    fprintf(handles.SerPIC,'%c',[char(1) char(val_s)]);%
    pause(0.7)
    set(handles.motor_cuatro,'Enable','on')
    %------------------------------------------------------------------

    % --- Executes on slider movement.
    function motor_cinco_Callback(hObject, eventdata, handles)
    %Slider que controla el motor cinco (pinza)
    set(handles.motor_cinco,'Enable','inactive')
    val_s=round(get(hObject,'Value'));
    set(handles.pos_5,'String',val_s);
    fprintf(handles.SerPIC,'%c',[char(5) char(val_s)]);%
    pause(0.7)
    set(handles.motor_cinco,'Enable','on')
    %-------------------------------------

    % --- Executes during object deletion, before destroying properties.
    function figure1_DeleteFcn(hObject, eventdata, handles)
    %*-*-Cierra el puerto serial al cerrar la interfaz grica*-*-*-
    clc
    try
    fclose(handles.SerPIC) %--CIERRA EL PUERTO COM
    delete(handles.SerPIC)

    clear handles.SerPIC
    disp('Puerto Serial Cerrado')
    catch
    disp('Error al cerrar el puerto serial')
    end

    还有设计图
    图片说明
    还有一些相关的资料可以联系我

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64
  • ¥15 iOS 自定义输入法-第三方输入法
  • ¥15 很想要一个很好的答案或提示
  • ¥15 扫描项目中发现AndroidOS.Agent、Android/SmsThief.LI!tr
  • ¥15 怀疑手机被监控,请问怎么解决和防止
  • ¥15 Qt下使用tcp获取数据的详细操作