普通网友 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 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?