├── 21路舵机控制板Robot_PCB_STC15W4K48S4 ├── HexapodRobot_STC15W4K48S4.PcbDoc ├── HexapodRobot_STC15W4K48S4.PcbDoc.htm ├── HexapodRobot_STC15W4K48S4.PcbLib ├── HexapodRobot_STC15W4K48S4.PrjPcb ├── HexapodRobot_STC15W4K48S4.PrjPcbStructure ├── HexapodRobot_STC15W4K48S4.SchDoc ├── HexapodRobot_STC15W4K48S4.SchLib ├── HexapodRobot_STC15W4K48S4.pdf ├── PCB Logo Creator │ ├── Converter.PAS │ ├── Converter.dfm │ ├── DXlogo 镜像.bmp │ ├── DXlogo.bmp │ ├── HQ.bmp │ ├── LayerComboBox.pas │ ├── PCBLogoCreator.PRJSCR │ ├── QQ截图20171004034125.bmp │ ├── Rabot.bmp │ ├── __Previews │ │ ├── Converter.PASPreview │ │ └── LayerComboBox.pasPreview │ ├── a1.bmp │ ├── altiumlogo.bmp │ ├── 标识.bmp │ └── 标识.jpg └── Readme.txt ├── 74HC573中文手册.pdf ├── HexapodRobot_Code_STC15 ├── ActionArr.LST ├── ActionArr.OBJ ├── ActionArr.__i ├── ActionArr.h ├── IIC.LST ├── IIC.OBJ ├── IIC.__i ├── IIC.c ├── IIC.h ├── MPU6050.LST ├── MPU6050.OBJ ├── MPU6050.__i ├── MPU6050.c ├── MPU6050.h ├── Robot ├── Robot.LST ├── Robot.M51 ├── Robot.OBJ ├── Robot.__i ├── Robot.build_log.htm ├── Robot.c ├── Robot.hex ├── Robot.lnp ├── Robot.uvgui.T6Ti-X7 ├── Robot.uvopt ├── Robot.uvproj ├── Target 1.BAT ├── XFS5152V2.LST ├── XFS5152V2.OBJ ├── XFS5152V2.__i ├── XFS5152V2.c ├── XFS5152V2.h ├── action.LST ├── action.OBJ ├── action.__i ├── action.c ├── action.h ├── adc.LST ├── adc.OBJ ├── adc.__i ├── adc.c ├── adc.h ├── config.h ├── delay.LST ├── delay.OBJ ├── delay.__i ├── delay.c ├── delay.h ├── oled.LST ├── oled.OBJ ├── oled.__i ├── oled.c ├── oled.h ├── pwm.LST ├── pwm.OBJ ├── pwm.__i ├── pwm.c ├── pwm.h ├── stc15w.h ├── timer.LST ├── timer.OBJ ├── timer.__i ├── timer.c ├── timer.h ├── uart.LST ├── uart.OBJ ├── uart.__i ├── uart.c └── uart.h ├── Image ├── HexapodRobot.jpg ├── HexapodRobot_mini.jpg ├── Robot_PCB_STC15W4K48S43D.jpg └── Robot_PCB_STC15W4K48S4_3D.jpg ├── README.md ├── Robot.hex └── 下载程序的勾选项.jpg /21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.PcbDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.PcbDoc -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.PcbDoc.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.PcbDoc.htm -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.PcbLib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.PcbLib -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.PrjPcbStructure: -------------------------------------------------------------------------------- 1 | Record=TopLevelDocument|FileName=HexapodRobot_STC15W4K48S4.SchDoc 2 | -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.SchDoc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.SchDoc -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.SchLib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.SchLib -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/HexapodRobot_STC15W4K48S4.pdf -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/Converter.PAS: -------------------------------------------------------------------------------- 1 | {..............................................................................} 2 | { Summary } 3 | { Converts a monochrome image as a PCB Logo into a series of thin } 4 | { PCB tracks that can be placed on a PCB document as a logo. } 5 | { } 6 | { Copyright (c) 2008 by Altium Limited } 7 | { } 8 | { Version 1.5 } 9 | { } 10 | { Changes For Version 1.5 } 11 | { - Fix off by one errors accessing Canvas.Pixels } 12 | { - Make more tolerant of non-monochrome images, now tracks are created at } 13 | { the boundary of white and non-white pixels } 14 | { - Use user customized layer names } 15 | {..............................................................................} 16 | 17 | Var 18 | gvBoard : IPCB_Board; 19 | 20 | {......................................................................................................................} 21 | Procedure RunConverterScript; 22 | Begin 23 | ConverterForm.ShowModal; 24 | End; 25 | {......................................................................................................................} 26 | 27 | {......................................................................................................................} 28 | Procedure PlaceATrack(ABoard : IPCB_Board; X1,Y1,X2,Y2 : TCoord; ALayer : TLayer, AWidth : Float); 29 | Var 30 | PCBTrack : IPCB_Track; 31 | Sheet : IPCB_Sheet; 32 | OffSet : TCoord; 33 | Begin 34 | // obtain the coordinates of the sheet so can place logo within the board 35 | Sheet := ABoard.PCBSheet; 36 | OffSet := MilsToCoord(100); 37 | 38 | // place a new track on the blank PCB 39 | PCBTrack := PCBServer.PCBObjectFactory(eTrackObject, eNoDimension, eCreate_Default); 40 | PCBTrack.Width := Round(MilsToCoord(1) * AWidth); 41 | 42 | PCBTrack.X1 := Sheet.SheetX + MilsToCoord(X1) + Offset; 43 | PCBTrack.Y1 := Sheet.SheetY + MilsToCoord(Y1) + Offset; 44 | PCBTrack.X2 := Sheet.SheetX + MilsToCoord(X2) + Offset; 45 | PCBTrack.Y2 := Sheet.SheetY + MilsToCoord(Y2) + Offset; 46 | PCBTrack.Layer := ALayer; 47 | 48 | ABoard.AddPCBObject(PCBTrack); 49 | End; 50 | {......................................................................................................................} 51 | 52 | {......................................................................................................................} 53 | Procedure ScalingFactorChange(Dummy : TObject); 54 | Begin 55 | ConverterForm.lImageSize.Caption := FloatToStr((ConverterForm.Image1.Picture.Width + 1) * ConverterForm.eScalingFactor.Text) + ' x ' + 56 | FloatToStr((ConverterForm.Image1.Picture.Height + 1) * ConverterForm.eScalingFactor.Text) + ' mils'; 57 | End; 58 | {......................................................................................................................} 59 | 60 | {......................................................................................................................} 61 | Procedure TConverterForm.eScalingFactorChange(Sender: TObject); 62 | Begin 63 | ScalingFactorChange(Nil); 64 | End; 65 | {......................................................................................................................} 66 | 67 | {......................................................................................................................} 68 | Procedure TConverterForm.loadbuttonClick(Sender: TObject); 69 | Var 70 | I, J : Integer; 71 | Begin 72 | If OpenPictureDialog1.Execute then 73 | Begin 74 | XPProgressBar1.Position := 0; 75 | XStatusBar1.SimpleText := ' Loading...'; 76 | XStatusBar1.Update; 77 | 78 | // loading a monochrome bitmap only 79 | Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); 80 | 81 | // Check if image is monochrome, otherwise prompt a warning 82 | If Image1.Picture.Bitmap.PixelFormat <> pf1bit Then 83 | Begin 84 | For J := 0 to Image1.Picture.Height - 1 Do 85 | For I := 0 to Image1.Picture.Height - 1 Do 86 | Begin 87 | If Image1.Canvas.Pixels[I,J] <> clWhite Then 88 | Image1.Canvas.Pixels[I,J] := clBlack; 89 | End; 90 | End; 91 | 92 | ScalingFactorChange(Nil); 93 | 94 | convertbutton.Enabled := True; 95 | LoadButton.Enabled := False; 96 | XStatusBar1.SimpleText := ' Ready...'; 97 | XStatusBar1.Update; 98 | End; 99 | End; 100 | {......................................................................................................................} 101 | 102 | {......................................................................................................................} 103 | procedure TConverterForm.ConverterFormCreate(Sender: TObject); 104 | begin 105 | // Create a standalone blank PCB document and add the new logo to it 106 | // from the PCBLogoContainer d.s. 107 | CreateNewDocumentFromDocumentKind('PCB'); 108 | 109 | // GetCurrentPCBBoard returns a IPCB_Board type. 110 | gvBoard := PCBServer.GetCurrentPCBBoard; 111 | 112 | If gvBoard = Nil Then 113 | Begin 114 | ShowWarning('A PCB document is not created properly.'); 115 | ShowModal := mrError; 116 | End 117 | Else 118 | SetupComboBoxFromLayer(ComboBoxLayers, gvBoard); 119 | end; 120 | {......................................................................................................................} 121 | 122 | {......................................................................................................................} 123 | Procedure TConverterForm.convertbuttonClick(Sender: TObject); 124 | Var 125 | x, y, x1, FlipY, FlipX : Integer; 126 | PixelColor : TColor; 127 | Start : Boolean; 128 | //PCBBoard : IPCB_Board; 129 | PCBLayer : TLayer; 130 | TrackWidth : Integer; 131 | Begin 132 | Screen.Cursor := crHourGlass; 133 | XPProgressBar1.Max := Image1.Picture.Height; 134 | PCBLayer := GetLayerFromComboBox(ComboBoxLayers, gvBoard); 135 | TrackWidth := StrToFloat(eScalingFactor.Text); 136 | 137 | // ensure the layer selected is displayed in the PCB workspace 138 | gvBoard.LayerIsDisplayed[PCBLayer] := True; 139 | 140 | For Y := 0 to Image1.Picture.Height - 1 Do 141 | Begin 142 | XPProgressBar1.Position := Y; 143 | XPProgressBar1.Update; 144 | 145 | XStatusBar1.SimpleText := ' Converting...'; 146 | XStatusBar1.Update; 147 | 148 | If (cbMirrorY.Checked) Then 149 | FlipY := Y 150 | Else 151 | FlipY := Abs(Y - Image1.Picture.Height - 1); 152 | 153 | FlipY := FlipY * StrToFloat(eScalingFactor.Text); 154 | 155 | // Denotes the start of a line on a row of an image 156 | Start := False; 157 | 158 | For X := 0 To Image1.Picture.Width Do 159 | Begin 160 | If (cbNegative.Checked) Then 161 | PixelColor := clBlack 162 | Else 163 | PixelColor := clWhite; 164 | 165 | If X < Image1.Picture.Width Then 166 | PixelColor := Image1.Canvas.Pixels[x,y]; 167 | 168 | If cbMirrorX.Checked Then 169 | FlipX := abs(X - Image1.Picture.Width) 170 | Else 171 | FlipX := X; 172 | 173 | FlipX := FlipX * StrToFloat(eScalingFactor.Text); 174 | 175 | If (cbNegative.Checked) Then 176 | Begin 177 | Case PixelColor Of 178 | clWhite : 179 | If Not (Start) Then 180 | Begin 181 | x1 := FlipX; 182 | Start := True; 183 | End; 184 | 185 | Else 186 | Begin 187 | If (Start) Then 188 | PlaceATrack(gvBoard, X1,FlipY,FlipX,FlipY, PCBLayer, TrackWidth); 189 | 190 | Start := False; 191 | End; 192 | End; 193 | End 194 | Else 195 | Begin 196 | Case PixelColor Of 197 | clWhite: 198 | Begin 199 | If (Start) Then 200 | PlaceATrack(gvBoard, X1,FlipY,FlipX,FlipY, PCBLayer, TrackWidth); 201 | Start := False; 202 | End; 203 | 204 | Else 205 | If Not (Start) Then 206 | Begin 207 | x1 := FlipX; 208 | Start := True; 209 | End; 210 | 211 | End; 212 | End; 213 | End; 214 | End; 215 | 216 | Screen.Cursor := crArrow; 217 | XStatusBar1.SimpleText := ' Done...'; 218 | XStatusBar1.Update; 219 | 220 | // toggle buttons 221 | ConvertButton.Enabled := False; 222 | LoadButton.Enabled := True; 223 | 224 | // clear out progress bar 225 | XPProgressBar1.Position := 0; 226 | XPProgressBar1.Update; 227 | 228 | //clear out image 229 | Image1.Picture.Bitmap := nil; 230 | 231 | Client.SendMessage('PCB:Zoom', 'Action=All' , 255, Client.CurrentView); 232 | End; 233 | {......................................................................................................................} 234 | 235 | {......................................................................................................................} 236 | Procedure TConverterForm.exitbuttonClick(Sender: TObject); 237 | Begin 238 | Close; 239 | End; 240 | {......................................................................................................................} 241 | 242 | -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/Converter.dfm: -------------------------------------------------------------------------------- 1 | object ConverterForm: TConverterForm 2 | Left = 18 3 | Top = 9 4 | BorderStyle = bsDialog 5 | Caption = 'PCB Logo Creator' 6 | ClientHeight = 236 7 | ClientWidth = 520 8 | Color = clBtnFace 9 | Font.Charset = DEFAULT_CHARSET 10 | Font.Color = clWindowText 11 | Font.Height = -11 12 | Font.Name = 'MS Sans Serif' 13 | Font.Style = [] 14 | OldCreateOrder = False 15 | Position = poScreenCenter 16 | OnCreate = ConverterFormCreate 17 | DesignSize = ( 18 | 520 19 | 236) 20 | PixelsPerInch = 96 21 | TextHeight = 13 22 | object Image1: TImage 23 | Left = 8 24 | Top = 8 25 | Width = 200 26 | Height = 200 27 | Center = True 28 | Proportional = True 29 | Stretch = True 30 | end 31 | object XStatusBar1: TXStatusBar 32 | Left = 0 33 | Top = 211 34 | Width = 520 35 | Height = 25 36 | Enabled = False 37 | Panels = <> 38 | ParentShowHint = False 39 | ShowHint = False 40 | SimplePanel = True 41 | SimpleText = ' Ready...' 42 | SizeGrip = False 43 | end 44 | object XPProgressBar1: TXPProgressBar 45 | Left = 76 46 | Top = 217 47 | Width = 435 48 | Height = 15 49 | Position = 0 50 | Smooth = True 51 | Step = 0 52 | Anchors = [akLeft, akTop, akRight] 53 | TabOrder = 2 54 | end 55 | object GroupBox1: TGroupBox 56 | Left = 215 57 | Top = 5 58 | Width = 209 59 | Height = 201 60 | Caption = ' Converter Options ' 61 | TabOrder = 1 62 | object lImageSize: TLabel 63 | Left = 72 64 | Top = 72 65 | Width = 46 66 | Height = 13 67 | Caption = ' 0 x 0 mils' 68 | end 69 | object ImageSizeLabel: TLabel 70 | Left = 13 71 | Top = 72 72 | Width = 59 73 | Height = 13 74 | Caption = 'Image size : ' 75 | end 76 | object lScalingFactor: TLabel 77 | Left = 13 78 | Top = 101 79 | Width = 77 80 | Height = 13 81 | Caption = 'Scaling Factor : ' 82 | end 83 | object Label2: TLabel 84 | Left = 13 85 | Top = 21 86 | Width = 66 87 | Height = 13 88 | Caption = 'Board Layer : ' 89 | end 90 | object Label1: TLabel 91 | Left = 144 92 | Top = 101 93 | Width = 54 94 | Height = 13 95 | Caption = '(mils/pixels)' 96 | end 97 | object cbNegative: TCheckBox 98 | Left = 13 99 | Top = 127 100 | Width = 97 101 | Height = 21 102 | Caption = 'Negative' 103 | TabOrder = 0 104 | end 105 | object cbMirrorX: TCheckBox 106 | Left = 13 107 | Top = 148 108 | Width = 58 109 | Height = 21 110 | Caption = 'Mirror X' 111 | TabOrder = 1 112 | end 113 | object cbMirrorY: TCheckBox 114 | Left = 13 115 | Top = 169 116 | Width = 56 117 | Height = 21 118 | Caption = 'Mirror Y' 119 | TabOrder = 2 120 | end 121 | object UpDown1: TUpDown 122 | Left = 122 123 | Top = 97 124 | Width = 15 125 | Height = 21 126 | Associate = eScalingFactor 127 | Position = 1 128 | TabOrder = 3 129 | end 130 | object eScalingFactor: TEdit 131 | Left = 91 132 | Top = 97 133 | Width = 31 134 | Height = 21 135 | TabOrder = 4 136 | Text = '1' 137 | OnChange = eScalingFactorChange 138 | end 139 | object ComboBoxLayers: TComboBox 140 | Left = 13 141 | Top = 36 142 | Width = 188 143 | Height = 21 144 | Style = csDropDownList 145 | ItemHeight = 13 146 | TabOrder = 5 147 | end 148 | end 149 | object exitbutton: TButton 150 | Left = 432 151 | Top = 66 152 | Width = 75 153 | Height = 25 154 | Anchors = [akTop, akRight] 155 | Cancel = True 156 | Caption = 'Exit' 157 | TabOrder = 3 158 | OnClick = exitbuttonClick 159 | end 160 | object convertbutton: TButton 161 | Left = 432 162 | Top = 38 163 | Width = 75 164 | Height = 25 165 | Anchors = [akTop, akRight] 166 | Caption = 'Convert' 167 | Enabled = False 168 | TabOrder = 4 169 | OnClick = convertbuttonClick 170 | end 171 | object loadbutton: TButton 172 | Left = 432 173 | Top = 10 174 | Width = 75 175 | Height = 25 176 | Anchors = [akTop, akRight] 177 | Caption = 'Load' 178 | TabOrder = 5 179 | OnClick = loadbuttonClick 180 | end 181 | object OpenPictureDialog1: TOpenPictureDialog 182 | Left = 43 183 | Top = 105 184 | end 185 | end 186 | -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/DXlogo 镜像.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/DXlogo 镜像.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/DXlogo.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/DXlogo.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/HQ.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/HQ.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/LayerComboBox.pas: -------------------------------------------------------------------------------- 1 | {......................................................................................................................} 2 | Var gv_ListBoxIndexToLayerArray : TList; 3 | {......................................................................................................................} 4 | 5 | {......................................................................................................................} 6 | Function GetLayerFromComboBox(ComboBox : TComboBox; Board : IPCB_Board) : TLayer; 7 | Begin 8 | Result := eTopLayer; 9 | 10 | If ComboBox.ItemIndex < 0 Then 11 | Exit; 12 | 13 | If ComboBox.ItemIndex >= ComboBox.Items.Count Then 14 | Exit; 15 | 16 | Result := gv_ListBoxIndexToLayerArray.Items(ComboBox.ItemIndex); 17 | End; 18 | {......................................................................................................................} 19 | 20 | {......................................................................................................................} 21 | Procedure SetupComboBoxFromLayer(ComboBox : TComboBox; Board : IPCB_Board); 22 | Var 23 | Layer : TLayer; 24 | LayerObject : IPCB_LayerObject; 25 | Begin 26 | gv_ListBoxIndexToLayerArray := TList.Create; 27 | ComboBox.Items.Clear; 28 | 29 | For Layer := MinLayer To MaxLayer Do 30 | Begin 31 | If Board.LayerIsDisplayed[Layer] Then 32 | Begin 33 | gv_ListBoxIndexToLayerArray.Add(Layer); 34 | 35 | LayerObject := Board.LayerStack.LayerObject(Layer); 36 | ComboBox.Items.Add(LayerObject.Name); 37 | 38 | If Layer = Board.CurrentLayer Then 39 | ComboBox.ItemIndex := ComboBox.Items.Count - 1; 40 | End; 41 | End; 42 | End; 43 | {......................................................................................................................} 44 | 45 | -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/QQ截图20171004034125.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/QQ截图20171004034125.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/Rabot.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/Rabot.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/a1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/a1.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/altiumlogo.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/altiumlogo.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/标识.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/标识.bmp -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/标识.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/21路舵机控制板Robot_PCB_STC15W4K48S4/PCB Logo Creator/标识.jpg -------------------------------------------------------------------------------- /21路舵机控制板Robot_PCB_STC15W4K48S4/Readme.txt: -------------------------------------------------------------------------------- 1 | 此多路舵机控制板由Altium AD17版本绘制 2 | "PCB Logo Creator"文件夹中的"PCBLogoCreator.PRJSCR"文件为AD中图标转换脚本(使用单色位图形式的图片) 3 | 4 | 板上E3电容焊上可以让芯片工作更稳定,但很可能下程序的时候总给主控供电而导致不易完成上电复位。 -------------------------------------------------------------------------------- /74HC573中文手册.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/74HC573中文手册.pdf -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/ActionArr.LST: -------------------------------------------------------------------------------- 1 | C51 COMPILER V9.54 ACTIONARR 05/19/2018 17:21:50 PAGE 1 2 | 3 | 4 | C51 COMPILER V9.54, COMPILATION OF MODULE ACTIONARR 5 | OBJECT MODULE PLACED IN ActionArr.OBJ 6 | COMPILER INVOKED BY: D:\MDK\C51\BIN\C51.EXE ActionArr.c LARGE OPTIMIZE(8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS(2) 7 | 8 | line level source 9 | 10 | 1 #include "action.h" 11 | 2 12 | 3 13 | 4 14 | 5 15 | 6 16 | 7 17 | 18 | 19 | MODULE INFORMATION: STATIC OVERLAYABLE 20 | CODE SIZE = ---- ---- 21 | CONSTANT SIZE = ---- ---- 22 | XDATA SIZE = ---- ---- 23 | PDATA SIZE = ---- ---- 24 | DATA SIZE = ---- ---- 25 | IDATA SIZE = ---- ---- 26 | BIT SIZE = ---- ---- 27 | END OF MODULE INFORMATION. 28 | 29 | 30 | C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) 31 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/ActionArr.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/ActionArr.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/ActionArr.__i: -------------------------------------------------------------------------------- 1 | "ActionArr.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/ActionArr.h: -------------------------------------------------------------------------------- 1 | #ifndef __ActionArr_H 2 | #define __ActionArr_H 3 | 4 | /************************************************************************ 5 | 在这个文件里添加要执行的动作数组 为便于修改,建议动作数组的每行22个数 前21个 6 | 为21路舵机PWM值,最后一个数据表示的是这组数据要执行的时间(ms) 7 | 8 | 格式为 code int 动作数组名[数组长度] = { 数据, 数据, 数据, 数据, 数据, 数据, 数据.......................}; 9 | **************************************************************************/ 10 | 11 | code int forWordArr[66] = 12 | { 13 | 1500, 2000, 2000, 1500, 2000, 2000, 1500, 2000, 2000, 1500, 1000, 1000, 1500, 1000, 1000, 1500, 1000, 1000, 1500, 1000, 1000, 1000, 14 | 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 15 | 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 2300, 1000}; 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/IIC.LST: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/IIC.LST -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/IIC.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/IIC.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/IIC.__i: -------------------------------------------------------------------------------- 1 | "IIC.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/IIC.c: -------------------------------------------------------------------------------- 1 | #include "IIC.h" 2 | #include 3 | /******************************************************************************* 4 | * 函 数 名 : I2C_Delay() 5 | * 函数功能 : 延时 6 | * 输 入 : 无 7 | * 输 出 : 无 8 | *******************************************************************************/ 9 | void I2C_Delay() 10 | { 11 | unsigned char i; 12 | _nop_(); 13 | _nop_(); 14 | _nop_(); 15 | i = 10; 16 | while (--i) 17 | ; 18 | } 19 | /******************************************************************************* 20 | * 函 数 名 : I2C_Start() 21 | * 函数功能 : 起始信号:在I2C_SCL时钟信号在高电平期间I2C_SDA信号产生一个下降沿 22 | * 输 入 : 无 23 | * 输 出 : 无 24 | * 备 注 : 起始之后I2C_SDA和I2C_SCL都为0 25 | *******************************************************************************/ 26 | void I2C_Start() 27 | { 28 | I2C_SDA = 1; //拉高数据线 29 | // I2C_Delay10us(); //延时 30 | I2C_SCL = 1; //拉高时钟线 31 | I2C_Delay(); //延时 32 | I2C_SDA = 0; //产生下降沿 33 | I2C_Delay(); //延时 34 | I2C_SCL = 0; //拉低时钟线 35 | I2C_Delay(); //延时 36 | } 37 | 38 | /******************************************************************************* 39 | * 函 数 名 : I2C_Stop() 40 | * 函数功能 : 终止信号:在I2C_SCL时钟信号高电平期间I2C_SDA信号产生一个上升沿 41 | * 输 入 : 无 42 | * 输 出 : 无 43 | * 备 注 : 结束之后保持I2C_SDA和I2C_SCL都为1;表示总线空闲 44 | *******************************************************************************/ 45 | void I2C_Stop() 46 | { 47 | I2C_SDA = 0; //拉低数据线 48 | // I2C_Delay(); //延时 49 | I2C_SCL = 1; //拉高时钟线 50 | I2C_Delay(); //延时 51 | I2C_SDA = 1; //产生上升沿 52 | I2C_Delay(); //延时 53 | } 54 | 55 | //************************************** 56 | //I2C发送应答信号 57 | //入口参数:ack (0:ACK 1:NAK) 58 | //************************************** 59 | void I2C_SendACK(bit ack) 60 | { 61 | I2C_SDA = ack; //写应答信号 62 | I2C_SCL = 1; //拉高时钟线 63 | I2C_Delay(); //延时 64 | I2C_SCL = 0; //拉低时钟线 65 | I2C_Delay(); //延时 66 | } 67 | 68 | //************************************** 69 | //I2C接收应答信号 70 | //************************************** 71 | bit I2C_RecvACK() 72 | { 73 | I2C_SCL = 1; //拉高时钟线 74 | I2C_Delay(); //延时 75 | CY = I2C_SDA; //读应答信号 76 | I2C_SCL = 0; //拉低时钟线 77 | I2C_Delay(); //延时 78 | return CY; 79 | } 80 | 81 | /******************************************************************************* 82 | * 函 数 名 : I2cSendByte(uchar num) 83 | * 函数功能 : 通过I2C发送一个字节。在I2C_SCL时钟信号高电平期间, 84 | * * 保持发送信号I2C_SDA保持稳定 85 | * 输 入 : num ,ack 86 | * 输 出 : 0或1。发送成功返回1,发送失败返回0 87 | * 备 注 : 发送完一个字节I2C_SCL=0, 需要应答则应答设置为1,否则为0 88 | *******************************************************************************/ 89 | void I2C_SendByte(uchar dat) 90 | { 91 | uchar i; 92 | for (i = 0; i < 8; i++) //8位计数器 93 | { 94 | I2C_SDA = dat >> 7; //送数据口 95 | dat <<= 1; //移出数据的最高位 96 | I2C_SCL = 1; //拉高时钟线 97 | I2C_Delay(); //延时 98 | I2C_SCL = 0; //拉低时钟线 99 | I2C_Delay(); //延时 100 | } 101 | I2C_RecvACK(); 102 | 103 | /*********也可以用下面的代码*******/ 104 | // uchar i; 105 | // for (i=0; i<8; i++) //8位计数器 106 | // { 107 | // dat <<= 1; //移出数据的最高位 108 | // I2C_SDA = CY; //送数据口 109 | // I2C_SCL = 1; //拉高时钟线 110 | // I2C_Delay(); //延时 111 | // I2C_SCL = 0; //拉低时钟线 112 | // I2C_Delay(); //延时 113 | // } 114 | // I2C_RecvACK(); 115 | } 116 | 117 | /******************************************************************************* 118 | * 函 数 名 : I2cReadByte() 119 | * 函数功能 : 使用I2c读取一个字节 120 | * 输 入 : 无 121 | * 输 出 : dat 122 | * 备 注 : 接收完一个字节I2C_SCL=0 123 | *******************************************************************************/ 124 | uchar I2C_ReadByte() 125 | { 126 | uchar i; 127 | uchar dat = 0; 128 | I2C_SDA = 1; //使能内部上拉,准备读取数据 129 | // I2C_Delay(); //延时 130 | for (i = 0; i < 8; i++) //8位计数器 131 | { 132 | dat <<= 1; 133 | I2C_SCL = 1; //拉高时钟线 134 | I2C_Delay(); //延时 135 | dat |= I2C_SDA; //读数据 136 | I2C_SCL = 0; //拉低时钟线 137 | I2C_Delay(); //延时 138 | } 139 | return dat; 140 | } 141 | 142 | //************************************** 143 | //指定地址下写入数据 144 | //************************************** 145 | void WriteI2C(uchar SlaveAddress, uchar REG_Address, uchar REG_data) 146 | { 147 | I2C_Start(); //发送起始型信号 148 | I2C_SendByte(SlaveAddress); //发送设备地址 149 | I2C_SendByte(REG_Address); //发送寄存器地址 150 | I2C_SendByte(REG_data); //发送写入的数据 151 | I2C_Stop(); //终止信号 152 | } 153 | 154 | //************************************** 155 | //获取指定地址下的数据 156 | //************************************** 157 | uchar ReadI2C(uchar SlaveAddress, uchar REG_Address) //获取指定地址下的数据 158 | { 159 | uchar REG_data; 160 | I2C_Start(); //发送起始型信号 161 | I2C_SendByte(SlaveAddress); //发送设备地址 162 | I2C_SendByte(REG_Address); //发送寄存器地址 163 | I2C_Start(); //发送起始型信号 164 | I2C_SendByte(SlaveAddress | 0x01); //发送设备地址 165 | REG_data = I2C_ReadByte(); // 166 | I2C_SendACK(1); //发送应答信号 167 | I2C_Stop(); //终止信号 168 | return REG_data; 169 | } 170 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/IIC.h: -------------------------------------------------------------------------------- 1 | #ifndef __IIC_H 2 | #define __IIC_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | //--在config.h中已定义IIC接口--// 8 | //--定义使用的IO口--// 9 | //sbit I2C_SCL = P3^5; 10 | //sbit I2C_SDA = P3^4; 11 | 12 | //--声明全局变量--// 13 | extern void I2C_Start(); //起始信号 14 | extern void I2C_Stop(); //终止信号 15 | extern void I2C_SendByte(uchar dat); //发送一个字节 16 | extern uchar I2C_ReadByte(); //读取一个字节 17 | extern void I2C_SendACK(bit ack); //发送应答信号 18 | extern bit I2C_RecvACK(); //接收应答信号 19 | extern void WriteI2C(uchar SlaveAddress, uchar REG_Address, uchar REG_data); //指定地址下写入数据 20 | extern uchar ReadI2C(uchar SlaveAddress, uchar REG_Address); //获取指定地址下的数据 21 | 22 | #endif -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/MPU6050.LST: -------------------------------------------------------------------------------- 1 | C51 COMPILER V9.54 MPU6050 04/30/2020 01:44:06 PAGE 1 2 | 3 | 4 | C51 COMPILER V9.54, COMPILATION OF MODULE MPU6050 5 | OBJECT MODULE PLACED IN MPU6050.OBJ 6 | COMPILER INVOKED BY: D:\MDK\C51\BIN\C51.EXE MPU6050.c LARGE OPTIMIZE(8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS(2) 7 | 8 | line level source 9 | 10 | 1 #include "MPU6050.h" 11 | 2 #include "IIC.h" 12 | 3 13 | 4 //**************************************** 14 | 5 // MPU6050内部寄存器设置 15 | 6 //**************************************** 16 | 7 #define SMPRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz) 17 | 8 #define CONFIG 0x1A //低通滤波频率,典型值:0x06(5Hz) 18 | 9 #define GYRO_CONFIG 0x1B //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) 19 | 10 #define ACCEL_CONFIG 0x1C //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) 20 | 11 #define ACCEL_XOUT_H 0x3B //加速度计X轴检测值寄存器 21 | 12 #define ACCEL_XOUT_L 0x3C 22 | 13 #define ACCEL_YOUT_H 0x3D //加速度计y轴检测值寄存器 23 | 14 #define ACCEL_YOUT_L 0x3E 24 | 15 #define ACCEL_ZOUT_H 0x3F //加速度计z轴检测值寄存器 25 | 16 #define ACCEL_ZOUT_L 0x40 26 | 17 #define TEMP_OUT_H 0x41 //温度检测值寄存器 27 | 18 #define TEMP_OUT_L 0x42 28 | 19 #define GYRO_XOUT_H 0x43 //陀螺仪X轴检测值寄存器 29 | 20 #define GYRO_XOUT_L 0x44 30 | 21 #define GYRO_YOUT_H 0x45 //陀螺仪y轴检测值寄存器 31 | 22 #define GYRO_YOUT_L 0x46 32 | 23 #define GYRO_ZOUT_H 0x47 //陀螺仪z轴检测值寄存器 33 | 24 #define GYRO_ZOUT_L 0x48 34 | 25 #define PWR_MGMT_1 0x6B //电源管理1寄存器 35 | 26 #define WHO_AM_I 0x75 //MPU6050的设备地址寄存器 36 | 27 37 | 28 #define MPU6050Address 0xD0 //默认MPU6050的设备地址 38 | 29 39 | 30 //加速度各分量的值 40 | 31 static int AccelXValue; 41 | 32 static int AccelYValue; 42 | 33 static int AccelZValue; 43 | 34 //角度各分量的值 44 | 35 static int GyroXValue; 45 | 36 static int GyroYValue; 46 | 37 static int GyroZValue; 47 | 38 //温度值 48 | 39 static int TempValue; 49 | 40 50 | 41 51 | 42 void InitMPU6050()//MPU6050初始化 52 | 43 { 53 | 44 1 WriteI2C(MPU6050Address,PWR_MGMT_1, 0x00); //解除休眠状态 54 | 45 1 WriteI2C(MPU6050Address,SMPRT_DIV, 0x07); 55 | 46 1 WriteI2C(MPU6050Address,CONFIG, 0x06); 56 | 47 1 WriteI2C(MPU6050Address,GYRO_CONFIG, 0x18); 57 | 48 1 WriteI2C(MPU6050Address,ACCEL_CONFIG, 0x01); 58 | 49 1 } 59 | 50 60 | 51 int GetData(uchar REG_Address)//获取指定地址下的数据 61 | 52 { 62 | 53 1 char ValueH,ValueL; 63 | 54 1 ValueH = ReadI2C(MPU6050Address,REG_Address);//获取高八位地址 64 | 55 1 ValueL = ReadI2C(MPU6050Address,REG_Address+1);//获取低八位数据 65 | C51 COMPILER V9.54 MPU6050 04/30/2020 01:44:06 PAGE 2 66 | 67 | 56 1 return (ValueH<<8)+ValueL; //返回得到的值 68 | 57 1 } 69 | 58 70 | 59 void UpDataAll() //更新所有数据 71 | 60 { 72 | 61 1 AccelXValue = GetData(ACCEL_XOUT_H); 73 | 62 1 AccelYValue = GetData(ACCEL_YOUT_H); 74 | 63 1 AccelZValue = GetData(ACCEL_ZOUT_H); 75 | 64 1 76 | 65 1 GyroXValue = GetData(GYRO_XOUT_H); 77 | 66 1 GyroYValue = GetData(GYRO_YOUT_H); 78 | 67 1 GyroZValue = GetData(GYRO_ZOUT_H); 79 | 68 1 } 80 | 81 | 82 | MODULE INFORMATION: STATIC OVERLAYABLE 83 | CODE SIZE = 175 ---- 84 | CONSTANT SIZE = ---- ---- 85 | XDATA SIZE = 14 2 86 | PDATA SIZE = ---- ---- 87 | DATA SIZE = ---- ---- 88 | IDATA SIZE = ---- ---- 89 | BIT SIZE = ---- ---- 90 | END OF MODULE INFORMATION. 91 | 92 | 93 | C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) 94 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/MPU6050.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/MPU6050.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/MPU6050.__i: -------------------------------------------------------------------------------- 1 | "MPU6050.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/MPU6050.c: -------------------------------------------------------------------------------- 1 | #include "MPU6050.h" 2 | #include "IIC.h" 3 | 4 | //**************************************** 5 | // MPU6050内部寄存器设置 6 | //**************************************** 7 | #define SMPRT_DIV 0x19 //陀螺仪采样率,典型值:0x07(125Hz) 8 | #define CONFIG 0x1A //低通滤波频率,典型值:0x06(5Hz) 9 | #define GYRO_CONFIG 0x1B //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s) 10 | #define ACCEL_CONFIG 0x1C //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz) 11 | #define ACCEL_XOUT_H 0x3B //加速度计X轴检测值寄存器 12 | #define ACCEL_XOUT_L 0x3C 13 | #define ACCEL_YOUT_H 0x3D //加速度计y轴检测值寄存器 14 | #define ACCEL_YOUT_L 0x3E 15 | #define ACCEL_ZOUT_H 0x3F //加速度计z轴检测值寄存器 16 | #define ACCEL_ZOUT_L 0x40 17 | #define TEMP_OUT_H 0x41 //温度检测值寄存器 18 | #define TEMP_OUT_L 0x42 19 | #define GYRO_XOUT_H 0x43 //陀螺仪X轴检测值寄存器 20 | #define GYRO_XOUT_L 0x44 21 | #define GYRO_YOUT_H 0x45 //陀螺仪y轴检测值寄存器 22 | #define GYRO_YOUT_L 0x46 23 | #define GYRO_ZOUT_H 0x47 //陀螺仪z轴检测值寄存器 24 | #define GYRO_ZOUT_L 0x48 25 | #define PWR_MGMT_1 0x6B //电源管理1寄存器 26 | #define WHO_AM_I 0x75 //MPU6050的设备地址寄存器 27 | 28 | #define MPU6050Address 0xD0 //默认MPU6050的设备地址 29 | 30 | //加速度各分量的值 31 | static int AccelXValue; 32 | static int AccelYValue; 33 | static int AccelZValue; 34 | //角度各分量的值 35 | static int GyroXValue; 36 | static int GyroYValue; 37 | static int GyroZValue; 38 | //温度值 39 | static int TempValue; 40 | 41 | void InitMPU6050() //MPU6050初始化 42 | { 43 | WriteI2C(MPU6050Address, PWR_MGMT_1, 0x00); //解除休眠状态 44 | WriteI2C(MPU6050Address, SMPRT_DIV, 0x07); 45 | WriteI2C(MPU6050Address, CONFIG, 0x06); 46 | WriteI2C(MPU6050Address, GYRO_CONFIG, 0x18); 47 | WriteI2C(MPU6050Address, ACCEL_CONFIG, 0x01); 48 | } 49 | 50 | int GetData(uchar REG_Address) //获取指定地址下的数据 51 | { 52 | char ValueH, ValueL; 53 | ValueH = ReadI2C(MPU6050Address, REG_Address); //获取高八位地址 54 | ValueL = ReadI2C(MPU6050Address, REG_Address + 1); //获取低八位数据 55 | return (ValueH << 8) + ValueL; //返回得到的值 56 | } 57 | 58 | void UpDataAll() //更新所有数据 59 | { 60 | AccelXValue = GetData(ACCEL_XOUT_H); 61 | AccelYValue = GetData(ACCEL_YOUT_H); 62 | AccelZValue = GetData(ACCEL_ZOUT_H); 63 | 64 | GyroXValue = GetData(GYRO_XOUT_H); 65 | GyroYValue = GetData(GYRO_YOUT_H); 66 | GyroZValue = GetData(GYRO_ZOUT_H); 67 | } -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/MPU6050.h: -------------------------------------------------------------------------------- 1 | #ifndef __MPU6050_H 2 | #define __MPU6050_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | //加速度各分量的值 8 | static int AccelXValue; 9 | static int AccelYValue; 10 | static int AccelZValue; 11 | //角度各分量的值 12 | static int GyroXValue; 13 | static int GyroYValue; 14 | static int GyroZValue; 15 | //温度值 16 | static int TempValue; 17 | 18 | extern void InitMPU6050(); //MPU6050初始化 19 | extern int GetData(uchar REG_Address); //获取指定地址下的数据 20 | extern void UpDataAll(); //更新所有数据 21 | 22 | #endif -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/Robot -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.LST: -------------------------------------------------------------------------------- 1 | C51 COMPILER V9.54 ROBOT 04/30/2020 01:44:05 PAGE 1 2 | 3 | 4 | C51 COMPILER V9.54, COMPILATION OF MODULE ROBOT 5 | OBJECT MODULE PLACED IN Robot.OBJ 6 | COMPILER INVOKED BY: D:\MDK\C51\BIN\C51.EXE Robot.c LARGE OPTIMIZE(8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS(2) 7 | 8 | line level source 9 | 10 | 1 /*************************************************************** 11 | 2 本六足机器人程序使用的是STC15W4K48S4单片机(与本单片机结构相同的 12 | 3 均可以使用)默认22.1184MHz的晶振。程序稳定产生21路PWM(均为模拟PWM) 13 | 4 产生的动作应与舵机的初始安装状态有关 14 | 5 ***************************************************************/ 15 | 6 16 | 7 //P0对应PWM0~7 P2对应PWM9~16 P1^0和P1^1分别对应PWM8 PWM17 17 | 8 //使用串口1进行连接串口蓝牙设备 18 | 9 //使用P1.6与P1.7进行AD采集 19 | 10 20 | 11 #include "stc15w.h" 21 | 12 #include "config.h" 22 | 13 #include "timer.h" 23 | 14 #include "uart.h" 24 | 15 #include "action.h" 25 | 16 #include "delay.h" 26 | 17 #include "MPU6050.h" 27 | 18 #include "oled.h" 28 | 19 #include "pwm.h" 29 | 20 #include "XFS5152V2.h" 30 | 21 #include "ActionArr.h" 31 | 22 32 | 23 /************************************************************************ 33 | 24 函数名称: IOInit(void) 初始化IO口 34 | 25 功能描述: 设置各个IO口输出模式为:传统模式 准双向口 35 | 26 入口参数: none 36 | 27 返 回 值: none 37 | 28 其他说明: 不初始化会输出不了PWM,P30 P31如果清零 串口将不能用 38 | 29 **************************************************************************/ 39 | 30 void IOInit(void) 40 | 31 { 41 | 32 1 //不设置会输出不了PWM 42 | 33 1 P0M0 = 0x00; 43 | 34 1 P0M1 = 0x00; 44 | 35 1 P1M0 = 0x00; 45 | 36 1 P1M1 = 0x00; 46 | 37 1 P2M0 = 0x00; 47 | 38 1 P2M1 = 0x00; 48 | 39 1 P3M0 = 0x00; 49 | 40 1 P3M1 = 0x00; 50 | 41 1 P4M0 = 0x00; 51 | 42 1 P4M1 = 0x00; 52 | 43 1 P5M0 = 0x00; 53 | 44 1 P5M1 = 0x00; 54 | 45 1 P6M0 = 0x00; 55 | 46 1 P6M1 = 0x00; 56 | 47 1 P7M0 = 0x00; 57 | 48 1 P7M1 = 0x00; 58 | 49 1 59 | 50 1 //以下最好清零 60 | 51 1 P0 = 0x00; 61 | 52 1 P1 = 0x00; 62 | 53 1 P2 = 0x00; 63 | 54 1 P3 = 0x03; //P30 P31如果清零 串口将不能用 64 | 55 1 P4 = 0x00; 65 | C51 COMPILER V9.54 ROBOT 04/30/2020 01:44:05 PAGE 2 66 | 67 | 56 1 P5 = 0x00; 68 | 57 1 } 69 | 58 70 | 59 71 | 60 /************************************************************************ 72 | 61 函数名称: ExecuteOrder(unsigned char order) 73 | 62 功能描述: 计算每次pwm更新需要多大的增量(用于减速控制) 74 | 63 入口参数: order命令代号 75 | 64 返 回 值: none 76 | 65 其他说明: 执行动画指令 order范围0x00~0x40 总共能容纳65条指令(0x0D因为接受帧 77 | 66 处理的问题,暂时不能用) 78 | 67 **************************************************************************/ 79 | 68 void ExecuteOrder(unsigned char order) 80 | 69 { 81 | 70 1 //在此补充指令执行代码 82 | 71 1 } 83 | *** WARNING C280 IN LINE 68 OF Robot.c: 'order': unreferenced local variable 84 | 72 85 | 73 /************************************************************************ 86 | 74 函数名称: CheckAndDealY( void ) 87 | 75 功能描述: 检查并处理语音指令 88 | 76 入口参数: none 89 | 77 返 回 值: none 90 | 78 其他说明: 开头‘YS’为语音设置指令 开头‘YT’为语音转发指令 91 | 79 **************************************************************************/ 92 | 80 char CheckAndDealY( void ) 93 | 81 { 94 | 82 1 if( usart1ReceiveSuccess2 )//如果语音缓冲区表明接收到完成指令帧 95 | 83 1 { 96 | 84 2 if( USART1_RX_BUF2[0] == 'Y' )//语音命令帧头标志 97 | 85 2 if( USART1_RX_BUF2[1] == 'S' ) 98 | 86 2 YSOrder( USART1_RX_BUF2[2] );//语音设置命令 99 | 87 2 else if( USART1_RX_BUF2[1] == 'T' ) //语音转发 100 | 88 2 XFS_FrameInfo( &USART1_RX_BUF2[2] ); 101 | 89 2 102 | 90 2 usart1ReceiveSuccess2 = 0;//标志位清零 103 | 91 2 return 1; 104 | 92 2 } 105 | 93 1 else 106 | 94 1 return 0; 107 | 95 1 } 108 | 96 109 | 97 110 | 98 /************************************************************************ 111 | 99 函数名称: CheckAndDealActionDebug( void ) 112 | 100 功能描述: 检查并处理动作及调试指令 113 | 101 入口参数: none 114 | 102 返 回 值: none 115 | 103 其他说明: 开头‘D’为Debug模式 其余为动作指令 116 | 104 **************************************************************************/ 117 | 105 char CheckAndDealActionDebug( void ) 118 | 106 { 119 | 107 1 if( usart1ReceiveSuccess )//是否已接收完整帧 120 | 108 1 { 121 | 109 2 if( USART1_RX_BUF[0] == 'D' )//数组调试模式帧头标志 122 | 110 2 ReceiveDataConvertToPwmValue();//数组调试模式 一次调试执行1个动作 123 | 111 2 124 | 112 2 while( USART1_RX_BUF[0] && USART1_RX_BUF[0] < 0x41 )//添加循环的目的是只要发送一次指令就可以不停执 125 | -行一个动作 直到下一条指令 126 | 113 2 ExecuteOrder(USART1_RX_BUF[0]);//执行动作指令 需要接收到停止命令的时候,当前动作才可以被打断 127 | 114 2 128 | 115 2 usart1ReceiveSuccess = 0;//标志位清零 129 | C51 COMPILER V9.54 ROBOT 04/30/2020 01:44:05 PAGE 3 130 | 131 | 116 2 return 1; 132 | 117 2 } 133 | 118 1 else 134 | 119 1 return 0; 135 | 120 1 } 136 | 121 137 | 122 138 | 123 139 | 124 void main() 140 | 125 { 141 | 126 1 uchar x = 9; 142 | 127 1 IOInit();//初始化IO口 必须 143 | 128 1 144 | 129 1 BEEP = 1; 145 | 130 1 Uart1Init();//串口1初始化(默认115200) 波特率的值和系统晶振频率可以在config.h中设置 146 | 131 1 Uart2Init();//串口2初始化(默认115200) 波特率的值和系统晶振频率可以在config.h中设置 147 | 132 1 // while(1){ 148 | 133 1 // Uart1SendString("串口1成功发送!\r\n");//串口1发送数据 149 | 134 1 // Delay200ms(); 150 | 135 1 // } 151 | 136 1 152 | 137 1 Timer0Init_Mode12T();//定时器0初始化 控制pwm生成通道0 153 | 138 1 Timer1Init_Mode12T();//定时器1初始化 控制pwm生成通道1 154 | 139 1 Timer3Init_Mode12T();//定时器3初始化 控制pwm生成通道2 155 | 140 1 Timer4Init_Mode12T();//定时器4初始化 控制舵机转速 156 | 141 1 157 | 142 1 LED = 1; 158 | 143 1 159 | 144 1 //以下代码测试用 160 | 145 1 /* 161 | 146 1 while(1) 162 | 147 1 { 163 | 148 1 PwmChange(x,1000);//改变R2的pwm为2000 164 | 149 1 UpDataTimingLeft();//更新剩余低电平时间 165 | 150 1 Delay1000ms(); 166 | 151 1 PwmChange(x,2000);//改变R2的pwm为2000 167 | 152 1 UpDataTimingLeft();//更新剩余低电平时间 168 | 153 1 Delay1000ms(); 169 | 154 1 } 170 | 155 1 */ 171 | 156 1 DoAction( forWordArr, 22 );//执行前进动作数组 66为forWordArr数组的长度 172 | 157 1 while( 1 ) 173 | 158 1 { 174 | 159 2 CheckAndDealActionDebug( );//检查并处理动作及调试指令 175 | 160 2 CheckAndDealY( );//检查并处理语音指令 176 | 161 2 } 177 | 162 1 } 178 | 163 179 | 180 | 181 | MODULE INFORMATION: STATIC OVERLAYABLE 182 | CODE SIZE = 202 ---- 183 | CONSTANT SIZE = 132 ---- 184 | XDATA SIZE = 14 2 185 | PDATA SIZE = ---- ---- 186 | DATA SIZE = ---- ---- 187 | IDATA SIZE = ---- ---- 188 | BIT SIZE = ---- ---- 189 | END OF MODULE INFORMATION. 190 | 191 | 192 | C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S) 193 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/Robot.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.__i: -------------------------------------------------------------------------------- 1 | "Robot.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.build_log.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/Robot.build_log.htm -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.c: -------------------------------------------------------------------------------- 1 | /*************************************************************** 2 | 本六足机器人程序使用的是STC15W4K48S4单片机(与本单片机结构相同的 3 | 均可以使用)默认22.1184MHz的晶振。程序稳定产生21路PWM(均为模拟PWM) 4 | 产生的动作应与舵机的初始安装状态有关 5 | ***************************************************************/ 6 | 7 | //P0对应PWM0~7 P2对应PWM9~16 P1^0和P1^1分别对应PWM8 PWM17 8 | //使用串口1进行连接串口蓝牙设备 9 | //使用P1.6与P1.7进行AD采集 10 | 11 | #include "stc15w.h" 12 | #include "config.h" 13 | #include "timer.h" 14 | #include "uart.h" 15 | #include "action.h" 16 | #include "delay.h" 17 | #include "MPU6050.h" 18 | #include "oled.h" 19 | #include "pwm.h" 20 | #include "XFS5152V2.h" 21 | #include "ActionArr.h" 22 | 23 | /************************************************************************ 24 | 函数名称: IOInit(void) 初始化IO口 25 | 功能描述: 设置各个IO口输出模式为:传统模式 准双向口 26 | 入口参数: none 27 | 返 回 值: none 28 | 其他说明: 不初始化会输出不了PWM,P30 P31如果清零 串口将不能用 29 | **************************************************************************/ 30 | void IOInit(void) 31 | { 32 | //不设置会输出不了PWM 33 | P0M0 = 0x00; 34 | P0M1 = 0x00; 35 | P1M0 = 0x00; 36 | P1M1 = 0x00; 37 | P2M0 = 0x00; 38 | P2M1 = 0x00; 39 | P3M0 = 0x00; 40 | P3M1 = 0x00; 41 | P4M0 = 0x00; 42 | P4M1 = 0x00; 43 | P5M0 = 0x00; 44 | P5M1 = 0x00; 45 | P6M0 = 0x00; 46 | P6M1 = 0x00; 47 | P7M0 = 0x00; 48 | P7M1 = 0x00; 49 | 50 | //以下最好清零 51 | P0 = 0x00; 52 | P1 = 0x00; 53 | P2 = 0x00; 54 | P3 = 0x03; //P30 P31如果清零 串口将不能用 55 | P4 = 0x00; 56 | P5 = 0x00; 57 | } 58 | 59 | /************************************************************************ 60 | 函数名称: ExecuteOrder(unsigned char order) 61 | 功能描述: 计算每次pwm更新需要多大的增量(用于减速控制) 62 | 入口参数: order命令代号 63 | 返 回 值: none 64 | 其他说明: 执行动画指令 order范围0x00~0x40 总共能容纳65条指令(0x0D因为接受帧 65 | 处理的问题,暂时不能用) 66 | **************************************************************************/ 67 | void ExecuteOrder(unsigned char order) 68 | { 69 | //在此补充指令执行代码 70 | } 71 | 72 | /************************************************************************ 73 | 函数名称: CheckAndDealY( void ) 74 | 功能描述: 检查并处理语音指令 75 | 入口参数: none 76 | 返 回 值: none 77 | 其他说明: 开头‘YS’为语音设置指令 开头‘YT’为语音转发指令 78 | **************************************************************************/ 79 | char CheckAndDealY(void) 80 | { 81 | if (usart1ReceiveSuccess2) //如果语音缓冲区表明接收到完成指令帧 82 | { 83 | if (USART1_RX_BUF2[0] == 'Y') //语音命令帧头标志 84 | if (USART1_RX_BUF2[1] == 'S') 85 | YSOrder(USART1_RX_BUF2[2]); //语音设置命令 86 | else if (USART1_RX_BUF2[1] == 'T') //语音转发 87 | XFS_FrameInfo(&USART1_RX_BUF2[2]); 88 | 89 | usart1ReceiveSuccess2 = 0; //标志位清零 90 | return 1; 91 | } 92 | else 93 | return 0; 94 | } 95 | 96 | /************************************************************************ 97 | 函数名称: CheckAndDealActionDebug( void ) 98 | 功能描述: 检查并处理动作及调试指令 99 | 入口参数: none 100 | 返 回 值: none 101 | 其他说明: 开头‘D’为Debug模式 其余为动作指令 102 | **************************************************************************/ 103 | char CheckAndDealActionDebug(void) 104 | { 105 | if (usart1ReceiveSuccess) //是否已接收完整帧 106 | { 107 | if (USART1_RX_BUF[0] == 'D') //数组调试模式帧头标志 108 | ReceiveDataConvertToPwmValue(); //数组调试模式 一次调试执行1个动作 109 | 110 | while (USART1_RX_BUF[0] && USART1_RX_BUF[0] < 0x41) //添加循环的目的是只要发送一次指令就可以不停执行一个动作 直到下一条指令 111 | ExecuteOrder(USART1_RX_BUF[0]); //执行动作指令 需要接收到停止命令的时候,当前动作才可以被打断 112 | 113 | usart1ReceiveSuccess = 0; //标志位清零 114 | return 1; 115 | } 116 | else 117 | return 0; 118 | } 119 | 120 | void main() 121 | { 122 | uchar x = 9; 123 | IOInit(); //初始化IO口 必须 124 | 125 | BEEP = 1; 126 | Uart1Init(); //串口1初始化(默认115200) 波特率的值和系统晶振频率可以在config.h中设置 127 | Uart2Init(); //串口2初始化(默认115200) 波特率的值和系统晶振频率可以在config.h中设置 128 | // while(1){ 129 | // Uart1SendString("串口1成功发送!\r\n");//串口1发送数据 130 | // Delay200ms(); 131 | // } 132 | 133 | Timer0Init_Mode12T(); //定时器0初始化 控制pwm生成通道0 134 | Timer1Init_Mode12T(); //定时器1初始化 控制pwm生成通道1 135 | Timer3Init_Mode12T(); //定时器3初始化 控制pwm生成通道2 136 | Timer4Init_Mode12T(); //定时器4初始化 控制舵机转速 137 | 138 | LED = 1; 139 | 140 | //以下代码测试用 141 | /* 142 | while(1) 143 | { 144 | PwmChange(x,1000);//改变R2的pwm为2000 145 | UpDataTimingLeft();//更新剩余低电平时间 146 | Delay1000ms(); 147 | PwmChange(x,2000);//改变R2的pwm为2000 148 | UpDataTimingLeft();//更新剩余低电平时间 149 | Delay1000ms(); 150 | } 151 | */ 152 | DoAction(forWordArr, 22); //执行前进动作数组 66为forWordArr数组的长度 153 | while (1) 154 | { 155 | CheckAndDealActionDebug(); //检查并处理动作及调试指令 156 | CheckAndDealY(); //检查并处理语音指令 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.hex: -------------------------------------------------------------------------------- 1 | :1010CF00602A038505DC05DC05DC05DC05DC05DCB9 2 | :1010DF0005DC05DC05DC05DC05DC05DC05DC05DCF9 3 | :1010EF0005DC05DC05DC05DC05DC05DC05DC602A40 4 | :1010FF00033105DC05DC05DC05DC05DC05DC05DC86 5 | :10110F0005DC05DC05DC05DC05DC05DC05DC05DCC8 6 | :10111F0005DC05DC05DC05DC05DC05DC602A03AF3E 7 | :10112F0000000000000000000000000000000000B0 8 | :10113F0000000000000000000000000000000000A0 9 | :10114F0000000000000000000000602A035B0000A8 10 | :10115F000000000000000000000000000000000080 11 | :10116F000000000000000000000000000000000070 12 | :08117F00000000000000000068 13 | :1013F700900033EBF0A3EAF0A3E9F0A3ECF0A3ED40 14 | :01140700F0F4 15 | :10140800E4A3F0900038E0FFC3941540030214CB26 16 | :10141800900033E0FBA3E0FAA3E0F975F002EFA433 17 | :10142800F58285F083120457FFAEF0D39400EE6482 18 | :1014380080948050030214C2900038E0901C7E9380 19 | :10144800900039F0900038E025E0245BF582E43420 20 | :1014580003F583E0FCA3E0FDC3EF9DFFEE9CFE9047 21 | :101468000039E0FD25E02485F582E43403F583EEB8 22 | :10147800F0A3EFF0ED25E02431F582E43403F583A1 23 | :10148800E0FEA3E0FFED25E02485F582E43403F5D2 24 | :1014980083E0FCA3E0C39FFFEC9EFE900036E0FCD7 25 | :1014A800A3E0FD1203F5900039E025E024AFF582B2 26 | :1014B800E43403F583EEF0A3EFF0900038E004F095 27 | :0314C80002140B00 28 | :0114CB0022FE 29 | :100BEC00E4900000F0900000E0FFC3941540030275 30 | :100BFC000D98EF25E024AFF582E43403F583E0FE95 31 | :100C0C00A3E0FFD39400EE648094805003020CC7E1 32 | :100C1C00900000E025E02485F582E43403F583E0C0 33 | :100C2C00FCA3E0C39FFFEC9EFE900000E0FD25E0DE 34 | :100C3C002431F582E43403F583E0FAA3E0C39FEE9C 35 | :100C4C006480F8EA648098900000E0FF502425E06E 36 | :100C5C0024AFF582E43403F583E0FAA3E0FBEF253F 37 | :100C6C00E02431F582E43403F583EA8BF012042B93 38 | :100C7C00803125E02485F582E43403F583E0FAA382 39 | :100C8C00E0FBEF25E02431F582E43403F583EAF050 40 | :100C9C00A3EBF0ED25E024AFF582E43403F583E417 41 | :100CAC00F0A3F0900000E0FF25E02431F582E4345D 42 | :100CBC0003F583E0FCA3E0FD12176C900000E0FF4D 43 | :100CCC0025E024AFF582E43403F583E0FCA3E0FDDA 44 | :100CDC00C3EC648094804003020D8FEF25E02485E3 45 | :100CEC00F582E43403F583E0FEA3E0C39DFFEE9CA4 46 | :100CFC00FE900000E0FD25E02431F582E43403F59C 47 | :100D0C0083E0FAA3E0D39FEE6480F8EA64809890C5 48 | :100D1C000000E0FF402425E024AFF582E43403F525 49 | :100D2C0083E0FAA3E0FBEF25E02431F582E4340301 50 | :100D3C00F583EA8BF012042B803125E02485F582B3 51 | :100D4C00E43403F583E0FAA3E0FBEF25E02431F56E 52 | :100D5C0082E43403F583EAF0A3EBF0ED25E024AF55 53 | :100D6C00F582E43403F583E4F0A3F0900000E0FF97 54 | :100D7C0025E02431F582E43403F583E0FCA3E0FDA7 55 | :0F0D8C0012176C900000E004F0020BF102130A42 56 | :1014CC00900003EBF0A3EAF0A3E9F0A3ECF0A3ED9A 57 | :0114DC00F01F 58 | :1014DD00E4A3F0A3F0900008F0A3F0900006E0FE66 59 | :1014ED00A3E0FFA3E0FCA3E0FDC39FEC9E4003023D 60 | :1014FD00158DED2415FFE43CFEEF25E0FFEE33FEE8 61 | :10150D00900003E0FBA3E0FAA3E0F98F828E831233 62 | :10151D000457FFAEF07C007D321203F5AC06AD072B 63 | :10152D00900009E025E0FF900008E033FE900003F5 64 | :10153D00A3A3E02FF9EA3EFA1213F7900009E02475 65 | :10154D0015FF900008E03400FEEF25E0FFEE33FEBE 66 | :10155D00900003E0FBA3E0FAA3E0F98F828E8312E3 67 | :10156D000457FFAEF07C007D321203F5121C36904D 68 | :10157D000009E02416F0900008E03400F00214E8B1 69 | :01158D00223B 70 | :10161A0005DC07D007D005DC07D007D005DC07D0EA 71 | :10162A0007D005DC03E803E805DC03E803E805DC8A 72 | :10163A0003E803E805DC03E803E803E803E803E852 73 | :10164A0003E803E803E803E803E803E803E803E838 74 | :10165A0003E803E803E803E803E803E803E803E828 75 | :10166A0003E803E803E803E808FC08FC08FC08FCB4 76 | :10167A0008FC08FC08FC08FC08FC08FC08FC08FC40 77 | :10168A0008FC08FC08FC08FC08FC08FC08FC08FC30 78 | :04169A0008FC03E85D 79 | :101B6400E4F594F593F592F591F596F595F5B2F5BE 80 | :101B7400B1F5B4F5B3F5CAF5C9F5CCF5CBF5E2F595 81 | :0F1B8400E1F580F590F5A075B003F5C0F5C82226 82 | :061DFF00900003EFF0224A 83 | :10006600900322E0602C900323E0B4591DA3E0B472 84 | :100076005308A3E0FF120F368010900324E0B45417 85 | :10008600097B017A037925120D9BE4900322F07F08 86 | :0500960001227F0022A1 87 | :101BC00090021DE0602390021EE0B444031209B2AB 88 | :101BD00090021EE0FF600AC394415005121DFF8071 89 | :0C1BE000EFE490021DF07F01227F002244 90 | :101A63009000027409F0121B64D2C0121C68121D8C 91 | :101A730042121C5012002E121CC9121CEDD2CD7B37 92 | :101A8300FF7A16791A7D167C001214CC121BC01231 93 | :041A9300006680F871 94 | :0411870041044200DD 95 | :101D2200D2AFD2A9438901758CFA758A24D28C224A 96 | :101C5000538E7F5389F0438901E4F58A758C70C2F5 97 | :081C60008DD28CD2A9D2AF2273 98 | :101D3200D2AFD2AB438910758DFA758B24D28E2225 99 | :10002E00538EBF53890FE4F58B758D70C28FD28EB0 100 | :05003E00D2AFD2AB229D 101 | :101C9300D2AF43AF04438E0475D79A75D6A9438E4A 102 | :021CA30010220D 103 | :101CA500D2AF43AF04538EFB75D7CD75D6F8438EAF 104 | :021CB5001022FB 105 | :101CB700D2AF43AF2043D10275D59A75D4A943D18A 106 | :021CC7000822F1 107 | :101CC900D2AF43AF2053D1FD75D5CD75D4F843D1EB 108 | :021CD9000822DF 109 | :101CDB00D2AF43AF4043D12075D39A75D2A943D12C 110 | :021CEB00802255 111 | :101CED00D2AF43AF4053D1DFE4F5D375D24C43D1DE 112 | :021CFD00802243 113 | :03000B00021910C7 114 | :10191000C0E0C0F0C083C08263A201C083C082C0A7 115 | :10192000D075D000C000C001C002C003C004C00513 116 | :10193000C006C0071217C3B2CDD007D006D005D05D 117 | :1019400004D003D002D001D000D0D0D082D08363A5 118 | :0B195000A201D082D083D0F0D0E032A2 119 | :03001B0002195B6C 120 | :10195B00C0E0C0F0C083C08263A201C083C082C05C 121 | :10196B00D075D000C000C001C002C003C004C005C8 122 | :10197B00C006C007121819D007D006D005D004D066 123 | :10198B0003D002D001D000D0D0D082D08363A2018B 124 | :09199B00D082D083D0F0D0E032FC 125 | :0300630002001E7A 126 | :01001E0032AF 127 | :03009B000219A4A3 128 | :1019A400C0E0C0F0C083C08263A201C083C082C013 129 | :1019B400D075D000C000C001C002C003C004C0057F 130 | :1019C400C006C00712169ED007D006D005D004D09A 131 | :1019D40003D002D001D000D0D0D082D08363A20142 132 | :0919E400D082D083D0F0D0E032B3 133 | :0300A30002170938 134 | :10170900C0E0C0F0C083C08263A201C083C082C0B0 135 | :10171900D075D000C000C001C002C003C004C0051C 136 | :10172900C006C007900442E070047F0180027F0078 137 | :10173900900442EFF075D30075D24CEF6003120BA1 138 | :10174900ECD007D006D005D004D003D002D001D008 139 | :1017590000D0D0D082D08363A201D082D083D0F0D0 140 | :03176900D0E0329B 141 | :10118B0041031E0041031F0041021D0041032E00BD 142 | :08119B004103220041032D0075 143 | :1012050090031FE0701BA3E0FF90032DF090031FD8 144 | :10121500E0FE04F0741E2EF582E43402F583EFF04F 145 | :101225002290032EE0FF701B900320E0FE90032D1B 146 | :10123500F0A3E0FD04F074232DF582E43403F58377 147 | :10124500EEF02290032DE064597066EF30E703025B 148 | :101255001309A3E0FFE430E618900320E0640A6078 149 | :1012650003E48026EF90032EF0E4F090032204F0CF 150 | :1012750022900320E0FBB40D1690032EE0FF2423FB 151 | :10128500F582E43403F583E4F0EF90032EF0229029 152 | :10129500032EE0FF7E0074232FF582EE3403F583E1 153 | :1012A500EBF090032EE004F0E0D394094056E4F00F 154 | :1012B500227E00EE20E74D30E61B900320E0640A15 155 | :1012C5006006E490031FF02290031FE0F0E4F09025 156 | :1012D500021D04F022900320E0FDB40D0690031FCB 157 | :1012E500E0F02290031FE0FF7E00741E2FF582EED2 158 | :1012F5003402F583EDF090031FE004F0E0D394FF92 159 | :051305004002E4F022AB 160 | :1009B200900003E4F0A304F0E490002FF0A3F09081 161 | :1009C2000003E0FEA3E0241EF58274023EF583E0FC 162 | :1009D200B42010900004E004F070E4900003E004FE 163 | :1009E200F080DC900003E0FEA3E0241EF582740296 164 | :1009F2003EF583E0FFC3943A5040EF942F403B9082 165 | :100A0200002FE0FEA3E0FF7C007D0A12038E90001F 166 | :100A120003E475F001120441FC741E25F0F58274A2 167 | :100A2200023CF583E07C002FFFEC3ECF24D0CF3494 168 | :100A3200FF90002FF0A3EFF080A9E490021DF09048 169 | :100A4200002F74FFF5F012044145F07003020BEB26 170 | :100A520090021DE06003020BEB900031F0A3F0FB6B 171 | :100A6200FDEDFF3395E0FEEF25E0FFEE33FE74056A 172 | :100A72002FF58274003EF583E4F0A3F00DEDB4157A 173 | :100A8200E0C3EB648094954003020B51900003E4B1 174 | :100A920075F001120441FE741E25F0F58274023EC7 175 | :100AA200F583E0B420E6900003E0FEA3E0241EF507 176 | :100AB2008274023EF583E0FFC3943A506CEF942FA8 177 | :100AC2004067EBFF3395E0FEEF25E0FFEE33FE7467 178 | :100AD200052FF58274003EF583E0FEA3E0FF7C0063 179 | :100AE2007D0A12038E900003E475F001120441FCAA 180 | :100AF200741E25F0F58274023CF583E07C002FFF22 181 | :100B0200EC3ECF24D0FDEF34FFFCEBFF3395E0FE4B 182 | :100B1200EF25E0FFEE33FE74052FF58274003EF5FB 183 | :100B220083ECF0A3EDF0020AA8900003E0FEA3E03C 184 | :100B3200241DF58274023EF583E0FFC3943A40031C 185 | :100B4200020A83EF942F5003020A830B020A839056 186 | :100B52000003E0FEA3E0241EF58274023EF583E06A 187 | :100B6200B42010900004E004F070E4900003E0046C 188 | :100B7200F080DC900003E0FEA3E0241EF582740204 189 | :100B82003EF583E0FFC3943A5040EF942F403B90F0 190 | :100B92000031E0FEA3E0FF7C007D0A12038E90008C 191 | :100BA20003E475F001120441FC741E25F0F5827411 192 | :100BB200023CF583E07C002FFFEC3ECF24D0CF3403 193 | :100BC200FF900031F0A3EFF080A9900031E0FEA386 194 | :100BD200E0FF7C007D321203F5AC06AD077B017AA3 195 | :090BE2000079051213F7020A4123 196 | :010BEB0022E7 197 | :101C680075B003759850438E01438E0475D7D075AF 198 | :061C7800D6FF438E10228E 199 | :101D4200759A50438E0475D7D075D6FF438E1022F4 200 | :030023000219EDD2 201 | :1019ED00C0E0C083C08263A201C083C082C0D07535 202 | :1019FD00D008309811C29890031E7401F090032006 203 | :101A0D00E599F0121205309907C29990032FE4F071 204 | :101A1D00D0D0D082D08363A201D082D083D0E032E7 205 | :03004300021A2D71 206 | :101A2D00C0E0C083C08263A201C083C082E59A304A 207 | :101A3D00E009539AFE900321E59BF0E59A30E10809 208 | :101A4D00539AFD900330E4F0D082D08363A201D08D 209 | :061A5D0082D083D0E032CC 210 | :101D520090032FE070FAEF90032F7401F0F59922AF 211 | :061E0500900443EFF022FF 212 | :101ACB00900438EBF0A3EAF0A3E9F0900438E0FBC4 213 | :101ADB00A3E0FAA3E0F91203636017900438A3E4C0 214 | :101AEB0075F001120441A9F0FA120363FF1200030F 215 | :031AFB0080D9226D 216 | :101AFE0090043BEBF0A3EAF0A3E9F090043BE0FB8B 217 | :101B0E00A3E0FAA3E0F9120363601790043BA3E489 218 | :101B1E0075F001120441A9F0FA120363FF121DBC05 219 | :031B2E0080D92239 220 | :080003008F993099FDC299228A 221 | :0E1DBC00900330E060FA8F9BE4900330F02239 222 | :0E1D620000007FD37E1E7D0BDDFEDEFCDFFA6F 223 | :011D70002250 224 | :0E1D710000007F557E0C7D9BDDFEDEFCDFFA60 225 | :011D7F002241 226 | :0E1D800000007F2B7E067DCBDDFEDEFCDFFA51 227 | :011D8E002232 228 | :0E1D8F0000007F1A7E377DABDDFEDEFCDFFA42 229 | :011D9D002223 230 | :0C000E007F0A7E1F7D93DDFEDEFCDFFA22 231 | :01001A0022C3 232 | :0E1D9E0000007F0D7E9C7D53DDFEDEFCDFFA33 233 | :011DAC002214 234 | :0E1DAD0000007F097E687D8BDDFEDEFCDFFA24 235 | :011DBB002205 236 | :101C3600AE071FEED39400401000007E057D347C75 237 | :091C4600C3DCFEDDFCDEFA80E7E0 238 | :011C4F002272 239 | :101C7E0000010203040506071408090A0B0C0D0ED9 240 | :051C8E000F13121110FC 241 | :1011A3005803DFF5F5F5F5F5F5F5F5F5F5F5F5F591 242 | :1011B300F5F5F5F5F5F5F5F5C6C6A65803F733339A 243 | :1011C30033333333333333333333333333333333EC 244 | :1011D30033333366660041040F00410410004104B9 245 | :1011E30011004203D900004203DB00004203DD008B 246 | :0111F30000FB 247 | :1017C30090040FE0FFB4080EE4F5809003F4E0F515 248 | :1017D3008C90040C8029EF70057580018006E580EC 249 | :1017E30025E0F58090040FE0FF24DFF582E4340365 250 | :1017F300F583E0F58C74F72FF582E43403F583E089 251 | :10180300F58A90040FE02401FFE433FE7C007D0998 252 | :061813001203A0EDF0221B 253 | :10181900900410E0FFB4080EE4F5A09003F5E0F59C 254 | :101829008D90040D8029EF700575A0018006E5A053 255 | :1018390025E0F5A0900410E0FF24E7F582E43403E5 256 | :10184900F583E0F58D74FF2FF582E43403F583E029 257 | :10185900F58B900410E02401FFE433FE7C007D0940 258 | :061869001203A0EDF022C5 259 | :10169E00900411E0FFB4050E53C0839003F6E0F5FD 260 | :1016AE00D490040E803E900410E0700AE5C054837E 261 | :1016BE004404F5C080137404A807088002C333D80D 262 | :1016CE00FCFFE5C054834FF5C0900411E0FF24EFFA 263 | :1016DE00F582E43403F583E0F5D474072FF582E444 264 | :1016EE003404F583E0F5D5900411E02401FFE433D2 265 | :0B16FE00FE7C007D061203A0EDF02230 266 | :10176C00900001EFF0E41202A97BFA7AED79EB78A4 267 | :10177C003F12019EA804A905AA06AB07E4FFFE7D53 268 | :10178C00807C471200A91202E2AC06AD0790000162 269 | :10179C00E0901C7E93900001F0ECFFE0FB24DFF561 270 | :1017AC0082E43403F583EFF0EDFF74F72BF582E45C 271 | :0717BC003403F583EFF02276 272 | :10130A009003D97470F0A3E4F0FD74DF2DF582E444 273 | :10131A003403F583E0FE74F72DF582E43403F58394 274 | :10132A00E0FBEBFFC3E49FFFE49EFE9003DAE02FAD 275 | :10133A00F09003D9E03EF00DEDB408CE9003D9E069 276 | :10134A00FCA3E0FDEC9003F4F090040CEDF09003A4 277 | :10135A00DB7470F0A3E4F07D0874DF2DF582E434C9 278 | :10136A0003F583E0FE74F72DF582E43403F583E098 279 | :10137A00FBEBFFC3E49FFFE49EFE9003DCE02FF04B 280 | :10138A009003DBE03EF00DEDB410CE9003DBE0FC01 281 | :10139A00A3E0FDEC9003F5F090040DEDF09003DD71 282 | :1013AA007470F0A3E4F07D1074DF2DF582E4340349 283 | :1013BA00F583E0FE74F72DF582E43403F583E0FB50 284 | :1013CA00EBFFC3E49FFFE49EFE9003DEE02FF09064 285 | :1013DA0003DDE03EF00DEDB415CE9003DDE0FCA395 286 | :0C13EA00E0FDEC9003F6F090040EEDF036 287 | :0113F60022D4 288 | :10067400CED2CFD6D4DAB5C4C9F9D2F4CAC7D5E23A 289 | :10068400D1F9B5C400C9F9D2F4D2D1BBD6B8B4C437 290 | :10069400ACC8CFC9E8D6C300D3EFCBD9D2D1B5F714 291 | :1006A400B5BD00BCB600D3EFB5F7D2D1B5F7B5BD33 292 | :1006B40000D2F4C1BFD2D1B5F7B5BD00FD0001022F 293 | :1006C400FD000103FD000104FD000121FD0001887E 294 | :1006D4005B73305D00005B73315D00005B73325D02 295 | :1006E40000005B73335D00005B73345D00005B737B 296 | :1006F400355D00005B73365D00005B73375D0000A1 297 | :100704005B73385D00005B73395D00005B733130EF 298 | :100714005D005B74305D00005B74315D00005B74F0 299 | :10072400325D00005B74335D00005B74345D000077 300 | :100734005B74355D00005B74365D00005B74375D8F 301 | :1007440000005B74385D00005B74395D00005B740D 302 | :1007540031305D005B76305D00005B76315D00001A 303 | :100764005B76325D00005B76335D00005B76345D62 304 | :1007740000005B76355D00005B76365D00005B76DD 305 | :10078400375D00005B76385D00005B76395D000004 306 | :100794005B7631305D005B6D335D00005B6D353140 307 | :1007A4005D005B6D35325D005B6D35335D005B6D07 308 | :1007B40035345D005B6D35355D00010101010100DB 309 | :1007C4000000000000000000000000000000000025 310 | :1007D4000000000000000000000000000000000015 311 | :1007E4000000000000000000000000000000000005 312 | :1007F40000000000000000000000000000000000F5 313 | :1008040000000000000000000000000000000000E4 314 | :1008140000000000000000000000000000000000D4 315 | :1008240000000000000000000000000000000000C4 316 | :1008340000000000000000000000000000000000B4 317 | :1008440000000000000000000000000000000000A4 318 | :100854000000000000000000000000000000000094 319 | :100864000000000000000000000000000000000084 320 | :100874000000000000000000000000000000000074 321 | :100884000000000000000000000000000000000064 322 | :100894000000000000000000000000000000000054 323 | :1008A4000000000000000000000000000000000044 324 | :1008B4000000000000000000000000000000000034 325 | :1008C4000000000000000000000000000000000024 326 | :1008D4000000000000000000000000000000000014 327 | :1008E4000000000000000000000000000000000004 328 | :1008F40000000000000000000000000000000000F4 329 | :1009040000000000000000000000000000000000E3 330 | :1009140000000000000000000000000000000000D3 331 | :1009240000000000000000000000000000000000C3 332 | :1009340000000000000000000000000000000000B3 333 | :1009440000000000000000000000000000000000A3 334 | :100954000000000000000000000000000000000093 335 | :100964000000000000000000000000000000000083 336 | :100974000000000000000000000000000000000073 337 | :100984000000000000000000000000000000000063 338 | :100994000000000000000000000000000000000053 339 | :0E09A400000000000000000000000000000045 340 | :1011F40041043505410436054104370841043401EE 341 | :091A97001206577B017A00792048 342 | :0B1AA00090021AEBF0A3EAF0A3E9F0BB 343 | :101AAB00E4FFFE90021AE0FBA3E475F0011204417F 344 | :0F1ABB00A9F0FA12036360070FBF00010E80E469 345 | :011ACA0022F9 346 | :10186F0090042EEBF0A3EAF0A3E9F0900431E0FB33 347 | :10187F00A3E0FAA3E0F91203636028900431A3E414 348 | :10188F0075F001120441A9F0FA120363FF90042EC0 349 | :10189F00E0FBA3E475F001120441A9F0FAEF120383 350 | :1018AF007C80C890042EE0FBA3E0FAA3E0F9E402E9 351 | :0218BF00037CA8 352 | :0B0D9B0090001DEBF0A3EAF0A3E9F0CC 353 | :100DA60078207C007D017BFF7A0779BE7E017FF487 354 | :100DB600120569900218E4F0A37405F0900435E07A 355 | :100DC60075F006A424D4F9740635F0FA7BFFC00149 356 | :100DD60074202405F9E43400A801FC7D01D0011239 357 | :100DE6001A97900218EEF0A3EFF0900436E075F033 358 | :100DF60006A42416F9740735F0FA7BFFC0019002A9 359 | :100E060018E0FEA3E02420F974003EA801FC7D0151 360 | :100E1600D001121A97900218EEF0A3EFF090043763 361 | :100E2600E075F006A42458F9740735F0FA7BFFC084 362 | :100E360001900218E0FEA3E02420F974003EA80108 363 | :100E4600FC7D01D001121A97900218EEF0A3EFF084 364 | :100E5600900434E075F006A4249AF9740735F0FA84 365 | :100E66007BFFC001900218E0FEA3E02420F9740085 366 | :100E76003EA801FC7D01D001121A97900218EEF0EF 367 | :100E8600A3EFF090001DE0FBA3E0FAA3E0F9121A2D 368 | :100E9600A0900214EEF0A3EFF0900219E02FFF905D 369 | :100EA6000218E03ECF24FDCF34FF900214F0A3EFEA 370 | :100EB600F090002074FDF0900214E0FCA3E0FDEC3D 371 | :100EC600900021F0A3EDF0A37401F0A3F0900218B6 372 | :100ED600E0FEA3E02420F974003EA801FC7D019009 373 | :100EE600001DE0FBA3E0FAA3E0F9120657E4900226 374 | :100EF60016F0A3F0900215E02403FF900214E034EC 375 | :100F060000FE900216E0FCA3E0FDC39FEC9E501F7E 376 | :100F160074202DF58274003CF583E0FF12000390E7 377 | :0F0F26000217E004F07006900216E004F080C598 378 | :010F35002299 379 | :050F3600900003EFF044 380 | :100F3B0014B408004003020FCF900F5275F003A4B6 381 | :100F4B00C58325F0C58373020F6A020F6F020F74FE 382 | :100F5B00020F79020F7E020F86020F9B020FB690D3 383 | :100F6B000435801290043580159004368008900467 384 | :100F7B0036800B900437E024018006900437E02480 385 | :100F8B000AFFE433FE7C007D0B1203A0EDF08034EE 386 | :100F9B00900434E02401FFE433FE7C007D06120351 387 | :100FAB00A0EDF07BFF7A06797480169004357405FA 388 | :100FBB00F0A3F0A3F09004347401F07BFF7A067970 389 | :100FCB0089120D9B900003E0FF64016005EF640242 390 | :100FDB00702A900435E0FFB40A0A9000187431F0BF 391 | :100FEB00A3148006EF2430900018F0E4A3F07804EB 392 | :100FFB007C007D017BFF7A06799C8071900003E079 393 | :10100B00FF64036005EF6404702A900436E0FFB4BC 394 | :10101B000A0A9000187431F0A3148006EF24309064 395 | :10102B000018F0E4A3F078047C007D017BFF7A06C6 396 | :10103B0079AA8039900003E0FF64056008EF64062D 397 | :10104B0060030210CE900437E0FFB40A0A90001838 398 | :10105B007431F0A3148006EF2430900018F0E4A351 399 | :10106B00F078047C007D017BFF7A0679B512065778 400 | :10107B007B017A007904121AA090001BEEF0A3EF0B 401 | :10108B00F02404F974003EA801FC7D017B017A0079 402 | :10109B0079181206577B017A007904121AA0900076 403 | :1010AB001BEEF0A3EFF02404F974003EA801FC7DC5 404 | :1010BB00017BFF7A0679A71206577B017A00790428 405 | :0310CB00120D9B68 406 | :0110CE0022FF 407 | :01001F0022BE 408 | :03002B00020020B0 409 | :0100200032AD 410 | :061DCA00EE25E0FED2B59B 411 | :071DD0000000007F0ADFFEA6 412 | :011DD70022E9 413 | :101D1100D2B4D2B5121DD0C2B4121DD0C2B5021DAB 414 | :011D2100D0F1 415 | :0C1DF300C2B4D2B5121DD0D2B4021DD073 416 | :0E1DD800A20092B4D2B5121DD0C2B5021DD029 417 | :0D1DE600D2B5121DD0A2B4C2B5121DD0227C 418 | :071BEC00AF04121BF3AF036D 419 | :021BF300AE073B 420 | :101BF500E4FDEEC4131313540124FF92B4121DCA5D 421 | :0D1C0500C2B5121DD00DEDB408E8021DE6B9 422 | :10004600E4FED2B4FD121DCAA2B4E4334EFEC2B51C 423 | :0A005600121DD00DEDB408EDAF0649 424 | :01006000227D 425 | :101CFF00AE07AC05121D11AF06121BF3121BEC023F 426 | :021D0F001DF3C2 427 | :041C1200AC07AB056B 428 | :101C1600121D11121BEC121D11EC4401FF121BF3D5 429 | :0F1C2600120046AE07D200121DD8121DF3AF06F2 430 | :011C3500228C 431 | :101B9300E4FB7D6B7FD0121CFF7B077D197FD01286 432 | :101BA3001CFF7B067D1A7FD0121CFF7B187D1B7FD9 433 | :0D1BB300D0121CFF7B017D1C7FD0021CFFA7 434 | :061B3100900440EFF0FDFE 435 | :101B37007FD0121C12900441EFF0900440E004FDA6 436 | :101B47007FD0121C12AD07900441E0FF3395E0EF00 437 | :0C1B5700FEED3395E0FCE42DFFEE3CFEBB 438 | :011B6300225F 439 | :1018C1007F3B121B31900424EEF0A3EFF07F3D1219 440 | :1018D1001B31900426EEF0A3EFF07F3F121B3190F5 441 | :1018E1000428EEF0A3EFF07F43121B3190042AEE9F 442 | :1018F100F0A3EFF07F45121B3190042CEEF0A3EF23 443 | :0F190100F07F47121B31900420EEF0A3EFF0228D 444 | :0100210022BC 445 | :1000A60002034EE86480F8E933E83360110460F037 446 | :1000B600ED33EC337009E8FCE9FDEAFEEBFF2204C0 447 | :1000C60060DED3EB9FEA9EE99DE8C2E78CF0C2F7BB 448 | :1000D60095F0400CE8CCF8E9CDF9EACEFAEBCFFB87 449 | :1000E60012031985D0F05804700320D5B3E80470C4 450 | :1000F600075002B2D502035892D5EC0460F7E4CC5F 451 | :10010600C0E0C398F8603B94186008400DD0E0FB4F 452 | :10011600020330E4FBFAC9FC8028E830E406E4C9AF 453 | :10012600FBE4CAFCE830E305E4C9CACBFCE85407A3 454 | :100136006010F8C3E913F9EA13FAEB13FBEC13FCAE 455 | :10014600D8F130F52FC3E49CFCEF9BFFEE9AFEED51 456 | :1001560099FDD0E0FBEF4E4D4C701222DB030203FB 457 | :1001660055EC2CFCEF33FFEE33FEED33FDED30E7BF 458 | :10017600EB020330EF2BFFEE3AFEED39FDD0E0FB4C 459 | :1001860050130BBB0003020358ED13FDEE13FEEFF5 460 | :0801960013FFEC13FC0203301F 461 | :10019E00EC4D6011E8497017ED33EC3304600DE45B 462 | :1001AE00FCFFFEFD22E933E8330470F802034E1221 463 | :1001BE00031958046009E4CC248150062850090222 464 | :1001CE000358284003020355C0E0EB4A7044B9803F 465 | :1001DE0006D0E0FB020344EF4E701CBD8008EBFF1F 466 | :1001EE00EAFEE9FD80EBE98DF0A4FEE5F002028760 467 | :1001FE00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE893C 468 | :10020E00F0A42EFFE435F0CD89F0A42DFEE435F0F8 469 | :10021E008067EF4E7005BD80D780C3EF8BF0A4AC26 470 | :10022E00F0EE8BF0A42CFCE435F0F8EF8AF0A42C61 471 | :10023E00E5F038FCE433CB8DF0A42CFCE5F03BF874 472 | :10024E00EE8AF0A42CFCE5F038F8E433CF89F0A464 473 | :10025E002CFCE5F038CF3400CE89F0A42FFFE5F06A 474 | :10026E003EFEE433C98DF0A42EFEE5F039CD8AF0C2 475 | :10027E00A42FFFE5F03EFEE43DFD33D0E0FB50073A 476 | :10028E000BBB000F020358EC2CFCEF33FFEE33FEDA 477 | :06029E00ED33FD02033008 478 | :1002A40075F020800E75F010800575F0087D007ED5 479 | :1002B400007F003392D530D50312048FEC33401005 480 | :1002C400EF33FFEE33FEED33FDEC33FCD5F0ED22DE 481 | :0E02D400E5F0247EA2D513CC92E7CDCEFF221A 482 | :1002E200EDD2E7CD33EC3392D524814006E4FFFE14 483 | :1002F200FDFC22FCE4CFCECDCC24E0501174FF8073 484 | :10030200EDC3CC13CCCD13CDCE13CECF13CF04700F 485 | :07031200F030D5DE02048F7C 486 | :10031900E9D2E7C933E833F892D5EDD2E7CD33EC2A 487 | :0703290033FC5002B2D522A3 488 | :10033000EC30E7100FBF000C0EBE00080DBD00042E 489 | :100340000BEB6014A2D5EB13FCED92E7FD2274FFDA 490 | :10035000FCFDFEFF22E480F8A2D574FF13FC7D8033 491 | :03036000E480EF47 492 | :0300000002158E58 493 | :0C158E00787FE4F6D8FD7581200215D5A9 494 | :10036300BB010689828A83E0225002E722BBFE0298 495 | :09037300E32289828A83E49322CB 496 | :10037C00BB010689828A83F0225002F722BBFE0160 497 | :02038C00F3225A 498 | :10038E00EF8DF0A4A8F0CF8CF0A428CE8DF0A42E83 499 | :02039E00FE223D 500 | :1003A000BC000BBE0029EF8DF084FFADF022E4CC41 501 | :1003B000F875F008EF2FFFEE33FEEC33FCEE9DEC0A 502 | :1003C000984005FCEE9DFE0FD5F0E9E4CEFD22ED50 503 | :1003D000F8F5F0EE8420D21CFEADF075F008EF2F9A 504 | :1003E000FFED33FD4007985006D5F0F222C398FD8B 505 | :0503F0000FD5F0EA2228 506 | :1003F500C2D5EC30E709B2D5E4C39DFDE49CFCEE23 507 | :1004050030E715B2D5E4C39FFFE49EFE1203A0C3F7 508 | :10041500E49DFDE49CFC80031203A030D507C3E4F2 509 | :060425009FFFE49EFE2291 510 | :10042B00C5F0F8A3E028F0C5F0F8E582158270025C 511 | :06043B001583E038F022F9 512 | :10044100A3F8E0C5F025F0F0E5821582700215836E 513 | :06045100E0C838F0E822CB 514 | :10045700BB0110E58229F582E5833AF583E0F5F0E3 515 | :10046700A3E0225009E92582F886F008E622BBFEC0 516 | :100477000AE92582F8E2F5F008E222E5832AF58306 517 | :08048700E993F5F0A3E99322CB 518 | :0E048F00C3E49FFFE49EFEE49DFDE49CFC227E 519 | :10049D00E709F608DFFA8046E709F208DFFA803E41 520 | :1004AD0088828C83E709F0A3DFFA8032E309F6082E 521 | :1004BD00DFFA8076E309F208DFFA806E88828C839A 522 | :1004CD00E309F0A3DFFA806289828A83E0A3F6084C 523 | :1004DD00DFFA805689828A83E0A3F208DFFA804A28 524 | :1004ED0080D280FA80C680D4806580F28031801001 525 | :1004FD0080A680EA809A80A880DA80E280CA803166 526 | :10050D0089828A8363A20188828C8363A201E4932A 527 | :10051D00A363A201F0A363A201DFF3DEF1800B89D7 528 | :10052D00828A83E493A3F608DFF9ECFAA9F0EDFBD8 529 | :10053D002289828A8363A20188828C8363A201E06F 530 | :10054D00A363A201F0A363A201DFF4DEF280DB89D5 531 | :10055D00828A83E493A3F208DFF980CE88F0EF60FE 532 | :10056D00010E4E60C588F0ED2402B4040050BBF5B9 533 | :10057D0082EB2402B4040050B1232345822390045E 534 | :02058D00ED730C 535 | :10058F00E709F60870FA8046E709F20870FA803E2C 536 | :10059F0088828C83E709F0A370FA807CE309F60860 537 | :1005AF0070FA8074E309F20870FA806C88828C8389 538 | :1005BF00E309F0A370FA806089828A83E0A3F608CA 539 | :1005CF0070FA805489828A83E0A3F20870FA804817 540 | :1005DF0080D280FA80C680D4806180F2802F801014 541 | :1005EF0080A680EA809A80A880DA80E280CA802F75 542 | :1005FF0089828A8363A20188828C8363A201E49338 543 | :10060F00A363A201F0A363A20170F3800B89828A16 544 | :10061F0083E493A3F60870F9ECFAA9F0EDFB2289B5 545 | :10062F00828A8363A20188828C8363A201E0A36321 546 | :10063F00A201F0A363A20170F480DD89828A83E4B2 547 | :10064F0093A3F20870F980D088F0ED2402B404006F 548 | :10065F0050C6F582EB2402B4040050BC232345821C 549 | :05066F00239005DF737C 550 | :10159A00021A63E493A3F8E493A34003F68001F2EA 551 | :1015AA0008DFF48029E493A3F85407240CC8C33352 552 | :1015BA00C4540F4420C8834004F456800146F6DF21 553 | :1015CA00E4800B01020408102040809010CFE47ED2 554 | :1015DA00019360BCA3FF543F30E509541FFEE49316 555 | :1015EA00A360010ECF54C025E060A840B8E493A3DD 556 | :1015FA00FAE493A3F8E493A3C8C582C8CAC583CA08 557 | :10160A00F0A3C8C582C8CAC583CADFE9DEE780BEBF 558 | :0112040000E9 559 | :00000001FF 560 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.lnp: -------------------------------------------------------------------------------- 1 | "action.obj", 2 | "Robot.obj", 3 | "timer.obj", 4 | "uart.obj", 5 | "delay.obj", 6 | "pwm.obj", 7 | "XFS5152V2.obj", 8 | "adc.obj", 9 | "IIC.obj", 10 | "MPU6050.obj", 11 | "oled.obj" 12 | TO "Robot" 13 | RAMSIZE(256) 14 | CODE( 0X0000-0XEFF8 ) 15 | XDATA( 0X0000-0X0EFF ) 16 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.uvopt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1.0 5 | 6 |
### uVision Project, (C) Keil Software
7 | 8 | 9 | *.c 10 | *.s*; *.src; *.a* 11 | *.obj 12 | *.lib 13 | *.txt; *.h; *.inc 14 | *.plm 15 | *.cpp 16 | 0 17 | 18 | 19 | 20 | 0 21 | 0 22 | 23 | 24 | 25 | Target 1 26 | 0x0 27 | MCS-51 28 | 29 | 35000000 30 | 31 | 0 32 | 1 33 | 1 34 | 0 35 | 0 36 | 37 | 38 | 0 39 | 65535 40 | 0 41 | 0 42 | 0 43 | 44 | 45 | 120 46 | 65 47 | 8 48 | .\ 49 | 50 | 51 | 1 52 | 1 53 | 1 54 | 0 55 | 1 56 | 1 57 | 0 58 | 1 59 | 0 60 | 0 61 | 0 62 | 0 63 | 64 | 65 | 1 66 | 1 67 | 1 68 | 1 69 | 1 70 | 1 71 | 1 72 | 0 73 | 0 74 | 75 | 76 | 1 77 | 0 78 | 1 79 | 80 | 0 81 | 82 | 1 83 | 0 84 | 1 85 | 1 86 | 1 87 | 1 88 | 1 89 | 1 90 | 1 91 | 1 92 | 0 93 | 1 94 | 1 95 | 1 96 | 0 97 | 1 98 | 0 99 | 1 100 | 1 101 | 0 102 | 0 103 | -1 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 0 119 | 120 | 121 | 0 122 | 0 123 | 0 124 | 0 125 | 0 126 | 0 127 | 0 128 | 0 129 | 0 130 | 0 131 | 0 132 | 0 133 | 0 134 | 0 135 | 0 136 | 0 137 | 0 138 | 0 139 | 0 140 | 0 141 | 0 142 | 0 143 | 0 144 | 0 145 | 146 | 147 | 148 | 0 149 | 150 | 151 | 152 | 153 | Source Group 1 154 | 1 155 | 0 156 | 0 157 | 0 158 | 159 | 1 160 | 1 161 | 1 162 | 0 163 | 0 164 | 0 165 | 0 166 | .\action.c 167 | action.c 168 | 0 169 | 0 170 | 171 | 172 | 1 173 | 2 174 | 1 175 | 0 176 | 0 177 | 0 178 | 0 179 | .\Robot.c 180 | Robot.c 181 | 0 182 | 0 183 | 184 | 185 | 1 186 | 3 187 | 1 188 | 0 189 | 0 190 | 0 191 | 0 192 | .\timer.c 193 | timer.c 194 | 0 195 | 0 196 | 197 | 198 | 1 199 | 4 200 | 1 201 | 0 202 | 0 203 | 0 204 | 0 205 | .\uart.c 206 | uart.c 207 | 0 208 | 0 209 | 210 | 211 | 1 212 | 5 213 | 1 214 | 0 215 | 0 216 | 0 217 | 0 218 | .\delay.c 219 | delay.c 220 | 0 221 | 0 222 | 223 | 224 | 1 225 | 6 226 | 1 227 | 0 228 | 0 229 | 0 230 | 0 231 | .\pwm.c 232 | pwm.c 233 | 0 234 | 0 235 | 236 | 237 | 1 238 | 7 239 | 1 240 | 0 241 | 0 242 | 0 243 | 0 244 | .\XFS5152V2.c 245 | XFS5152V2.c 246 | 0 247 | 0 248 | 249 | 250 | 1 251 | 8 252 | 1 253 | 0 254 | 0 255 | 0 256 | 0 257 | .\adc.c 258 | adc.c 259 | 0 260 | 0 261 | 262 | 263 | 1 264 | 9 265 | 1 266 | 0 267 | 0 268 | 0 269 | 0 270 | .\IIC.c 271 | IIC.c 272 | 0 273 | 0 274 | 275 | 276 | 1 277 | 10 278 | 1 279 | 0 280 | 0 281 | 0 282 | 0 283 | .\MPU6050.c 284 | MPU6050.c 285 | 0 286 | 0 287 | 288 | 289 | 1 290 | 11 291 | 1 292 | 0 293 | 0 294 | 0 295 | 0 296 | .\oled.c 297 | oled.c 298 | 0 299 | 0 300 | 301 | 302 | 303 |
304 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Robot.uvproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1.1 5 | 6 |
### uVision Project, (C) Keil Software
7 | 8 | 9 | 10 | Target 1 11 | 0x0 12 | MCS-51 13 | 14 | 15 | STC15W4K32S4 16 | STC 17 | IRAM(0-0xFF) XRAM(0-0xEFF) IROM(0-0xEFF8) CLOCK(35000000) MODP2 18 | 19 | "LIB\STARTUP.A51" ("Standard 8051 Startup Code") 20 | 21 | 62761 22 | STC15F2K60S2.H 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 0 34 | 0 35 | 36 | 37 | 38 | STC\ 39 | STC\ 40 | 41 | 0 42 | 0 43 | 0 44 | 0 45 | 1 46 | 47 | .\ 48 | Robot 49 | 1 50 | 0 51 | 1 52 | 1 53 | 1 54 | .\ 55 | 0 56 | 0 57 | 1 58 | 59 | 0 60 | 0 61 | 62 | 63 | 0 64 | 0 65 | 0 66 | 0 67 | 68 | 69 | 0 70 | 0 71 | 72 | 73 | 0 74 | 0 75 | 0 76 | 0 77 | 78 | 79 | 0 80 | 0 81 | 82 | 83 | 0 84 | 0 85 | 0 86 | 0 87 | 88 | 1 89 | 90 | 91 | 92 | 0 93 | 0 94 | 0 95 | 0 96 | 0 97 | 1 98 | 0 99 | 0 100 | 0 101 | 0 102 | 3 103 | 104 | 105 | 1 106 | 65535 107 | 108 | 109 | S8051.DLL 110 | 111 | DP51.DLL 112 | -pDP8051 113 | S8051.DLL 114 | 115 | TP51.DLL 116 | -p51 117 | 118 | 119 | 120 | 0 121 | 0 122 | 0 123 | 0 124 | 16 125 | 126 | 127 | 1 128 | 1 129 | 1 130 | 1 131 | 1 132 | 1 133 | 1 134 | 1 135 | 0 136 | 1 137 | 138 | 139 | 0 140 | 1 141 | 0 142 | 1 143 | 1 144 | 1 145 | 0 146 | 1 147 | 0 148 | 1 149 | 150 | 0 151 | -1 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 0 171 | 0 172 | 0 173 | 0 174 | 0 175 | -1 176 | 177 | 0 178 | 179 | 180 | 181 | 182 | 183 | 184 | 0 185 | 186 | 187 | 188 | 2 189 | 0 190 | 2 191 | 0 192 | 0 193 | 1 194 | 0 195 | 1 196 | 1 197 | 1 198 | 1 199 | 1 200 | 0 201 | 0 202 | 1 203 | 0 204 | 0 205 | 0 206 | 0 207 | 0 208 | 0 209 | 0 210 | 0 211 | 0 212 | 0 213 | 0 214 | 0 215 | 0 216 | 0 217 | 0 218 | 0 219 | 0 220 | 0 221 | 0 222 | 0 223 | 0 224 | 0 225 | 0 226 | 0 227 | 0 228 | 0 229 | 230 | 231 | 0 232 | 0x0 233 | 0xffff 234 | 235 | 236 | 0 237 | 0x0 238 | 0x0 239 | 240 | 241 | 0 242 | 0x0 243 | 0x0 244 | 245 | 246 | 0 247 | 0x0 248 | 0x0 249 | 250 | 251 | 0 252 | 0x0 253 | 0x0 254 | 255 | 256 | 0 257 | 0x0 258 | 0x0 259 | 260 | 261 | 0 262 | 0x0 263 | 0x0 264 | 265 | 266 | 0 267 | 0x0 268 | 0x0 269 | 270 | 271 | 1 272 | 0x0 273 | 0xeff9 274 | 275 | 276 | 0 277 | 0x0 278 | 0x100 279 | 280 | 281 | 0 282 | 0x0 283 | 0xf00 284 | 285 | 286 | 0 287 | 0x0 288 | 0x0 289 | 290 | 291 | 0 292 | 0x0 293 | 0x0 294 | 295 | 296 | 297 | 298 | 0 299 | 0 300 | 1 301 | 0 302 | 1 303 | 3 304 | 8 305 | 2 306 | 1 307 | 1 308 | 0 309 | 0 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 0 319 | 1 320 | 0 321 | 0 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 0 331 | 0 332 | 1 333 | 0 334 | 2 335 | 1 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | Source Group 1 365 | 366 | 367 | action.c 368 | 1 369 | .\action.c 370 | 371 | 372 | Robot.c 373 | 1 374 | .\Robot.c 375 | 376 | 377 | timer.c 378 | 1 379 | .\timer.c 380 | 381 | 382 | uart.c 383 | 1 384 | .\uart.c 385 | 386 | 387 | delay.c 388 | 1 389 | .\delay.c 390 | 391 | 392 | pwm.c 393 | 1 394 | .\pwm.c 395 | 396 | 397 | XFS5152V2.c 398 | 1 399 | .\XFS5152V2.c 400 | 401 | 402 | adc.c 403 | 1 404 | .\adc.c 405 | 406 | 407 | IIC.c 408 | 1 409 | .\IIC.c 410 | 411 | 412 | MPU6050.c 413 | 1 414 | .\MPU6050.c 415 | 416 | 417 | oled.c 418 | 1 419 | .\oled.c 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 |
428 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/Target 1.BAT: -------------------------------------------------------------------------------- 1 | SET C51INC=D:\MDK\C51\Inc;D:\MDK\C51\Inc\STC 2 | SET C51LIB=D:\MDK\C51\Lib 3 | SET CPU_TYPE=STC15W4K32S4 4 | SET CPU_VENDOR=STC 5 | SET UV2_TARGET=Target 1 6 | SET CPU_XTAL=0x02160EC0 7 | "D:\MDK\C51\BIN\C51.EXE" @"action.__i" 8 | "D:\MDK\C51\BIN\C51.EXE" @"Robot.__i" 9 | "D:\MDK\C51\BIN\C51.EXE" @"timer.__i" 10 | "D:\MDK\C51\BIN\C51.EXE" @"uart.__i" 11 | "D:\MDK\C51\BIN\C51.EXE" @"delay.__i" 12 | "D:\MDK\C51\BIN\C51.EXE" @"pwm.__i" 13 | "D:\MDK\C51\BIN\C51.EXE" @"XFS515~1.__I" 14 | "D:\MDK\C51\BIN\C51.EXE" @"adc.__i" 15 | "D:\MDK\C51\BIN\C51.EXE" @"IIC.__i" 16 | "D:\MDK\C51\BIN\C51.EXE" @"MPU6050.__i" 17 | "D:\MDK\C51\BIN\C51.EXE" @"oled.__i" 18 | "D:\MDK\C51\BIN\BL51.EXE" @"Robot.lnp" 19 | "D:\MDK\C51\BIN\OH51.EXE" "Robot" 20 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/XFS5152V2.LST: -------------------------------------------------------------------------------- 1 | C51 COMPILER V9.54 XFS5152V2 04/30/2020 01:44:05 PAGE 1 2 | 3 | 4 | C51 COMPILER V9.54, COMPILATION OF MODULE XFS5152V2 5 | OBJECT MODULE PLACED IN XFS5152V2.OBJ 6 | COMPILER INVOKED BY: D:\MDK\C51\BIN\C51.EXE XFS5152V2.c LARGE OPTIMIZE(8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS(2) 7 | 8 | line level source 9 | 10 | 1 /***************************************************************** 11 | 2 ** 名称:YS-XFS5152语音合成配套程序 12 | 3 ** 说明:用户在使用程序时,只需要编写好 串口发送函数PrintCom();即可, 13 | 4 直接调用本文件进行播放即可,在编写程序时,注意判断语音合成模 14 | 5 块的返回值,根据返回值进行下一次播放,如不接收返回值则无法进 15 | 6 行下一次播放。 16 | 7 /*******************************************************************/ 17 | 8 18 | 9 #include "XFS5152V2.h" 19 | 10 #include "uart.h" 20 | 11 21 | 12 /**************芯片设置命令*********************/ 22 | 13 code uchar XFS_StopCom[]= {0xFD,0X00,0X01,0X02}; //停止合成 23 | 14 code uchar XFS_SuspendCom[]= {0XFD,0X00,0X01,0X03}; //暂停合成 24 | 15 code uchar XFS_RecoverCom[]= {0XFD,0X00,0X01,0X04}; //恢复合成 25 | 16 code uchar XFS_ChackCom[]= {0XFD,0X00,0X01,0X21}; //状态查询 26 | 17 code uchar XFS_PowerDownCom[]= {0XFD,0X00,0X01,0X88}; //进入POWER DOWN 状态命令 27 | 18 28 | 19 /***********************************************/ 29 | 20 30 | 21 //声音参数设定 31 | 22 code uchar YSpeed[11][6] = {"[s0]","[s1]","[s2]","[s3]","[s4]","[s5]","[s6]","[s7]","[s8]","[s9]","[s10]"} 32 | -;//语速调整参数 33 | 23 code uchar YTone[11][6] = {"[t0]","[t1]","[t2]","[t3]","[t4]","[t5]","[t6]","[t7]","[t8]","[t9]","[t10]"}; 34 | -//语调调整参数 35 | 24 code uchar YVolume[11][6] = {"[v0]","[v1]","[v2]","[v3]","[v4]","[v5]","[v6]","[v7]","[v8]","[v9]","[v10]" 36 | -};//音量调整参数 37 | 25 code uchar YPeople[6][6] = {"[m3]","[m51]","[m52]","[m53]","[m54]","[m55]"};//发音人 38 | 26 39 | 27 static uchar YS = 5;//语速指针 0-10 40 | 28 static uchar YT = 5;//音调指针 0-10 41 | 29 static uchar YV = 8;//音量指针 0-10 42 | 30 static uchar YP = 1;//发音人指针 0-5 43 | 31 44 | 32 /*********************************************************** 45 | 33 * 名 称: Strlen 46 | 34 * 功 能: 计算字符串长度 47 | 35 * 入口参数: *DAT:文本指针变量 48 | 36 * 出口参数: 49 | 37 * 说 明: 50 | 38 **********************************************************/ 51 | 39 unsigned short Strlen(uchar *DAT) 52 | 40 { 53 | 41 1 unsigned short length; 54 | 42 1 for( length = 0; *DAT++ ; length++ ); 55 | 43 1 return length; 56 | 44 1 } 57 | 45 58 | 46 /*********************************************************** 59 | 47 * 名 称: Strcpy 60 | 48 * 功 能: 串拷贝函数 61 | 49 * 入口参数: *info *data:文本指针变量 62 | 50 * 出口参数: void 63 | 51 * 说 明: 64 | 52 **********************************************************/ 65 | C51 COMPILER V9.54 XFS5152V2 04/30/2020 01:44:05 PAGE 2 66 | 67 | 53 void Strcpy(uchar *info,uchar *dat) 68 | 54 { 69 | 55 1 while( *dat ) 70 | 56 1 { 71 | 57 2 *info++ = *dat++; 72 | 58 2 } 73 | 59 1 *info = 0; 74 | 60 1 } 75 | *** WARNING C231 IN LINE 60 OF XFS5152V2.c: '_Strcpy': attempt to redefine intrinsic function 76 | 61 77 | 62 78 | 63 /*********************************************************** 79 | 64 * 名 称: YS-XFS5152 文本合成函数 80 | 65 * 功 能: 发送合成文本到XFS5152芯片进行合成播放 81 | 66 * 入口参数: *data:文本指针变量 82 | 67 * 出口参数: 83 | 68 * 说 明: 本函数只用于文本合成,具备背景音乐选择。默认波特率 84 | 69 为115200bps(这里不做限制)。 85 | 70 Frame_Info[500]长度设置为500 所以最多一次性发送的 86 | 71 信息字节为450以内。 87 | 72 * 调用方法:例: SYN_FrameInfo 88 | 73 **********************************************************/ 89 | 74 void XFS_FrameInfo(uchar *dat) 90 | 75 { 91 | 76 1 /****************需要发送的文本**********************************/ 92 | 77 1 unsigned char Frame_Info[500]= {1,1,1,1,1}; //定义的文本长度 前五个一定要设为非0,后面串连接时计算串� 93 | -ひ� 94 | 78 1 unsigned short length; 95 | 79 1 unsigned short pos; 96 | 80 1 unsigned short temp; 97 | 81 1 98 | 82 1 //连接声音参数的字符 99 | 83 1 temp = 5; 100 | 84 1 Strcpy(&Frame_Info[temp],YSpeed[YS]); //在信息串中加入语速 101 | 85 1 temp = Strlen(Frame_Info); 102 | 86 1 Strcpy(&Frame_Info[temp],YTone[YT]); //在信息串中加入语调 103 | 87 1 temp = Strlen(Frame_Info); 104 | 88 1 Strcpy(&Frame_Info[temp],YVolume[YV]); //在信息串中加入音量 105 | 89 1 temp = Strlen(Frame_Info); 106 | 90 1 Strcpy(&Frame_Info[temp],YPeople[YP]); //在信息串中加入发音人 107 | 91 1 temp = Strlen(Frame_Info); 108 | 92 1 109 | 93 1 length = Strlen(dat); //需要发送文本的长度 110 | 94 1 length = length+temp-3; //计算数据区的总长度 111 | 95 1 /*****************帧固定配置信息**************************************/ 112 | 96 1 Frame_Info[0] = 0xFD ; //构造帧头FD 113 | 97 1 Frame_Info[1] = length>>8 ; //构造数据区长度的高字节 114 | 98 1 Frame_Info[2] = length%256; //构造数据区长度的低字节 115 | 99 1 Frame_Info[3] = 0x01 ; //构造命令字:合成播放命令 116 | 100 1 Frame_Info[4] = GBK; //文本编码格式:GBK 117 | 101 1 118 | 102 1 /*******************发送帧信息***************************************/ 119 | 103 1 Strcpy(&Frame_Info[temp],dat); 120 | 104 1 for( pos = 0 ; pos> 8; //构造数据区长度的高字节 98 | Frame_Info[2] = length % 256; //构造数据区长度的低字节 99 | Frame_Info[3] = 0x01; //构造命令字:合成播放命令 100 | Frame_Info[4] = GBK; //文本编码格式:GBK 101 | 102 | /*******************发送帧信息***************************************/ 103 | Strcpy(&Frame_Info[temp], dat); 104 | for (pos = 0; pos < length + 3; pos++) 105 | { 106 | XFS_PutChar(Frame_Info[pos]); //用串口发送 可在配置文件config中配置XFS_PutChar宏来指定端口发送 107 | } 108 | } 109 | 110 | /*********************************************************** 111 | * 名 称: YSOrder 声音设置命令执行函数 112 | * 功 能: 设置语速语调音量以及人声 113 | * 入口参数: order为命令参数 范围0x00-0x07 114 | * 出口参数: 115 | * 说 明: 116 | * 调用方法:例: 本程序中在主函数中检测语音设置命令到来时执行 117 | **********************************************************/ 118 | void YSOrder(unsigned char order) //语音设置命令 119 | { 120 | unsigned char temp[20]; 121 | unsigned char num[3]; 122 | unsigned short length; 123 | switch (order) 124 | { 125 | case 0x01: 126 | YS = (YS + 1) % 11; //语速加快 127 | break; 128 | case 0x02: 129 | YS = (YS + 11 - 1) % 11; //语速减慢 130 | break; 131 | case 0x03: 132 | YT = (YT + 1) % 11; //语调提升 133 | break; 134 | case 0x04: 135 | YT = (YT + 11 - 1) % 11; //语调降低 136 | break; 137 | case 0x05: 138 | YV = (YV + 1) % 11; //音量加 139 | break; 140 | case 0x06: 141 | YV = (YV + 11 - 1) % 11; //音量减 142 | break; 143 | case 0x07: 144 | YP = (YP + 1) % 6; //换一种声音 145 | XFS_FrameInfo("我现在的声音是这样的"); 146 | break; 147 | case 0x08: //恢复默认值 148 | YS = 5; //语速指针 0-10 149 | YT = 5; //音调指针 0-10 150 | YV = 5; //音量指针 0-10 151 | YP = 1; //发音人指针 0-5 152 | XFS_FrameInfo("声音已恢复默认设置"); 153 | break; 154 | default: 155 | break; 156 | } 157 | if (order == 0x01 || order == 0x02) 158 | { 159 | if (YS == 10) 160 | { 161 | num[0] = 49; 162 | num[1] = 48; 163 | num[2] = 0; 164 | } 165 | else 166 | { 167 | num[0] = YS + 48; 168 | num[1] = 0; 169 | } 170 | Strcpy(temp, "语速已调到"); 171 | length = Strlen(temp); 172 | Strcpy(&temp[length], num); 173 | length = Strlen(temp); 174 | Strcpy(&temp[length], "级"); 175 | XFS_FrameInfo(temp); 176 | } 177 | else if (order == 0x03 || order == 0x04) 178 | { 179 | if (YT == 10) 180 | { 181 | num[0] = 49; 182 | num[1] = 48; 183 | num[2] = 0; 184 | } 185 | else 186 | { 187 | num[0] = YT + 48; 188 | num[1] = 0; 189 | } 190 | Strcpy(temp, "语调已调到"); 191 | length = Strlen(temp); 192 | Strcpy(&temp[length], num); 193 | length = Strlen(temp); 194 | Strcpy(&temp[length], "级"); 195 | XFS_FrameInfo(temp); 196 | } 197 | else if (order == 0x05 || order == 0x06) 198 | { 199 | 200 | if (YV == 10) 201 | { 202 | num[0] = 49; 203 | num[1] = 48; 204 | num[2] = 0; 205 | } 206 | else 207 | { 208 | num[0] = YV + 48; 209 | num[1] = 0; 210 | } 211 | Strcpy(temp, "音量已调到"); 212 | length = Strlen(temp); 213 | Strcpy(&temp[length], num); 214 | length = Strlen(temp); 215 | Strcpy(&temp[length], "级"); 216 | XFS_FrameInfo(temp); 217 | } 218 | } 219 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/XFS5152V2.h: -------------------------------------------------------------------------------- 1 | #ifndef __XFS5152V2_H 2 | #define __XFS5152V2_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | //定义编码格式 0x00~0x03 8 | #define GB2312 0x00 9 | #define GBK 0x01 10 | #define BIG5 0x02 11 | #define Unicode 0x03 12 | 13 | /**************芯片设置命令*********************/ 14 | code uchar XFS_StopCom[]; //停止合成 15 | code uchar XFS_SuspendCom[]; //暂停合成 16 | code uchar XFS_RecoverCom[]; //恢复合成 17 | code uchar XFS_ChackCom[]; //状态查询 芯片空闲返回0x4F 18 | code uchar XFS_PowerDownCom[]; //进入POWER DOWN 状态命令 19 | 20 | extern void XFS_FrameInfo(uchar *dat); //文本合成函数 21 | extern void YSOrder(unsigned char order); //语音设置命令 22 | 23 | #endif -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/action.LST: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/action.LST -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/action.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/action.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/action.__i: -------------------------------------------------------------------------------- 1 | "action.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/action.c: -------------------------------------------------------------------------------- 1 | #include "action.h" 2 | #include "delay.h" 3 | #include "pwm.h" 4 | 5 | //目标要到达的舵量 6 | int targetPwm[21] = {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 7 | 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 8 | 1500, 1500, 1500, 1500, 1500}; 9 | 10 | //记录当前的舵量 11 | int nowPwm[21] = {1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 12 | 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 13 | 1500, 1500, 1500, 1500, 1500}; 14 | 15 | //每次定时中断时要增加的舵机量 16 | int addPwm[21] = {0}; 17 | 18 | //舵机的安装误差 19 | /******************************************************************************************** 20 | 在为调整误差值前(即errorValue值全为0),通过串口发送Debug指令(下面有介绍)来查看当前舵机安装与理想中 21 | 位状态的差。误差值的计算:对应位上的值=1500-使舵机达到中位的值。 22 | 最后计算得到的值挨个填入errorValue数组中。 23 | ********************************************************************************************/ 24 | int errorValue[21] = {0}; 25 | 26 | void UpData(void); //pwm数据更新 27 | void CountAddPwm(int tempPwm[21], int frequency); //传入pwm以及减速倍率,定时器6开启时将自动缓慢生效 28 | 29 | /************************************************************************ 30 | 函数名称: CountAddPwm(uint tempPwm[21],uint frequency) 31 | 功能描述: 计算pwm每次数据更新的量 frequency为减速倍率 32 | 入口参数: tempPwm为本次目标pwm值 33 | 返 回 值: none 34 | 其他说明: 已经在定时器4中使用更新 35 | **************************************************************************/ 36 | void CountAddPwm(int tempPwm[21], int frequency) 37 | { 38 | uchar i; 39 | uchar changedI; 40 | for (i = 0; i < 21; i++) 41 | { 42 | if (tempPwm[i] > 0) 43 | { 44 | changedI = changeOrder[i]; //调换顺序的作用 45 | targetPwm[changedI] = tempPwm[i] - errorValue[i]; 46 | addPwm[changedI] = (targetPwm[changedI] - nowPwm[changedI]) / frequency; 47 | // targetPwm[i] = tempPwm[i]; 48 | // addPwm[i] = (targetPwm[i]-nowPwm[i])/frequency; 49 | } 50 | } 51 | } 52 | 53 | /************************************************************************ 54 | 函数名称: UpData(void) 55 | 功能描述: pwm数据更新 56 | 入口参数: none 57 | 返 回 值: none 58 | 其他说明: 已经在定时器4中使用更新 59 | **************************************************************************/ 60 | void UpData(void) 61 | { 62 | uchar pwmNumber; 63 | for (pwmNumber = 0; pwmNumber < 21; pwmNumber++) 64 | { 65 | if (addPwm[pwmNumber] > 0) 66 | { 67 | if (nowPwm[pwmNumber] < targetPwm[pwmNumber] - addPwm[pwmNumber]) 68 | nowPwm[pwmNumber] += addPwm[pwmNumber]; 69 | else 70 | { 71 | nowPwm[pwmNumber] = targetPwm[pwmNumber]; 72 | addPwm[pwmNumber] = 0; 73 | } 74 | 75 | PwmChange(pwmNumber, nowPwm[pwmNumber]); 76 | } 77 | if (addPwm[pwmNumber] < 0) 78 | { 79 | if (nowPwm[pwmNumber] > targetPwm[pwmNumber] - addPwm[pwmNumber]) 80 | nowPwm[pwmNumber] += addPwm[pwmNumber]; 81 | else 82 | { 83 | nowPwm[pwmNumber] = targetPwm[pwmNumber]; 84 | addPwm[pwmNumber] = 0; 85 | } 86 | PwmChange(pwmNumber, nowPwm[pwmNumber]); 87 | } 88 | } 89 | // for( pwmNumber = 0 ; pwmNumber<21 ; pwmNumber++ ) 90 | // PwmChange( pwmNumber, nowPwm[pwmNumber] ); 91 | UpDataTimingLeft(); //更新剩余低电平时间 92 | } 93 | 94 | /************************************************************************ 95 | 函数名称: DoAction(const uint *actionArr,uint length) 96 | 功能描述: 执行动作数组 97 | 入口参数: 指针型的actionArr length 98 | 返 回 值: none 99 | 其他说明: 该函数将传入的动作数组指针actionArr,以及actionArr的长度length(一定 100 | 要是22的倍数 每组第25位为执行的时间间隔)有兴趣的可根据需要自行修改。 101 | **************************************************************************/ 102 | void DoAction(const int *actionArr, int length) //执行动作数组函数 103 | { 104 | uint i = 0; 105 | for (i = 0; i < length; i += 22) //不带动作中途中断功能 106 | { 107 | CountAddPwm(&actionArr[i], actionArr[i + 21] / eachFrequencyTime); //50ms为定时器更新pwm的周期 108 | Delay50ms(actionArr[i + 21] / eachFrequencyTime); ////定时actionArr[i+22]/50个50ms 时间延缓 舵机减速控制的一部分(number最大为255) 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/action.h: -------------------------------------------------------------------------------- 1 | #ifndef __ACTION_H 2 | #define __ACTION_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | extern void CountAddPwm(int tempPwm[21], int frequency); //传入pwm以及减速倍率,定时器6开启时将自动缓慢生效 8 | extern void DoAction(const int *actionArr, int length); //执行动作数组函数 length为22的倍数 9 | extern void UpData(void); //pwm数据更新 10 | 11 | /************************************************************************ 12 | 以下为动作数组 22个为一个单位(一个动作) 13 | **************************************************************************/ 14 | 15 | #endif 16 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/adc.LST: -------------------------------------------------------------------------------- 1 | C51 COMPILER V9.54 ADC 04/30/2020 01:44:06 PAGE 1 2 | 3 | 4 | C51 COMPILER V9.54, COMPILATION OF MODULE ADC 5 | OBJECT MODULE PLACED IN adc.OBJ 6 | COMPILER INVOKED BY: D:\MDK\C51\BIN\C51.EXE adc.c LARGE OPTIMIZE(8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS(2) 7 | 8 | line level source 9 | 10 | 1 #include "adc.h" 11 | 2 #include "oled.h" 12 | 3 13 | 4 uint ADValue; 14 | 5 15 | 6 16 | 7 void ADC_init() 17 | 8 { 18 | 9 1 } 19 | 10 20 | 11 void ADCInterrupt() interrupt 5 21 | 12 { 22 | 13 1 } 23 | 24 | 25 | MODULE INFORMATION: STATIC OVERLAYABLE 26 | CODE SIZE = 2 ---- 27 | CONSTANT SIZE = ---- ---- 28 | XDATA SIZE = 2 ---- 29 | PDATA SIZE = ---- ---- 30 | DATA SIZE = ---- ---- 31 | IDATA SIZE = ---- ---- 32 | BIT SIZE = ---- ---- 33 | END OF MODULE INFORMATION. 34 | 35 | 36 | C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) 37 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/adc.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/adc.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/adc.__i: -------------------------------------------------------------------------------- 1 | "adc.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/adc.c: -------------------------------------------------------------------------------- 1 | #include "adc.h" 2 | #include "oled.h" 3 | 4 | uint ADValue; 5 | 6 | void ADC_init() 7 | { 8 | } 9 | 10 | void ADCInterrupt() interrupt 5 11 | { 12 | } 13 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/adc.h: -------------------------------------------------------------------------------- 1 | #ifndef __ADC_H 2 | #define __ADC_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | //ADC引脚为P1^2 在config.h中已经定义了ADC 8 | extern void ADC_init(); //AD采集的初始化 9 | extern uint ADValue; //用来存AD采集完的数值 10 | 11 | #endif -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/config.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/config.h -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/delay.LST: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/delay.LST -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/delay.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/delay.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/delay.__i: -------------------------------------------------------------------------------- 1 | "delay.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/delay.c: -------------------------------------------------------------------------------- 1 | #include "delay.h" 2 | #include "intrins.h" 3 | 4 | void Delay2500ms() //@22.1184MHz 5 | { 6 | unsigned char i, j, k; 7 | 8 | _nop_(); 9 | _nop_(); 10 | i = 211; 11 | j = 30; 12 | k = 11; 13 | do 14 | { 15 | do 16 | { 17 | while (--k) 18 | ; 19 | } while (--j); 20 | } while (--i); 21 | } 22 | 23 | void Delay1000ms() //@22.1184MHz 24 | { 25 | unsigned char i, j, k; 26 | 27 | _nop_(); 28 | _nop_(); 29 | i = 85; 30 | j = 12; 31 | k = 155; 32 | do 33 | { 34 | do 35 | { 36 | while (--k) 37 | ; 38 | } while (--j); 39 | } while (--i); 40 | } 41 | 42 | void Delay500ms() //@22.1184MHz 43 | { 44 | unsigned char i, j, k; 45 | 46 | _nop_(); 47 | _nop_(); 48 | i = 43; 49 | j = 6; 50 | k = 203; 51 | do 52 | { 53 | do 54 | { 55 | while (--k) 56 | ; 57 | } while (--j); 58 | } while (--i); 59 | } 60 | 61 | void Delay300ms() //@22.1184MHz 62 | { 63 | unsigned char i, j, k; 64 | 65 | _nop_(); 66 | _nop_(); 67 | i = 26; 68 | j = 55; 69 | k = 171; 70 | do 71 | { 72 | do 73 | { 74 | while (--k) 75 | ; 76 | } while (--j); 77 | } while (--i); 78 | } 79 | 80 | void Delay200ms() //@12.000MHz 81 | { 82 | unsigned char i, j, k; 83 | 84 | // _nop_(); 85 | // _nop_(); 86 | i = 10; 87 | j = 31; 88 | k = 147; 89 | do 90 | { 91 | do 92 | { 93 | while (--k) 94 | ; 95 | } while (--j); 96 | } while (--i); 97 | } 98 | 99 | void Delay150ms() //@22.1184MHz 100 | { 101 | unsigned char i, j, k; 102 | 103 | _nop_(); 104 | _nop_(); 105 | i = 13; 106 | j = 156; 107 | k = 83; 108 | do 109 | { 110 | do 111 | { 112 | while (--k) 113 | ; 114 | } while (--j); 115 | } while (--i); 116 | } 117 | 118 | void Delay100ms() //@22.1184MHz 119 | { 120 | unsigned char i, j, k; 121 | 122 | _nop_(); 123 | _nop_(); 124 | i = 9; 125 | j = 104; 126 | k = 139; 127 | do 128 | { 129 | do 130 | { 131 | while (--k) 132 | ; 133 | } while (--j); 134 | } while (--i); 135 | } 136 | 137 | //numberΪ¶¨Ê±50msµÄ¸öÊý 138 | void Delay50ms(unsigned char number) //@22.1184MHz 139 | { 140 | unsigned char i, j, k; 141 | 142 | while (number-- > 0) 143 | { 144 | _nop_(); 145 | _nop_(); 146 | i = 5; 147 | j = 52; 148 | k = 195; 149 | do 150 | { 151 | do 152 | { 153 | while (--k) 154 | ; 155 | } while (--j); 156 | } while (--i); 157 | } 158 | } 159 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/delay.h: -------------------------------------------------------------------------------- 1 | #ifndef _DELAY_H 2 | #define _DELAY_H 3 | 4 | extern void Delay2500ms(); 5 | extern void Delay1000ms(); 6 | extern void Delay500ms(); 7 | extern void Delay300ms(); 8 | extern void Delay200ms(); 9 | extern void Delay150ms(); 10 | extern void Delay100ms(); 11 | extern void Delay50ms(unsigned char number); //numberΪ��ʱ50ms�ĸ��� number���Ϊ255 12 | 13 | #endif -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/oled.LST: -------------------------------------------------------------------------------- 1 | C51 COMPILER V9.54 OLED 04/30/2020 01:44:06 PAGE 1 2 | 3 | 4 | C51 COMPILER V9.54, COMPILATION OF MODULE OLED 5 | OBJECT MODULE PLACED IN oled.OBJ 6 | COMPILER INVOKED BY: D:\MDK\C51\BIN\C51.EXE oled.c LARGE OPTIMIZE(8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS(2) 7 | 8 | line level source 9 | 10 | 1 #include "oled.h" 11 | 2 12 | 3 void oled_init() 13 | 4 { 14 | 5 1 15 | 6 1 } 16 | 17 | 18 | MODULE INFORMATION: STATIC OVERLAYABLE 19 | CODE SIZE = 1 ---- 20 | CONSTANT SIZE = ---- ---- 21 | XDATA SIZE = ---- ---- 22 | PDATA SIZE = ---- ---- 23 | DATA SIZE = ---- ---- 24 | IDATA SIZE = ---- ---- 25 | BIT SIZE = ---- ---- 26 | END OF MODULE INFORMATION. 27 | 28 | 29 | C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) 30 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/oled.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/oled.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/oled.__i: -------------------------------------------------------------------------------- 1 | "oled.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/oled.c: -------------------------------------------------------------------------------- 1 | #include "oled.h" 2 | 3 | void oled_init() 4 | { 5 | 6 | } -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/oled.h: -------------------------------------------------------------------------------- 1 | #ifndef __OLED_H 2 | #define __OLED_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | extern void oled_init(); 8 | 9 | #endif -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/pwm.LST: -------------------------------------------------------------------------------- 1 | C51 COMPILER V9.54 PWM 04/30/2020 01:44:05 PAGE 1 2 | 3 | 4 | C51 COMPILER V9.54, COMPILATION OF MODULE PWM 5 | OBJECT MODULE PLACED IN pwm.OBJ 6 | COMPILER INVOKED BY: D:\MDK\C51\BIN\C51.EXE pwm.c LARGE OPTIMIZE(8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS(2) 7 | 8 | line level source 9 | 10 | 1 #include "pwm.h" 11 | 2 12 | 3 13 | 4 //调换舵机口顺序 14 | 5 code uchar changeOrder[21] = { 0,1,2,3,4,5,6,7,20, 8,9,10,11,12,13,14,15,19, 18,17,16}; 15 | 6 16 | 7 //21路PWM 定时值的高8位与低8位 17 | 8 static uchar timingValueH[24]= {0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF5, 0xF5,0xF5,0xF5,0xF5,0xF5,0xF5,0xF 18 | -5,0xF5, 0xF5,0xF5,0xF5,0xF5,0xF5, 0xC6,0xC6,0xA6}; 19 | 9 static uchar timingValueL[24]= {0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, 0x33,0x33,0x33,0x33,0x33,0x33,0x3 20 | -3,0x33, 0x33,0x33,0x33,0x33,0x33, 0x66,0x66,0x00}; 21 | 10 22 | 11 //三组定时器使用的pwm计数值下标 23 | 12 static uchar PwmCH0_CountFlag = 0; 24 | 13 static uchar PwmCH1_CountFlag = 0; 25 | 14 static uchar PwmCH2_CountFlag = 0; 26 | 15 27 | 16 //低电平的剩余时间 28 | 17 static uint PwmCH0_TimingLeftValue = 0; 29 | 18 static uint PwmCH1_TimingLeftValue = 0; 30 | 19 static uint PwmCH2_TimingLeftValue = 0; 31 | 20 32 | 21 33 | 22 //引脚定义: 34 | 23 //P44->H1 P43->H2 P42->H3 35 | 24 //P20->L1 P00->R1 36 | 25 //P21->L2 P01->R2 37 | 26 //P22->L3 P02->R3 38 | 27 //P23->L4 P03->R4 39 | 28 //P24->L5 P04->R5 40 | 29 //P25->L6 P05->R6 41 | 30 //P26->L7 P06->R7 42 | 31 //P27->L8 P07->R8 43 | 32 //P45->L9 P46->R9 44 | 33 //P4^4->H1 P4^3->H2 P4^2->H3 45 | 34 46 | 35 //pwm通道0 同时生成8路pwm信号 timingValueH timingValueL中前8个数据决定高电平时间 47 | 36 void PwmCH0_Control(void) 48 | 37 { 49 | 38 1 if( PwmCH0_CountFlag == 8 ) //到达剩余低电平时间 50 | 39 1 { 51 | 40 2 P0 = 0x00; 52 | 41 2 CH0_TH = timingValueH[21]; 53 | 42 2 CH0_TL = timingValueL[21]; 54 | 43 2 } 55 | 44 1 else //定时pwmL1~8 56 | 45 1 { 57 | 46 2 if( PwmCH0_CountFlag == 0 ) 58 | 47 2 P0 = 0x01; 59 | 48 2 else 60 | 49 2 P0 <<= 1; 61 | 50 2 CH0_TH = timingValueH[ PwmCH0_CountFlag ]; //定时时间赋值 62 | 51 2 CH0_TL = timingValueL[ PwmCH0_CountFlag ]; 63 | 52 2 } 64 | 53 1 PwmCH0_CountFlag = (PwmCH0_CountFlag+1)%9; //下标推进 65 | C51 COMPILER V9.54 PWM 04/30/2020 01:44:05 PAGE 2 66 | 67 | 54 1 } 68 | 55 69 | 56 //pwm通道1 同时生成8路pwm信号 timingValueH timingValueL中第9-16个数据决定高电平时间 70 | 57 void PwmCH1_Control(void) 71 | 58 { 72 | 59 1 if( PwmCH1_CountFlag == 8 ) //到达剩余低电平时间 73 | 60 1 { 74 | 61 2 P2 = 0x00; 75 | 62 2 CH1_TH = timingValueH[22]; 76 | 63 2 CH1_TL = timingValueL[22]; 77 | 64 2 } 78 | 65 1 else //定时pwmR1~8 79 | 66 1 { 80 | 67 2 if( PwmCH1_CountFlag == 0 ) 81 | 68 2 P2 = 0x01; 82 | 69 2 else 83 | 70 2 P2 <<= 1; 84 | 71 2 CH1_TH = timingValueH[ PwmCH1_CountFlag+8 ]; //定时时间赋值 85 | 72 2 CH1_TL = timingValueL[ PwmCH1_CountFlag+8 ]; 86 | 73 2 } 87 | 74 1 PwmCH1_CountFlag = (PwmCH1_CountFlag+1)%9; //下标推进 88 | 75 1 } 89 | 76 90 | 77 //pwm通道2 同时生成5路pwm信号 timingValueH timingValueL中第17-21个数据决定高电平时间 91 | 78 void PwmCH2_Control(void) 92 | 79 { 93 | 80 1 if( PwmCH2_CountFlag == 5 ) //到达剩余低电平时间 94 | 81 1 { 95 | 82 2 P4 &= 0x83; 96 | 83 2 CH2_TH = timingValueH[23]; 97 | 84 2 CH2_TL = timingValueL[23]; 98 | 85 2 } 99 | 86 1 else //定时pwmH0~4 100 | 87 1 { 101 | 88 2 if( PwmCH1_CountFlag == 0 ) 102 | 89 2 P4 = P4&0x83|0x04; 103 | 90 2 else 104 | 91 2 P4 = P4&0x83|(0x04<>8; //赋值此路pwm 119 | 106 1 timingValueL[pwmNumber] = (pwmDuty<<8)>>8; //赋值此路pwm 120 | 107 1 } 121 | 108 122 | 109 //更新剩余低电平时间 123 | 110 void UpDataTimingLeft() 124 | 111 { 125 | 112 1 uchar count; 126 | 113 1 127 | 114 1 //计算剩余低电平的剩余时间 128 | 115 1 PwmCH0_TimingLeftValue = 28672;//20ms 需要大概36864个计数值 28672 = 65536-36864 129 | C51 COMPILER V9.54 PWM 04/30/2020 01:44:05 PAGE 3 130 | 131 | 116 1 for( count = 0 ; count<8 ; count++ ) 132 | 117 1 PwmCH0_TimingLeftValue += ( 65536-(timingValueH[count]<<8|timingValueL[count]) ); //注意'|'符号不� 133 | -苡眉哟� 向下兼容,数据会变成8位 134 | 118 1 timingValueH[21] = PwmCH0_TimingLeftValue>>8; //更新剩余低电平时间 135 | 119 1 timingValueL[21] = PwmCH0_TimingLeftValue; //等价于 timingValueL[21] = (PwmCH0_TimingLeftValue<<8)>>8; 136 | 120 1 137 | 121 1 PwmCH1_TimingLeftValue = 28672;//20ms 需要大概36864个计数值 28672 = 65536-36864 138 | 122 1 for( count = 8 ; count<16 ; count++ ) 139 | 123 1 PwmCH1_TimingLeftValue += ( 65536-(timingValueH[count]<<8|timingValueL[count]) ); //注意'|'符号不� 140 | -苡眉哟� 向下兼容,数据会变成8位 141 | 124 1 timingValueH[22] = PwmCH1_TimingLeftValue>>8; //更新剩余低电平时间 142 | 125 1 timingValueL[22] = PwmCH1_TimingLeftValue; //等价于 timingValueL[22] = (PwmCH1_TimingLeftValue<<8)>>8; 143 | 126 1 144 | 127 1 PwmCH2_TimingLeftValue = 28672;//20ms 需要大概36864个计数值 28672 = 65536-36864 145 | 128 1 for( count = 16 ; count<21 ; count++ ) 146 | 129 1 PwmCH2_TimingLeftValue += ( 65536-(timingValueH[count]<<8|timingValueL[count]) ); //注意'|'符号不� 147 | -苡眉哟� 向下兼容,数据会变成8位 148 | 130 1 timingValueH[23] = PwmCH2_TimingLeftValue>>8; //更新剩余低电平时间 149 | 131 1 timingValueL[23] = PwmCH2_TimingLeftValue; //等价于 timingValueL[23] = (PwmCH2_TimingLeftValue<<8)>>8; 150 | 132 1 151 | 133 1 } 152 | 153 | 154 | MODULE INFORMATION: STATIC OVERLAYABLE 155 | CODE SIZE = 603 ---- 156 | CONSTANT SIZE = 21 ---- 157 | XDATA SIZE = 57 1 158 | PDATA SIZE = ---- ---- 159 | DATA SIZE = ---- ---- 160 | IDATA SIZE = ---- ---- 161 | BIT SIZE = ---- ---- 162 | END OF MODULE INFORMATION. 163 | 164 | 165 | C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) 166 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/pwm.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/pwm.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/pwm.__i: -------------------------------------------------------------------------------- 1 | "pwm.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/pwm.c: -------------------------------------------------------------------------------- 1 | #include "pwm.h" 2 | 3 | //调换舵机口顺序 4 | code uchar changeOrder[21] = {0, 1, 2, 3, 4, 5, 6, 7, 5 | 20, 8, 9, 10, 11, 12, 13, 14, 6 | 15, 19, 18, 17, 16}; 7 | 8 | //21路PWM 定时值的高8位与低8位 9 | static uchar timingValueH[24] = {0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 10 | 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 11 | 0xF5, 0xF5, 0xF5, 0xF5, 0xF5, 12 | 0xC6, 0xC6, 0xA6}; 13 | 14 | static uchar timingValueL[24] = {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 15 | 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 16 | 0x33, 0x33, 0x33, 0x33, 0x33, 17 | 0x66, 0x66, 0x00}; 18 | 19 | //三组定时器使用的pwm计数值下标 20 | static uchar PwmCH0_CountFlag = 0; 21 | static uchar PwmCH1_CountFlag = 0; 22 | static uchar PwmCH2_CountFlag = 0; 23 | 24 | //低电平的剩余时间 25 | static uint PwmCH0_TimingLeftValue = 0; 26 | static uint PwmCH1_TimingLeftValue = 0; 27 | static uint PwmCH2_TimingLeftValue = 0; 28 | 29 | //引脚定义: 30 | //P44->H1 P43->H2 P42->H3 31 | //P20->L1 P00->R1 32 | //P21->L2 P01->R2 33 | //P22->L3 P02->R3 34 | //P23->L4 P03->R4 35 | //P24->L5 P04->R5 36 | //P25->L6 P05->R6 37 | //P26->L7 P06->R7 38 | //P27->L8 P07->R8 39 | //P45->L9 P46->R9 40 | //P4^4->H1 P4^3->H2 P4^2->H3 41 | 42 | //pwm通道0 同时生成8路pwm信号 timingValueH timingValueL中前8个数据决定高电平时间 43 | void PwmCH0_Control(void) 44 | { 45 | if (PwmCH0_CountFlag == 8) //到达剩余低电平时间 46 | { 47 | P0 = 0x00; 48 | CH0_TH = timingValueH[21]; 49 | CH0_TL = timingValueL[21]; 50 | } 51 | else //定时pwmL1~8 52 | { 53 | if (PwmCH0_CountFlag == 0) 54 | P0 = 0x01; 55 | else 56 | P0 <<= 1; 57 | CH0_TH = timingValueH[PwmCH0_CountFlag]; //定时时间赋值 58 | CH0_TL = timingValueL[PwmCH0_CountFlag]; 59 | } 60 | PwmCH0_CountFlag = (PwmCH0_CountFlag + 1) % 9; //下标推进 61 | } 62 | 63 | //pwm通道1 同时生成8路pwm信号 timingValueH timingValueL中第9-16个数据决定高电平时间 64 | void PwmCH1_Control(void) 65 | { 66 | if (PwmCH1_CountFlag == 8) //到达剩余低电平时间 67 | { 68 | P2 = 0x00; 69 | CH1_TH = timingValueH[22]; 70 | CH1_TL = timingValueL[22]; 71 | } 72 | else //定时pwmR1~8 73 | { 74 | if (PwmCH1_CountFlag == 0) 75 | P2 = 0x01; 76 | else 77 | P2 <<= 1; 78 | CH1_TH = timingValueH[PwmCH1_CountFlag + 8]; //定时时间赋值 79 | CH1_TL = timingValueL[PwmCH1_CountFlag + 8]; 80 | } 81 | PwmCH1_CountFlag = (PwmCH1_CountFlag + 1) % 9; //下标推进 82 | } 83 | 84 | //pwm通道2 同时生成5路pwm信号 timingValueH timingValueL中第17-21个数据决定高电平时间 85 | void PwmCH2_Control(void) 86 | { 87 | if (PwmCH2_CountFlag == 5) //到达剩余低电平时间 88 | { 89 | P4 &= 0x83; 90 | CH2_TH = timingValueH[23]; 91 | CH2_TL = timingValueL[23]; 92 | } 93 | else //定时pwmH0~4 94 | { 95 | if (PwmCH1_CountFlag == 0) 96 | P4 = P4 & 0x83 | 0x04; 97 | else 98 | P4 = P4 & 0x83 | (0x04 << PwmCH2_CountFlag); 99 | CH2_TH = timingValueH[PwmCH2_CountFlag + 16]; //定时时间赋值 100 | CH2_TL = timingValueL[PwmCH2_CountFlag + 16]; 101 | } 102 | PwmCH2_CountFlag = (PwmCH2_CountFlag + 1) % 6; //下标推进 103 | } 104 | 105 | //通过指定高电平时间来改变timingValueH timingValueL中的值,达到改变对应pwm信号的高电平时间 106 | void PwmChange(uchar pwmNumber, uint pwmDuty) //pwmNumber范围0~20 pwmDuty(1~2500us) 107 | { 108 | pwmDuty = 65536 - (uint)pwmDuty * 1.8432; //因为用的是22.118400MHz晶振 定时器12分频 1us有1.8432个节拍 109 | //先改变定时时间的值 110 | //使用位操作,运算速度更快 111 | pwmNumber = changeOrder[pwmNumber]; //调换顺序 112 | timingValueH[pwmNumber] = pwmDuty >> 8; //赋值此路pwm 113 | timingValueL[pwmNumber] = (pwmDuty << 8) >> 8; //赋值此路pwm 114 | } 115 | 116 | //更新剩余低电平时间 117 | void UpDataTimingLeft() 118 | { 119 | uchar count; 120 | 121 | //计算剩余低电平的剩余时间 122 | PwmCH0_TimingLeftValue = 28672; //20ms 需要大概36864个计数值 28672 = 65536-36864 123 | for (count = 0; count < 8; count++) 124 | PwmCH0_TimingLeftValue += (65536 - (timingValueH[count] << 8 | timingValueL[count])); //注意'|'符号不能用加代替 向下兼容,数据会变成8位 125 | timingValueH[21] = PwmCH0_TimingLeftValue >> 8; //更新剩余低电平时间 126 | timingValueL[21] = PwmCH0_TimingLeftValue; //等价于 timingValueL[21] = (PwmCH0_TimingLeftValue<<8)>>8; 127 | 128 | PwmCH1_TimingLeftValue = 28672; //20ms 需要大概36864个计数值 28672 = 65536-36864 129 | for (count = 8; count < 16; count++) 130 | PwmCH1_TimingLeftValue += (65536 - (timingValueH[count] << 8 | timingValueL[count])); //注意'|'符号不能用加代替 向下兼容,数据会变成8位 131 | timingValueH[22] = PwmCH1_TimingLeftValue >> 8; //更新剩余低电平时间 132 | timingValueL[22] = PwmCH1_TimingLeftValue; //等价于 timingValueL[22] = (PwmCH1_TimingLeftValue<<8)>>8; 133 | 134 | PwmCH2_TimingLeftValue = 28672; //20ms 需要大概36864个计数值 28672 = 65536-36864 135 | for (count = 16; count < 21; count++) 136 | PwmCH2_TimingLeftValue += (65536 - (timingValueH[count] << 8 | timingValueL[count])); //注意'|'符号不能用加代替 向下兼容,数据会变成8位 137 | timingValueH[23] = PwmCH2_TimingLeftValue >> 8; //更新剩余低电平时间 138 | timingValueL[23] = PwmCH2_TimingLeftValue; //等价于 timingValueL[23] = (PwmCH2_TimingLeftValue<<8)>>8; 139 | } 140 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/pwm.h: -------------------------------------------------------------------------------- 1 | #ifndef __PWM_H 2 | #define __PWM_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | extern void PwmChange(uchar pwmNumber, uint pwmDuty); //pwmNumber范围0~21 pwmDuty(1~2500) 8 | extern void UpDataTimingLeft(void); //更新剩余低电平时间 9 | extern void PwmCH0_Control(void); //pwm通道0 同时生成8路pwm信号 timingValueH timingValueL中前8个数据决定高电平时间 10 | extern void PwmCH1_Control(void); //pwm通道1 同时生成8路pwm信号 timingValueH timingValueL中第9-16个数据决定高电平时间 11 | extern void PwmCH2_Control(void); //pwm通道2 同时生成5路pwm信号 timingValueH timingValueL中第17-21个数据决定高电平时间 12 | 13 | //引脚定义: 14 | //P44->H1 P43->H2 P42->H3 15 | //P20->L1 P00->R1 16 | //P21->L2 P01->R2 17 | //P22->L3 P02->R3 18 | //P23->L4 P03->R4 19 | //P24->L5 P04->R5 20 | //P25->L6 P05->R6 21 | //P26->L7 P06->R7 22 | //P27->L8 P07->R8 23 | //P45->L9 P46->R9 24 | 25 | sbit L1 = P2 ^ 0; 26 | sbit R1 = P0 ^ 0; 27 | sbit L2 = P2 ^ 1; 28 | sbit R2 = P0 ^ 1; 29 | sbit L3 = P2 ^ 2; 30 | sbit R3 = P0 ^ 2; 31 | sbit L4 = P2 ^ 3; 32 | sbit R4 = P0 ^ 3; 33 | sbit L5 = P2 ^ 4; 34 | sbit R5 = P0 ^ 4; 35 | sbit L6 = P2 ^ 5; 36 | sbit R6 = P0 ^ 5; 37 | sbit L7 = P2 ^ 6; 38 | sbit R7 = P0 ^ 6; 39 | sbit L8 = P2 ^ 7; 40 | sbit R8 = P0 ^ 7; 41 | sbit L9 = P4 ^ 5; 42 | sbit R9 = P4 ^ 6; 43 | sbit H1 = P4 ^ 4; 44 | sbit H2 = P4 ^ 3; 45 | sbit H3 = P4 ^ 2; 46 | 47 | //调换舵机口顺序 48 | extern code uchar changeOrder[21]; 49 | 50 | #endif -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/stc15w.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/stc15w.h -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/timer.LST: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/timer.LST -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/timer.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/timer.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/timer.__i: -------------------------------------------------------------------------------- 1 | "timer.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/timer.c: -------------------------------------------------------------------------------- 1 | #include "timer.h" 2 | #include "pwm.h" 3 | #include "action.h" 4 | 5 | uchar timer4Flag = 0; 6 | 7 | //定时器0初始化 8 | void Timer0Init_Mode1T(void) 9 | { 10 | EA = 1; //开启总中断 11 | ET0 = 1; // 定时器0可用 12 | TMOD |= 0x01; //设置定时器0为工作方式1(16位计数器) 13 | //先初始赋值 14 | TH0 = 0xFA; 15 | TL0 = 0x24; 16 | TR0 = 1; //定时器0开始计数 17 | } 18 | 19 | void Timer0Init_Mode12T(void) 20 | { 21 | AUXR &= 0x7F; //定时器时钟12T模式 22 | TMOD &= 0xF0; //设置定时器模式 23 | TMOD |= 0x01; //设置定时器0为工作方式1(16位计数器) 24 | TL0 = 0x00; //设置定时初值 25 | TH0 = 0x70; //设置定时初值 26 | TF0 = 0; //清除TF0标志 27 | TR0 = 1; //定时器0开始计时 28 | ET0 = 1; //使能定时器0中断 29 | EA = 1; 30 | } 31 | 32 | //定时器1初始化 33 | void Timer1Init_Mode1T(void) 34 | { 35 | EA = 1; //开启总中断 36 | ET1 = 1; // 定时器1可用 37 | TMOD |= 0x10; //设置定时器0为工作方式1(16位计数器) 38 | //先初始赋值 39 | TH1 = 0xFA; 40 | TL1 = 0x24; 41 | TR1 = 1; //定时器1开始计数 42 | } 43 | 44 | void Timer1Init_Mode12T(void) 45 | { 46 | AUXR &= 0xBF; //定时器时钟12T模式 47 | TMOD &= 0x0F; //设置定时器模式 48 | TL1 = 0x00; //设置定时初值 49 | TH1 = 0x70; //设置定时初值 50 | TF1 = 0; //清除TF1标志 51 | TR1 = 1; //定时器1开始计时 52 | EA = 1; //开启总中断 53 | ET1 = 1; // 定时器0可用 54 | } 55 | 56 | //定时器2初始化 57 | void Timer2Init_Mode1T(void) 58 | { 59 | EA = 1; //开启总中断 60 | IE2 |= 0x04; // 定时器2可用 61 | AUXR |= 0x04; //定时器时钟1T模式 62 | T2L = 0x9A; //设置定时初值 63 | T2H = 0xA9; //设置定时初值 64 | AUXR |= 0x10; //定时器2开始计时 65 | } 66 | 67 | void Timer2Init_Mode12T(void) 68 | { 69 | EA = 1; //开启总中断 70 | IE2 |= 0x04; // 定时器2可用 71 | AUXR &= 0xFB; //定时器时钟12T模式 72 | T2L = 0xCD; //设置定时初值 73 | T2H = 0xF8; //设置定时初值 74 | AUXR |= 0x10; //定时器2开始计时 75 | } 76 | 77 | //定时器3初始化 78 | void Timer3Init_Mode1T(void) 79 | { 80 | EA = 1; //开启总中断 81 | IE2 |= 0x20; // 定时器3可用 82 | T4T3M |= 0x02; //定时器时钟1T模式 83 | T3L = 0x9A; //设置定时初值 84 | T3H = 0xA9; //设置定时初值 85 | T4T3M |= 0x08; //定时器3开始计时 86 | } 87 | 88 | void Timer3Init_Mode12T(void) 89 | { 90 | EA = 1; //开启总中断 91 | IE2 |= 0x20; // 定时器3可用 92 | T4T3M &= 0xFD; //定时器时钟12T模式 93 | T3L = 0xCD; //设置定时初值 94 | T3H = 0xF8; //设置定时初值 95 | T4T3M |= 0x08; //定时器3开始计时 96 | } 97 | 98 | //定时器4初始化 99 | void Timer4Init_Mode1T(void) 100 | { 101 | EA = 1; //开启总中断 102 | IE2 |= 0x40; // 定时器4可用 103 | T4T3M |= 0x20; //定时器时钟1T模式 104 | T4L = 0x9A; //设置定时初值 105 | T4H = 0xA9; //设置定时初值 106 | T4T3M |= 0x80; //定时器4开始计时 107 | } 108 | 109 | void Timer4Init_Mode12T(void) 110 | { 111 | EA = 1; //开启总中断 112 | IE2 |= 0x40; // 定时器4可用 113 | T4T3M &= 0xDF; //定时器时钟12T模式 114 | T4L = 0x00; //设置定时初值 25ms 115 | T4H = 0x4C; //设置定时初值 25ms 116 | T4T3M |= 0x80; //定时器4开始计时 117 | } 118 | 119 | //定时器中断0 120 | void timer0(void) interrupt 1 121 | { 122 | PwmCH0_Control(); 123 | LED = !LED; 124 | } 125 | 126 | //定时器中断1 127 | void timer1(void) interrupt 3 128 | { 129 | PwmCH1_Control(); 130 | } 131 | 132 | //定时器中断2 133 | void timer2(void) interrupt 12 134 | { 135 | } 136 | 137 | //定时器中断3 138 | void timer3(void) interrupt 19 139 | { 140 | PwmCH2_Control(); 141 | } 142 | 143 | //定时器中断4 144 | void timer4(void) interrupt 20 145 | { 146 | timer4Flag = !timer4Flag; 147 | //confgi.h中配置的是50ms 所以要进两次中断才能达50ms 148 | T4L = 0x00; //设置定时初值 25ms 149 | T4H = 0x4C; //设置定时初值 25ms 150 | if (timer4Flag) 151 | { 152 | UpData(); 153 | } 154 | else 155 | { 156 | } 157 | } 158 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/timer.h: -------------------------------------------------------------------------------- 1 | #ifndef __TIMER_H 2 | #define __TIMER_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | extern void Timer0Init_Mode1T(void); //定时器0初始化1T模式 8 | extern void Timer0Init_Mode12T(void); //定时器0初始化12T模式 9 | extern void Timer1Init_Mode1T(void); //定时器1初始化1T模式 10 | extern void Timer1Init_Mode12T(void); //定时器1初始化12T模式 11 | extern void Timer2Init_Mode1T(void); //定时器2初始化1T模式 12 | extern void Timer2Init_Mode12T(void); //定时器2初始化12T模式 13 | extern void Timer3Init_Mode1T(void); //定时器3初始化1T模式 14 | extern void Timer3Init_Mode12T(void); //定时器3初始化12T模式 15 | extern void Timer4Init_Mode1T(void); //定时器4初始化1T模式 16 | extern void Timer4Init_Mode12T(void); //定时器4初始化12T模式 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/uart.LST: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/uart.LST -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/uart.OBJ: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/HexapodRobot_Code_STC15/uart.OBJ -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/uart.__i: -------------------------------------------------------------------------------- 1 | "uart.c" LARGE OPTIMIZE (8,SPEED) BROWSE MODP2 DEBUG OBJECTEXTEND TABS (2) -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/uart.c: -------------------------------------------------------------------------------- 1 | #include "uart.h" 2 | #include "action.h" 3 | 4 | uchar message1; //串口1的消息 5 | uchar message2; //串口2的消息 6 | uchar receiveFlag1 = 0; //接收标志 7 | 8 | uchar busy1; //串口1忙标志 9 | uchar busy2; //串口2忙标志 10 | 11 | //解析指令所用到的数据 12 | /**********************************************************************************/ 13 | //自定义的第一组USART1_RX_BUF缓冲区 用于缓存动作指令的数据 14 | uchar USART1_RX_BUF[USART1_REC_LEN]; //接收缓冲,最大USART1_REC_LEN个字节.末字节为换行符 15 | uchar USART1_RX_STA = 0; //接收状态标记 16 | uchar usart1ReceiveSuccess = 0; //一帧数据接收完成标志位 使用后要置0 17 | 18 | //自定义的第二组USART1_RX_BUF2缓冲区 用于操作播放语音的数据 19 | uchar USART1_RX_BUF2[USART1_REC_LEN2]; //接收缓冲,最大USART1_REC_LEN2个字节.末字节为换行符 20 | uchar USART1_RX_STA2 = 0; //接收状态标记 21 | uchar usart1ReceiveSuccess2 = 0; //一帧数据接收完成标志位 使用后要置0 22 | 23 | uchar firstdata = 0; //第一回接收到的值 24 | /**********************************************************************************/ 25 | 26 | /************************************************************************ 27 | 函数名称: AnalysisCom(void) 串口数据缓冲 28 | 功能描述: 接收数据 存在缓冲区USART1_RX_BUF或USART1_RX_BUF2中 29 | 入口参数: none 30 | 返 回 值: none 31 | 其他说明: 数据帧以0x0A 0x0D结尾(\r\n) 32 | **************************************************************************/ 33 | void AnalysisCom(void) 34 | { 35 | if (USART1_RX_STA == 0) 36 | { 37 | firstdata = message1; 38 | USART1_RX_BUF[USART1_RX_STA++] = message1; 39 | } 40 | else if (USART1_RX_STA2 == 0) 41 | { 42 | firstdata = message1; 43 | USART1_RX_BUF2[USART1_RX_STA2++] = message1; 44 | } 45 | else 46 | { 47 | if (firstdata == 'Y') 48 | { 49 | if ((USART1_RX_STA2 & 0x80) == 0) //接收未完成 50 | { 51 | if (USART1_RX_STA2 & 0x4000) //接收到了0x0d 52 | { 53 | if (message1 != 0x0a) 54 | USART1_RX_STA2 = 0; //接收错误,重新开始 55 | else 56 | { 57 | USART1_RX_STA2 |= 0x8000; //接收完成了 58 | USART1_RX_STA2 = 0; //自己添加的 达到循环覆盖信息的作用 59 | usart1ReceiveSuccess2 = 1; //接收一一帧完成标志位 60 | } 61 | } 62 | else //还没收到0X0D 63 | { 64 | if (message1 == 0x0d) 65 | { 66 | USART1_RX_BUF2[USART1_RX_STA2] = 0x00; 67 | USART1_RX_STA2 |= 0x4000; 68 | } 69 | else 70 | { 71 | USART1_RX_BUF2[USART1_RX_STA2 & 0X3FFF] = message1; 72 | USART1_RX_STA2++; 73 | if (USART1_RX_STA2 > (USART1_REC_LEN2 - 1)) 74 | USART1_RX_STA2 = 0; //接收数据错误,重新开始接收 75 | } 76 | } 77 | } 78 | } 79 | else 80 | { 81 | if ((USART1_RX_STA & 0x8000) == 0) //接收未完成 82 | { 83 | if (USART1_RX_STA & 0x4000) //接收到了0x0d 84 | { 85 | if (message1 != 0x0a) 86 | USART1_RX_STA = 0; //接收错误,重新开始 87 | else 88 | { 89 | USART1_RX_STA |= 0x8000; //接收完成了 90 | USART1_RX_STA = 0; //自己添加的 达到循环覆盖信息的作用 91 | usart1ReceiveSuccess = 1; //接收一一帧完成标志位 92 | } 93 | } 94 | else //还没收到0X0D 95 | { 96 | if (message1 == 0x0d) 97 | USART1_RX_STA |= 0x4000; 98 | else 99 | { 100 | USART1_RX_BUF[USART1_RX_STA & 0X3FFF] = message1; 101 | USART1_RX_STA++; 102 | if (USART1_RX_STA > (USART1_REC_LEN - 1)) 103 | USART1_RX_STA = 0; //接收数据错误,重新开始接收 104 | } 105 | } 106 | } 107 | } 108 | } 109 | } 110 | 111 | /************************************************************************ 112 | 函数名称: ReceiveDataConvertToPwmValue() 解析动作指令 113 | 功能描述: 解析动作指令 将冲区USART1_RX_BUF中数据转为各路pwm值(500-2500) 114 | 入口参数: none 115 | 返 回 值: none 116 | 其他说明: 117 | **************************************************************************/ 118 | void ReceiveDataConvertToPwmValue() 119 | { 120 | short len = 1; //标识处理数据时的buffer指针 121 | short pwm[21]; //存放当前动作组的pwm值 122 | short actionNum = 0; //存放动作组的个数值 123 | short executionTime; //存放当前动作组要执行的时间 124 | char flag; 125 | char i; 126 | 127 | //解析出帧头的数据(动作组的个数) 128 | while (USART1_RX_BUF[len] == ' ') 129 | len++; 130 | 131 | while (USART1_RX_BUF[len] < 58 && USART1_RX_BUF[len] > 47) 132 | { 133 | actionNum = actionNum * 10 + USART1_RX_BUF[len++] - 48; 134 | } 135 | 136 | usart1ReceiveSuccess = 0; //标志位清零 137 | //解析actionNum次数据 138 | while (actionNum-- && !usart1ReceiveSuccess) //标志位重新被置一的话说明有新的指令 需停止当前动作 139 | { 140 | executionTime = 0; 141 | flag = 0; 142 | for (i = 0; i < 21; i++) 143 | { 144 | pwm[i] = 0; 145 | } 146 | //解析动作数组的值 147 | while (flag < 21) 148 | { 149 | while (USART1_RX_BUF[len++] != ' ') 150 | ; 151 | while (USART1_RX_BUF[len] < 58 && USART1_RX_BUF[len] > 47) 152 | { 153 | pwm[flag] = pwm[flag] * 10 + USART1_RX_BUF[len++] - 48; 154 | } 155 | if (USART1_RX_BUF[len - 1] < 58 && USART1_RX_BUF[len - 1] > 47) 156 | flag++; 157 | } 158 | //解析此组动作组要执行的时间 159 | while (USART1_RX_BUF[len] == ' ') 160 | len++; 161 | while (USART1_RX_BUF[len] < 58 && USART1_RX_BUF[len] > 47) 162 | { 163 | executionTime = executionTime * 10 + USART1_RX_BUF[len++] - 48; 164 | } 165 | 166 | CountAddPwm(pwm, executionTime / eachFrequencyTime); //传入pwm以及减速倍率5,定时器6开启时将自动缓慢生效 167 | // delay_ms(executionTime);//等待动作结束 168 | } 169 | } 170 | 171 | /*---------------------------- 172 | UART1(串口1) 初始化函数 173 | -----------------------------*/ 174 | void Uart1Init(void) 175 | { 176 | P3 = 0x03; //P30 P31如果清零 串口将不能用 177 | 178 | // ACC = P_SW1; 179 | // ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=0 180 | // P_SW1 = ACC; //(P3.0/RxD, P3.1/TxD) 181 | 182 | //// ACC = P_SW1; 183 | //// ACC &= ~(S1_S0 | S1_S1); //S1_S0=1 S1_S1=0 184 | //// ACC |= S1_S0; //(P3.6/RxD_2, P3.7/TxD_2) 185 | //// P_SW1 = ACC; 186 | //// 187 | //// ACC = P_SW1; 188 | //// ACC &= ~(S1_S0 | S1_S1); //S1_S0=0 S1_S1=1 189 | //// ACC |= S1_S1; //(P1.6/RxD_3, P1.7/TxD_3) 190 | //// P_SW1 = ACC; 191 | 192 | //#if (PARITYBIT == NONE_PARITY) 193 | // SCON = 0x50; //8位可变波特率 194 | //#elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) 195 | // SCON = 0xda; //9位可变波特率,校验位初始为1 196 | //#elif (PARITYBIT == SPACE_PARITY) 197 | // SCON = 0xd2; //9位可变波特率,校验位初始为0 198 | //#endif 199 | 200 | // AUXR |= 0x40; //定时器1时钟为fosc,即1T 201 | // AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 202 | // TMOD &= 0x0F; //设定定时器1为16位自动重装方式 203 | // 204 | // TL1 = (65536 - (FOSC/4/BAUD1)); //设置波特率重装值 205 | // TH1 = (65536 - (FOSC/4/BAUD1))>>8; 206 | // ES = 1; //使能串口中断 207 | // EA = 1; //开总中断 208 | // ET1 = 0; //禁止定时器1中断 209 | // TR1 = 1; //启动定时器1 210 | 211 | // 可以简化为如下代码 212 | SCON = 0x50; //8位数据,可变波特率 213 | AUXR |= 0x01; //串口1选择定时器2为波特率发生器 214 | AUXR |= 0x04; //定时器2时钟为Fosc,即1T 215 | T2L = (65536 - (FOSC / 4 / BAUD1)); //设定定时初值 216 | T2H = (65536 - (FOSC / 4 / BAUD1)) >> 8; //设定定时初值 217 | AUXR |= 0x10; //启动定时器2 218 | } 219 | 220 | /*---------------------------- 221 | UART2(串口2) 初始化函数 222 | -----------------------------*/ 223 | void Uart2Init(void) 224 | { 225 | S2CON = 0x50; //8位数据,可变波特率 226 | AUXR |= 0x04; //定时器2时钟为Fosc,即1T 227 | T2L = (65536 - (FOSC / 4 / BAUD1)); //设定定时初值 228 | T2H = (65536 - (FOSC / 4 / BAUD1)) >> 8; //设定定时初值 229 | AUXR |= 0x10; //启动定时器2 230 | } 231 | 232 | /*---------------------------- 233 | UART1(串口1) 中断服务程序 234 | -----------------------------*/ 235 | void Uart1Interrupt() interrupt 4 using 1 236 | { 237 | if (RI) 238 | { 239 | RI = 0; //清除RI位 240 | receiveFlag1 = 1; //接收标志位置1 241 | message1 = SBUF; //取出信息 242 | AnalysisCom(); 243 | } 244 | if (TI) 245 | { 246 | TI = 0; //清除TI位 247 | busy1 = 0; //清忙标志 248 | } 249 | } 250 | 251 | /*---------------------------- 252 | UART2(串口2) 中断服务函数 253 | -----------------------------*/ 254 | void Uart2Interrupt() interrupt 8 using 1 255 | { 256 | if (S2CON & S2RI) 257 | { 258 | S2CON &= ~S2RI; //清除S2RI位 259 | message2 = S2BUF; //取出信息 260 | } 261 | if (S2CON & S2TI) 262 | { 263 | S2CON &= ~S2TI; //清除S2TI位 264 | busy2 = 0; //清忙标志 265 | } 266 | } 267 | 268 | /*---------------------------- 269 | 发送串口1数据(有校验的 差错检测) 270 | ----------------------------*/ 271 | void Uart1SendData(uchar dat) 272 | { 273 | while (busy1) 274 | ; //等待前面的数据发送完成 275 | ACC = dat; //获取校验位P (PSW.0) 276 | if (P) //根据P来设置校验位 277 | { 278 | #if (PARITYBIT == ODD_PARITY) 279 | TB8 = 0; //设置校验位为0 280 | #elif (PARITYBIT == EVEN_PARITY) 281 | TB8 = 1; //设置校验位为1 282 | #endif 283 | } 284 | else 285 | { 286 | #if (PARITYBIT == ODD_PARITY) 287 | TB8 = 1; //设置校验位为1 288 | #elif (PARITYBIT == EVEN_PARITY) 289 | TB8 = 0; //设置校验位为0 290 | #endif 291 | } 292 | busy1 = 1; 293 | SBUF = ACC; //写数据到UART数据寄存器 294 | } 295 | 296 | /*---------------------------- 297 | 发送串口2数据(有校验的 差错检测) 298 | ----------------------------*/ 299 | //在以下补充 300 | void Uart2SendData(uchar dat) 301 | { 302 | } 303 | 304 | /*---------------------------- 305 | 串口1发送字符串 306 | ----------------------------*/ 307 | void Uart1SendString(uchar *str) 308 | { 309 | while (*str) //检测字符串结束标志 310 | { 311 | Uart1Send(*str++); //发送当前字符 312 | } 313 | } 314 | 315 | /*---------------------------- 316 | 串口2发送字符串 317 | ----------------------------*/ 318 | void Uart2SendString(uchar *str) 319 | { 320 | while (*str) //检测字符串结束标志 321 | { 322 | Uart2Send(*str++); //发送当前字符 323 | } 324 | } 325 | 326 | /*---------------------------- 327 | 串口1发送字符 328 | ----------------------------*/ 329 | void Uart1Send(uchar dat) 330 | { 331 | SBUF = dat; 332 | while (!TI) 333 | ; //等待发送数据完成 334 | TI = 0; //清除发送完成标志位 335 | } 336 | 337 | /*---------------------------- 338 | 串口2发送字符 339 | ----------------------------*/ 340 | void Uart2Send(uchar dat) 341 | { 342 | while (!busy2) 343 | ; //等待前面发送数据的完成 344 | S2BUF = dat; //发送数据 345 | busy2 = 0; //清除忙标志位 346 | } 347 | -------------------------------------------------------------------------------- /HexapodRobot_Code_STC15/uart.h: -------------------------------------------------------------------------------- 1 | #ifndef __UART_H 2 | #define __UART_H 3 | 4 | #include "stc15w.h" 5 | #include "config.h" 6 | 7 | //串口1的部分定义 8 | /******************************************/ 9 | #define NONE_PARITY 0 //无校验 10 | #define ODD_PARITY 1 //奇校验 11 | #define EVEN_PARITY 2 //偶校验 12 | #define MARK_PARITY 3 //标记校验 13 | #define SPACE_PARITY 4 //空白校验 14 | 15 | #define PARITYBIT NONE_PARITY //定义校验位 16 | 17 | #define S1_S0 0x40 //P_SW1.6 18 | #define S1_S1 0x80 //P_SW1.7 19 | /******************************************/ 20 | 21 | //串口2的部分定义 22 | /****************************************/ 23 | #define S2RI 0x01 //S2CON.0 24 | #define S2TI 0x02 //S2CON.1 25 | #define S2_S0 0x01 //P_SW2.0 26 | /*****************************************/ 27 | 28 | typedef unsigned char BYTE; 29 | typedef unsigned int WORD; 30 | 31 | extern uchar receiveFlag1; //接收标志 32 | extern uchar message; //消息 33 | extern void Uart1Init(void); //串口1初始化 波特率的值和系统晶振频率可以在config.h中设置 34 | extern void Uart2Init(void); //串口2初始化 波特率的值和系统晶振频率可以在config.h中设置 35 | 36 | extern void Uart1SendString(uchar *str); //串口1发送字符串 37 | extern void Uart2SendString(uchar *str); //串口2发送字符串 38 | 39 | extern void Uart1SendData(uchar dat); //串口1发送字符 40 | extern void Uart2SendData(uchar dat); //串口2发送字符 41 | 42 | extern void Uart1Send(uchar dat); //串口1发送字符 43 | extern void Uart2Send(uchar dat); //串口2发送字符 44 | 45 | //解析指令所用到的数据 46 | /**********************************************************************************/ 47 | extern void AnalysisCom(void); //串口数据缓冲 48 | extern void ReceiveDataConvertToPwmValue(); //解析动作指令 49 | 50 | #define USART1_REC_LEN 256 //定义最大接收字节数 256 51 | extern uchar USART1_RX_BUF[USART1_REC_LEN]; //接收缓冲,最大USART1_REC_LEN个字节.末字节为换行符 52 | extern uchar USART1_RX_STA; //接收状态标记 53 | extern uchar usart1ReceiveSuccess; //一帧数据接收完成标志位 使用后要置0 54 | 55 | //自定义的第二组USART1_RX_BUF缓冲区 用于操作播放语音的数据 56 | #define USART1_REC_LEN2 10 //定义最大接收字节数 10 57 | extern uchar USART1_RX_BUF2[USART1_REC_LEN2]; //接收缓冲,最大USART1_REC_LEN2个字节.末字节为换行符 58 | extern uchar USART1_RX_STA2; //接收状态标记 59 | extern uchar usart1ReceiveSuccess2; //一帧数据接收完成标志位 使用后要置0 60 | 61 | extern uchar firstdata; //第一回接收到的值 62 | /**********************************************************************************/ 63 | 64 | #endif 65 | -------------------------------------------------------------------------------- /Image/HexapodRobot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/Image/HexapodRobot.jpg -------------------------------------------------------------------------------- /Image/HexapodRobot_mini.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/Image/HexapodRobot_mini.jpg -------------------------------------------------------------------------------- /Image/Robot_PCB_STC15W4K48S43D.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/Image/Robot_PCB_STC15W4K48S43D.jpg -------------------------------------------------------------------------------- /Image/Robot_PCB_STC15W4K48S4_3D.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/Image/Robot_PCB_STC15W4K48S4_3D.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 六足机器人控制器(多路舵机控制器) 2 | 3 | ![](https://gitee.com/ClimbSnailQ/Project_Image/raw/master/HexapodRobot_STC15/HexapodRobot_mini.jpg) 4 | 5 | ![PCB_3D_1](./Image/HexapodRobot_mini.jpg) 6 | 7 | 此项目是本人在本科期间,基于STC15系列的MCU制作的六足机器人。 8 | 9 | 包含了硬件以及控制程序代码两个部分。 10 | 11 | 硬件部分附有详细的原理图及其对应的PCB文件。程序部分较为精简使之可靠得运行在低速MCU上。 12 | 13 | B站视频[链接](https://b23.tv/BV1ss411L7xp) https://b23.tv/BV1ss411L7xp 14 | 15 | ## 工程文件结构 16 | * 21路舵机控制板Robot_PCB_STC15W4K48S4 _(控制器原理图及PCB图)_ 17 | * HexapodRobot_Code_STC15 _(控制器的51单片机代码)_ 18 | * 74HC573中文手册.pdf 19 | * Robot.hex _(已编译生成的hex文件)_ 20 | * 其余的为参考图片 21 | 22 | ### 硬件篇 23 | 1. 控制板工程文件使用Altium Designer 17绘制 24 | 2. 使用的MCU具体为STC15W4K48S4 25 | 3. 为了获得更快的运算效率,控制板使用的是22.1184MHz晶振。 26 | 27 | 28 | ##### PCB 3D预览图 29 | ![PCB_3D_1](./Image/Robot_PCB_STC15W4K48S4_3D.jpg) 30 | ![](https://gitee.com/ClimbSnailQ/Project_Image/raw/master/HexapodRobot_STC15/Robot_PCB_STC15W4K48S4_3D.jpg) 31 | 32 | ![PCB_3D_2](./Image/Robot_PCB_STC15W4K48S43D.jpg) 33 | ![](https://gitee.com/ClimbSnailQ/Project_Image/raw/master/HexapodRobot_STC15/Robot_PCB_STC15W4K48S43D.jpg) 34 | 35 | 36 | ### 软件篇 37 | 1. 代码工程为Keil 4软件的工程。 38 | 2. 可自行去[STC官网](http://www.stcmcu.com)下载[STC15](http://www.stcmcudata.com/datasheet/stc/STC-AD-PDF/STC15.pdf)系列的芯片手册 39 | 3. 使用定时器,采用分时控制的叠加算法,生成多路舵机可用的PWM信号。 40 | 4. 可提供精度达10us的持续PWM信号。直接驱动模拟舵机,同样适用于数字PWM舵机。 41 | 42 | ## 引脚定义: 43 | 44 | P44->H1 P43->H2 P42->H3 45 | 46 | P20->L1 P00->R1 47 | P21->L2 P01->R2 48 | P22->L3 P02->R3 49 | P23->L4 P03->R4 50 | P24->L5 P04->R5 51 | P25->L6 P05->R6 52 | P26->L7 P06->R7 53 | P27->L8 P07->R8 54 | P45->L9 P46->R9 55 | 56 | P40->Beep P12->ADC (采集电量) 57 | P30->RxD P31->TxD (串口1) 58 | P10->RxD2 P11->TxD2 (串口2) 59 | P41->DATA (温湿度传感器) 60 | P35->SCL P34->SDA (IIC接口 可接屏幕) 61 | P55->LED (驱动板上的LED指示灯) 62 | P32->INT0(可与板上的MOS0短接) P33->INT1(可与板上的MOS1短接) 63 | 64 | 65 | #### 未完成内容(当初给学弟们布置的任务) 66 | 1. 控制板没使用外部晶振,使用的是内部晶振。下载程序的勾选项见图示。 67 | 2. 大体的整体系统的使用后面会追加一个视频介绍,希望大家所作的作品能有一个强大的控制系统(把单片机内存写超了就厉害了) 68 | 3. 关于uart.c里的接收指令解析我来补(要是自己能补上也可以自行补充) 69 | * ReceiveDataConvertToPwmValue(); 70 | * AnalysisCom(void); 71 | * CheckAndDealY( void ); 72 | 4. 程序里的oled.h oled.c以及IIC.c IIC.h还不能用(当然还涉及到MPU6050的兼容性) 大体代码都有了,可以调试。 73 | 5. 以下需要你们独立补充完: 74 | * DHT11.h 75 | * DHT11.c 76 | * ADC.h 77 | * ADC.c 78 | -------------------------------------------------------------------------------- /Robot.hex: -------------------------------------------------------------------------------- 1 | :1010CF00602A036505DC05DC05DC05DC05DC05DCD9 2 | :1010DF0005DC05DC05DC05DC05DC05DC05DC05DCF9 3 | :1010EF0005DC05DC05DC05DC05DC05DC05DC602A40 4 | :1010FF00031105DC05DC05DC05DC05DC05DC05DCA6 5 | :10110F0005DC05DC05DC05DC05DC05DC05DC05DCC8 6 | :10111F0005DC05DC05DC05DC05DC05DC602A038F5E 7 | :10112F0000000000000000000000000000000000B0 8 | :10113F0000000000000000000000000000000000A0 9 | :10114F0000000000000000000000602A033B0000C8 10 | :10115F000000000000000000000000000000000080 11 | :10116F000000000000000000000000000000000070 12 | :08117F00000000000000000068 13 | :1013F700900458EBF0A3EAF0A3E9F0A3ECF0A3ED17 14 | :01140700F0F4 15 | :10140800E4A3F090045DE0FFC3941540030214CBFD 16 | :10141800900458E0FBA3E0FAA3E0F975F002EFA40A 17 | :10142800F58285F083120457FFAEF0D39400EE6482 18 | :1014380080948050030214C290045DE0901C6B936A 19 | :1014480090045EF090045DE025E0243BF582E434EE 20 | :1014580003F583E0FCA3E0FDC3EF9DFFEE9CFE9047 21 | :10146800045EE0FD25E02465F582E43403F583EEAF 22 | :10147800F0A3EFF0ED25E02411F582E43403F583C1 23 | :10148800E0FEA3E0FFED25E02465F582E43403F5F2 24 | :1014980083E0FCA3E0C39FFFEC9EFE90045BE0FCAE 25 | :1014A800A3E0FD1203F590045EE025E0248FF582A9 26 | :1014B800E43403F583EEF0A3EFF090045DE004F06C 27 | :0314C80002140B00 28 | :0114CB0022FE 29 | :100BEC00E4900479F0900479E0FFC394154003027B 30 | :100BFC000D98EF25E0248FF582E43403F583E0FEB5 31 | :100C0C00A3E0FFD39400EE648094805003020CC7E1 32 | :100C1C00900479E025E02465F582E43403F583E063 33 | :100C2C00FCA3E0C39FFFEC9EFE900479E0FD25E061 34 | :100C3C002411F582E43403F583E0FAA3E0C39FEEBC 35 | :100C4C006480F8EA648098900479E0FF502425E0F1 36 | :100C5C00248FF582E43403F583E0FAA3E0FBEF255F 37 | :100C6C00E02411F582E43403F583EA8BF012042BB3 38 | :100C7C00803125E02465F582E43403F583E0FAA3A2 39 | :100C8C00E0FBEF25E02411F582E43403F583EAF070 40 | :100C9C00A3EBF0ED25E0248FF582E43403F583E437 41 | :100CAC00F0A3F0900479E0FF25E02411F582E43400 42 | :100CBC0003F583E0FCA3E0FD12176C900479E0FFD0 43 | :100CCC0025E0248FF582E43403F583E0FCA3E0FDFA 44 | :100CDC00C3EC648094804003020D8FEF25E0246503 45 | :100CEC00F582E43403F583E0FEA3E0C39DFFEE9CA4 46 | :100CFC00FE900479E0FD25E02411F582E43403F53F 47 | :100D0C0083E0FAA3E0D39FEE6480F8EA64809890C5 48 | :100D1C000479E0FF402425E0248FF582E43403F5C8 49 | :100D2C0083E0FAA3E0FBEF25E02411F582E4340321 50 | :100D3C00F583EA8BF012042B803125E02465F582D3 51 | :100D4C00E43403F583E0FAA3E0FBEF25E02411F58E 52 | :100D5C0082E43403F583EAF0A3EBF0ED25E0248F75 53 | :100D6C00F582E43403F583E4F0A3F0900479E0FF1A 54 | :100D7C0025E02411F582E43403F583E0FCA3E0FDC7 55 | :0F0D8C0012176C900479E004F0020BF102130AC5 56 | :1014CC0090045FEBF0A3EAF0A3E9F0A3ECF0A3ED3A 57 | :0114DC00F01F 58 | :1014DD00E4A3F0A3F0900464F0A3F0900462E0FEA6 59 | :1014ED00A3E0FFA3E0FCA3E0FDC39FEC9E4003023D 60 | :1014FD00158DED2415FFE43CFEEF25E0FFEE33FEE8 61 | :10150D0090045FE0FBA3E0FAA3E0F98F828E8312D3 62 | :10151D000457FFAEF07C007D321203F5AC06AD072B 63 | :10152D00900465E025E0FF900464E033FE90045FD5 64 | :10153D00A3A3E02FF9EA3EFA1213F7900465E02415 65 | :10154D0015FF900464E03400FEEF25E0FFEE33FE5E 66 | :10155D0090045FE0FBA3E0FAA3E0F98F828E831283 67 | :10156D000457FFAEF07C007D321203F5121C239060 68 | :10157D000465E02416F0900464E03400F00214E8F1 69 | :01158D00223B 70 | :10161A0005DC07D007D005DC07D007D005DC07D0EA 71 | :10162A0007D005DC03E803E805DC03E803E805DC8A 72 | :10163A0003E803E805DC03E803E803E803E803E852 73 | :10164A0003E803E803E803E803E803E803E803E838 74 | :10165A0003E803E803E803E803E803E803E803E828 75 | :10166A0003E803E803E803E808FC08FC08FC08FCB4 76 | :10167A0008FC08FC08FC08FC08FC08FC08FC08FC40 77 | :10168A0008FC08FC08FC08FC08FC08FC08FC08FC30 78 | :04169A0008FC03E85D 79 | :101B3000E4F594F593F592F591F596F595F5B2F5F2 80 | :101B4000B1F5B4F5B3F5CAF5C9F5CCF5CBF5E2F5C9 81 | :0F1B5000E1F580F590F5A075B003F5C0F5C8225A 82 | :061DEC00900480EFF022DC 83 | :10006600900302E0602C900303E0B4591DA3E0B4B2 84 | :100076005308A3E0FF120F368010900304E0B45437 85 | :10008600097B017A037905120D9BE4900302F07F48 86 | :0500960001227F0022A1 87 | :101B8C009001FDE060239001FEE0B444031209B221 88 | :101B9C009001FEE0FF600AC394415005121DEC80D9 89 | :0C1BAC00EFE49001FDF07F01227F002299 90 | :101C020090047B7409F0121B30D2C0121C55121DB5 91 | :101C12002F121C3D12002E121CB6121CDAD2CD80DD 92 | :011C2200FEC3 93 | :04118700410481009E 94 | :101D0F00D2AFD2A9438901758CFA758A24D28C225D 95 | :101C3D00538E7F5389F0438901E4F58A758C70C208 96 | :081C4D008DD28CD2A9D2AF2286 97 | :101D1F00D2AFD2AB438910758DFA758B24D28E2238 98 | :10002E00538EBF53890FE4F58B758D70C28FD28EB0 99 | :05003E00D2AFD2AB229D 100 | :101C8000D2AF43AF04438E0475D79A75D6A9438E5D 101 | :021C9000102220 102 | :101C9200D2AF43AF04538EFB75D7CD75D6F8438EC2 103 | :021CA20010220E 104 | :101CA400D2AF43AF2043D10275D59A75D4A943D19D 105 | :021CB400082204 106 | :101CB600D2AF43AF2053D1FD75D5CD75D4F843D1FE 107 | :021CC6000822F2 108 | :101CC800D2AF43AF4043D12075D39A75D2A943D13F 109 | :021CD800802268 110 | :101CDA00D2AF43AF4053D1DFE4F5D375D24C43D1F1 111 | :021CEA00802256 112 | :03000B00021910C7 113 | :10191000C0E0C0F0C083C08263A201C083C082C0A7 114 | :10192000D075D000C000C001C002C003C004C00513 115 | :10193000C006C0071217C3B2CDD007D006D005D05D 116 | :1019400004D003D002D001D000D0D0D082D08363A5 117 | :0B195000A201D082D083D0F0D0E032A2 118 | :03001B0002195B6C 119 | :10195B00C0E0C0F0C083C08263A201C083C082C05C 120 | :10196B00D075D000C000C001C002C003C004C005C8 121 | :10197B00C006C007121819D007D006D005D004D066 122 | :10198B0003D002D001D000D0D0D082D08363A2018B 123 | :09199B00D082D083D0F0D0E032FC 124 | :0300630002001E7A 125 | :01001E0032AF 126 | :03009B000219A4A3 127 | :1019A400C0E0C0F0C083C08263A201C083C082C013 128 | :1019B400D075D000C000C001C002C003C004C0057F 129 | :1019C400C006C00712169ED007D006D005D004D09A 130 | :1019D40003D002D001D000D0D0D082D08363A20142 131 | :0919E400D082D083D0F0D0E032B3 132 | :0300A30002170938 133 | :10170900C0E0C0F0C083C08263A201C083C082C0B0 134 | :10171900D075D000C000C001C002C003C004C0051C 135 | :10172900C006C007900481E070047F0180027F0039 136 | :10173900900481EFF075D30075D24CEF6003120B62 137 | :10174900ECD007D006D005D004D003D002D001D008 138 | :1017590000D0D0D082D08363A201D082D083D0F0D0 139 | :03176900D0E0329B 140 | :10118B004102FE004102FF004101FD0041030E0040 141 | :08119B004103020041030D00B5 142 | :101205009002FFE0701BA3E0FF90030DF09002FF3A 143 | :10121500E0FE04F074FE2EF582E43401F583EFF070 144 | :101225002290030EE0FF701B900300E0FE90030D7B 145 | :10123500F0A3E0FD04F074032DF582E43403F58397 146 | :10124500EEF02290030DE064597066EF30E703027B 147 | :101255001309A3E0FFE430E618900300E0640A6098 148 | :1012650003E48026EF90030EF0E4F090030204F00F 149 | :1012750022900300E0FBB40D1690030EE0FF24035B 150 | :10128500F582E43403F583E4F0EF90030EF0229049 151 | :10129500030EE0FF7E0074032FF582EE3403F58321 152 | :1012A500EBF090030EE004F0E0D394094056E4F02F 153 | :1012B500227E00EE20E74D30E61B900300E0640A35 154 | :1012C5006006E49002FFF0229002FFE0F0E4F09067 155 | :1012D50001FD04F022900300E0FDB40D069002FF2D 156 | :1012E500E0F0229002FFE0FF7E0074FE2FF582EE13 157 | :1012F5003401F583EDF09002FFE004F0E0D394FFB4 158 | :051305004002E4F022AB 159 | :1009B2009003F2E4F0A304F0E490041EF0A3F0909C 160 | :1009C20003F2E0FEA3E024FEF58274013EF583E02B 161 | :1009D200B420109003F3E004F070E49003F2E0041A 162 | :1009E200F080DC9003F2E0FEA3E024FEF5827401C5 163 | :1009F2003EF583E0FFC3943A5040EF942F403B9082 164 | :100A0200041EE0FEA3E0FF7C007D0A12038E900329 165 | :100A1200F2E475F001120441FC74FE25F0F58274D3 166 | :100A2200013CF583E07C002FFFEC3ECF24D0CF3495 167 | :100A3200FF90041EF0A3EFF080A9E49001FDF09076 168 | :100A4200041E74FFF5F012044145F07003020BEB33 169 | :100A52009001FDE06003020BEB900420F0A3F0FB99 170 | :100A6200FDEDFF3395E0FEEF25E0FFEE33FE74F47B 171 | :100A72002FF58274033EF583E4F0A3F00DEDB41577 172 | :100A8200E0C3EB648094954003020B519003F2E4BF 173 | :100A920075F001120441FE74FE25F0F58274013EE8 174 | :100AA200F583E0B420E69003F2E0FEA3E024FEF535 175 | :100AB2008274013EF583E0FFC3943A506CEF942FA9 176 | :100AC2004067EBFF3395E0FEEF25E0FFEE33FE7467 177 | :100AD200F42FF58274033EF583E0FEA3E0FF7C0071 178 | :100AE2007D0A12038E9003F2E475F001120441FCB8 179 | :100AF20074FE25F0F58274013CF583E07C002FFF43 180 | :100B0200EC3ECF24D0FDEF34FFFCEBFF3395E0FE4B 181 | :100B1200EF25E0FFEE33FE74F42FF58274033EF509 182 | :100B220083ECF0A3EDF0020AA89003F2E0FEA3E04A 183 | :100B320024FDF58274013EF583E0FFC3943A40033D 184 | :100B4200020A83EF942F5003020A830B020A839056 185 | :100B520003F2E0FEA3E024FEF58274013EF583E099 186 | :100B6200B420109003F3E004F070E49003F2E00488 187 | :100B7200F080DC9003F2E0FEA3E024FEF582740133 188 | :100B82003EF583E0FFC3943A5040EF942F403B90F0 189 | :100B92000420E0FEA3E0FF7C007D0A12038E900396 190 | :100BA200F2E475F001120441FC74FE25F0F5827442 191 | :100BB200013CF583E07C002FFFEC3ECF24D0CF3404 192 | :100BC200FF900420F0A3EFF080A9900420E0FEA3A0 193 | :100BD200E0FF7C007D321203F5AC06AD077B017AA3 194 | :090BE2000379F41213F7020A4131 195 | :010BEB0022E7 196 | :101C550075B003759850438E01438E0475D7D075C2 197 | :061C6500D6FF438E1022A1 198 | :101D2F00759A50438E0475D7D075D6FF438E102207 199 | :030023000219EDD2 200 | :1019ED00C0E0C083C08263A201C083C082C0D07535 201 | :1019FD00D008309811C2989002FE7401F090030047 202 | :101A0D00E599F0121205309907C29990030FE4F091 203 | :101A1D00D0D0D082D08363A201D082D083D0E032E7 204 | :03004300021A2D71 205 | :101A2D00C0E0C083C08263A201C083C082E59A304A 206 | :101A3D00E009539AFE900301E59BF0E59A30E10829 207 | :101A4D00539AFD900310E4F0D082D08363A201D0AD 208 | :061A5D0082D083D0E032CC 209 | :101D3F0090030FE070FAEF90030F7401F0F5992202 210 | :061DF200900482EFF022D4 211 | :101A9700900470EBF0A3EAF0A3E9F0900470E0FB88 212 | :101AA700A3E0FAA3E0F91203636017900470A3E4BC 213 | :101AB70075F001120441A9F0FA120363FF12000343 214 | :031AC70080D922A1 215 | :101ACA00900473EBF0A3EAF0A3E9F0900473E0FB4F 216 | :101ADA00A3E0FAA3E0F91203636017900473A3E486 217 | :101AEA0075F001120441A9F0FA120363FF121DA94D 218 | :031AFA0080D9226E 219 | :080003008F993099FDC299228A 220 | :0E1DA900900310E060FA8F9BE4900310F0228C 221 | :0E1D4F0000007FD37E1E7D0BDDFEDEFCDFFA82 222 | :011D5D002263 223 | :0E1D5E0000007F557E0C7D9BDDFEDEFCDFFA73 224 | :011D6C002254 225 | :0E1D6D0000007F2B7E067DCBDDFEDEFCDFFA64 226 | :011D7B002245 227 | :0E1D7C0000007F1A7E377DABDDFEDEFCDFFA55 228 | :011D8A002236 229 | :0C000E007F0A7E1F7D93DDFEDEFCDFFA22 230 | :01001A0022C3 231 | :0E1D8B0000007F0D7E9C7D53DDFEDEFCDFFA46 232 | :011D99002227 233 | :0E1D9A0000007F097E687D8BDDFEDEFCDFFA37 234 | :011DA8002218 235 | :101C2300AE071FEED39400401000007E057D347C88 236 | :091C3300C3DCFEDDFCDEFA80E7F3 237 | :011C3C002285 238 | :101C6B0000010203040506071408090A0B0C0D0EEC 239 | :051C7B000F131211100F 240 | :1011A3005803BFF5F5F5F5F5F5F5F5F5F5F5F5F5B1 241 | :1011B300F5F5F5F5F5F5F5F5C6C6A65803D73333BA 242 | :1011C30033333333333333333333333333333333EC 243 | :1011D3003333336666004103EF004103F0004103FC 244 | :1011E300F1004203B900004203BB00004203BD000B 245 | :0111F30000FB 246 | :1017C3009003EFE0FFB4080EE4F5809003D4E0F556 247 | :1017D3008C9003EC8029EF70057580018006E5800D 248 | :1017E30025E0F5809003EFE0FF24BFF582E43403A6 249 | :1017F300F583E0F58C74D72FF582E43403F583E0A9 250 | :10180300F58A9003EFE02401FFE433FE7C007D09B9 251 | :061813001203A0EDF0221B 252 | :101819009003F0E0FFB4080EE4F5A09003D5E0F5DD 253 | :101829008D9003ED8029EF700575A0018006E5A074 254 | :1018390025E0F5A09003F0E0FF24C7F582E4340326 255 | :10184900F583E0F58D74DF2FF582E43403F583E049 256 | :10185900F58B9003F0E02401FFE433FE7C007D0961 257 | :061869001203A0EDF022C5 258 | :10169E009003F1E0FFB4050E53C0839003D6E0F53E 259 | :1016AE00D49003EE803E9003F0E0700AE5C05483C0 260 | :1016BE004404F5C080137404A807088002C333D80D 261 | :1016CE00FCFFE5C054834FF5C09003F1E0FF24CF3B 262 | :1016DE00F582E43403F583E0F5D474E72FF582E464 263 | :1016EE003403F583E0F5D59003F1E02401FFE433F4 264 | :0B16FE00FE7C007D061203A0EDF02230 265 | :10176C0090047AEFF0E41202A97BFA7AED79EB7827 266 | :10177C003F12019EA804A905AA06AB07E4FFFE7D53 267 | :10178C00807C471200A91202E2AC06AD0790047AE5 268 | :10179C00E0901C6B9390047AF0ECFFE0FB24BFF517 269 | :1017AC0082E43403F583EFF0EDFF74D72BF582E47C 270 | :0717BC003403F583EFF02276 271 | :10130A009003B97470F0A3E4F0FD74BF2DF582E484 272 | :10131A003403F583E0FE74D72DF582E43403F583B4 273 | :10132A00E0FBEBFFC3E49FFFE49EFE9003BAE02FCD 274 | :10133A00F09003B9E03EF00DEDB408CE9003B9E0A9 275 | :10134A00FCA3E0FDEC9003D4F09003ECEDF09003E5 276 | :10135A00BB7470F0A3E4F07D0874BF2DF582E43409 277 | :10136A0003F583E0FE74D72DF582E43403F583E0B8 278 | :10137A00FBEBFFC3E49FFFE49EFE9003BCE02FF06B 279 | :10138A009003BBE03EF00DEDB410CE9003BBE0FC41 280 | :10139A00A3E0FDEC9003D5F09003EDEDF09003BDD2 281 | :1013AA007470F0A3E4F07D1074BF2DF582E4340369 282 | :1013BA00F583E0FE74D72DF582E43403F583E0FB70 283 | :1013CA00EBFFC3E49FFFE49EFE9003BEE02FF09084 284 | :1013DA0003BDE03EF00DEDB415CE9003BDE0FCA3D5 285 | :0C13EA00E0FDEC9003D6F09003EEEDF077 286 | :0113F60022D4 287 | :10067400CED2CFD6D4DAB5C4C9F9D2F4CAC7D5E23A 288 | :10068400D1F9B5C400C9F9D2F4D2D1BBD6B8B4C437 289 | :10069400ACC8CFC9E8D6C300D3EFCBD9D2D1B5F714 290 | :1006A400B5BD00BCB600D3EFB5F7D2D1B5F7B5BD33 291 | :1006B40000D2F4C1BFD2D1B5F7B5BD00FD0001022F 292 | :1006C400FD000103FD000104FD000121FD0001887E 293 | :1006D4005B73305D00005B73315D00005B73325D02 294 | :1006E40000005B73335D00005B73345D00005B737B 295 | :1006F400355D00005B73365D00005B73375D0000A1 296 | :100704005B73385D00005B73395D00005B733130EF 297 | :100714005D005B74305D00005B74315D00005B74F0 298 | :10072400325D00005B74335D00005B74345D000077 299 | :100734005B74355D00005B74365D00005B74375D8F 300 | :1007440000005B74385D00005B74395D00005B740D 301 | :1007540031305D005B76305D00005B76315D00001A 302 | :100764005B76325D00005B76335D00005B76345D62 303 | :1007740000005B76355D00005B76365D00005B76DD 304 | :10078400375D00005B76385D00005B76395D000004 305 | :100794005B7631305D005B6D335D00005B6D353140 306 | :1007A4005D005B6D35325D005B6D35335D005B6D07 307 | :1007B40035345D005B6D35355D00010101010100DB 308 | :1007C4000000000000000000000000000000000025 309 | :1007D4000000000000000000000000000000000015 310 | :1007E4000000000000000000000000000000000005 311 | :1007F40000000000000000000000000000000000F5 312 | :1008040000000000000000000000000000000000E4 313 | :1008140000000000000000000000000000000000D4 314 | :1008240000000000000000000000000000000000C4 315 | :1008340000000000000000000000000000000000B4 316 | :1008440000000000000000000000000000000000A4 317 | :100854000000000000000000000000000000000094 318 | :100864000000000000000000000000000000000084 319 | :100874000000000000000000000000000000000074 320 | :100884000000000000000000000000000000000064 321 | :100894000000000000000000000000000000000054 322 | :1008A4000000000000000000000000000000000044 323 | :1008B4000000000000000000000000000000000034 324 | :1008C4000000000000000000000000000000000024 325 | :1008D4000000000000000000000000000000000014 326 | :1008E4000000000000000000000000000000000004 327 | :1008F40000000000000000000000000000000000F4 328 | :1009040000000000000000000000000000000000E3 329 | :1009140000000000000000000000000000000000D3 330 | :1009240000000000000000000000000000000000C3 331 | :1009340000000000000000000000000000000000B3 332 | :1009440000000000000000000000000000000000A3 333 | :100954000000000000000000000000000000000093 334 | :100964000000000000000000000000000000000083 335 | :100974000000000000000000000000000000000073 336 | :100984000000000000000000000000000000000063 337 | :100994000000000000000000000000000000000053 338 | :0E09A400000000000000000000000000000045 339 | :1011F40041046D0541046E0541046F0841046C010E 340 | :091A63001206577B017A00790399 341 | :0B1A6C00900476EBF0A3EAF0A3E9F091 342 | :101A7700E4FFFE900476E0FBA3E475F00112044155 343 | :0F1A8700A9F0FA12036360070FBF00010E80E49D 344 | :011A9600222D 345 | :10186F00900466EBF0A3EAF0A3E9F0900469E0FBC3 346 | :10187F00A3E0FAA3E0F91203636028900469A3E4DC 347 | :10188F0075F001120441A9F0FA120363FF90046688 348 | :10189F00E0FBA3E475F001120441A9F0FAEF120383 349 | :1018AF007C80C8900466E0FBA3E0FAA3E0F9E402B1 350 | :0218BF00037CA8 351 | :0B0D9B00900000EBF0A3EAF0A3E9F0E9 352 | :100DA60078037C007D017BFF7A0779BE7E017FF4A4 353 | :100DB6001205699001FBE4F0A37405F090046DE060 354 | :100DC60075F006A424D4F9740635F0FA7BFFC00149 355 | :100DD60074032405F9E43400A801FC7D01D0011256 356 | :100DE6001A639001FBEEF0A3EFF090046EE075F04D 357 | :100DF60006A42416F9740735F0FA7BFFC0019001AA 358 | :100E0600FBE0FEA3E02403F974003EA801FC7D018B 359 | :100E1600D001121A639001FBEEF0A3EFF090046F7D 360 | :100E2600E075F006A42458F9740735F0FA7BFFC084 361 | :100E3600019001FBE0FEA3E02403F974003EA80143 362 | :100E4600FC7D01D001121A639001FBEEF0A3EFF0D6 363 | :100E560090046CE075F006A4249AF9740735F0FA4C 364 | :100E66007BFFC0019001FBE0FEA3E02403F97400C0 365 | :100E76003EA801FC7D01D001121A639001FBEEF041 366 | :100E8600A3EFF0900000E0FBA3E0FAA3E0F9121A4A 367 | :100E96006C9001F7EEF0A3EFF09001FCE02FFF90CD 368 | :100EA60001FBE03ECF24FDCF34FF9001F7F0A3EF26 369 | :100EB600F090000374FDF09001F7E0FCA3E0FDEC78 370 | :100EC600900004F0A3EDF0A37401F0A3F09001FBF1 371 | :100ED600E0FEA3E02403F974003EA801FC7D019026 372 | :100EE6000000E0FBA3E0FAA3E0F9120657E4900144 373 | :100EF600F9F0A3F09001F8E02403FF9001F7E03445 374 | :100F060000FE9001F9E0FCA3E0FDC39FEC9E501F9C 375 | :100F160074032DF58274003CF583E0FF1200039004 376 | :0F0F260001FAE004F070069001F9E004F080C5D4 377 | :010F35002299 378 | :050F3600900422EFF021 379 | :100F3B0014B408004003020FCF900F5275F003A4B6 380 | :100F4B00C58325F0C58373020F6A020F6F020F74FE 381 | :100F5B00020F79020F7E020F86020F9B020FB690D3 382 | :100F6B00046D801290046D801590046E80089004BF 383 | :100F7B006E800B90046FE02401800690046FE024D8 384 | :100F8B000AFFE433FE7C007D0B1203A0EDF08034EE 385 | :100F9B0090046CE02401FFE433FE7C007D06120319 386 | :100FAB00A0EDF07BFF7A067974801690046D7405C2 387 | :100FBB00F0A3F0A3F090046C7401F07BFF7A067938 388 | :100FCB0089120D9B900422E0FF64016005EF64021F 389 | :100FDB00702A90046DE0FFB40A0A9004377431F064 390 | :100FEB00A3148006EF2430900437F0E4A3F07823A9 391 | :100FFB007C047D017BFF7A06799C8071900422E052 392 | :10100B00FF64036005EF6404702A90046EE0FFB484 393 | :10101B000A0A9004377431F0A3148006EF24309041 394 | :10102B000437F0E4A3F078237C047D017BFF7A0680 395 | :10103B0079AA8039900422E0FF64056008EF64060A 396 | :10104B0060030210CE90046FE0FFB40A0A900437DD 397 | :10105B007431F0A3148006EF2430900437F0E4A32E 398 | :10106B00F078237C047D017BFF7A0679B512065755 399 | :10107B007B017A047923121A6C90043AEEF0A3EFF9 400 | :10108B00F02423F974043EA801FC7D017B017A0452 401 | :10109B0079371206577B017A047923121A6C900464 402 | :1010AB003AEEF0A3EFF02423F974043EA801FC7D83 403 | :1010BB00017BFF7A0679A71206577B017A04792305 404 | :0310CB00120D9B68 405 | :0110CE0022FF 406 | :01001F0022BE 407 | :03002B00020020B0 408 | :0100200032AD 409 | :061DB700EE25E0FED2B5AE 410 | :071DBD000000007F0ADFFEB9 411 | :011DC40022FC 412 | :101CFE00D2B4D2B5121DBDC2B4121DBDC2B5021DE5 413 | :011D0E00BD17 414 | :0C1DE000C2B4D2B5121DBDD2B4021DBDAC 415 | :0E1DC500A20092B4D2B5121DBDC2B5021DBD62 416 | :0D1DD300D2B5121DBDA2B4C2B5121DBD22B5 417 | :071BB800AF04121BBFAF03D5 418 | :021BBF00AE076F 419 | :101BC100E4FDEEC4131313540124FF92B4121DB7A4 420 | :0D1BD100C2B5121DBD0DEDB408E8021DD314 421 | :10004600E4FED2B4FD121DB7A2B4E4334EFEC2B52F 422 | :0A005600121DBD0DEDB408EDAF065C 423 | :01006000227D 424 | :101CEC00AE07AC05121CFEAF06121BBF121BB802CE 425 | :021CFC001DE0E9 426 | :041BDE00AC07AB05A0 427 | :101BE200121CFE121BB8121CFEEC4401FF121BBF9A 428 | :0F1BF200120046AE07D200121DC5121DE0AF064D 429 | :011C010022C0 430 | :101B5F00E4FB7D6B7FD0121CEC7B077D197FD012CD 431 | :101B6F001CEC7B067D1A7FD0121CEC7B187D1B7F33 432 | :0D1B7F00D0121CEC7B017D1C7FD0021CEC01 433 | :061AFD0090047EEFF0FDF5 434 | :101B03007FD0121BDE90047FEFF090047EE004FD93 435 | :101B13007FD0121BDEAD0790047FE0FF3395E0EF2B 436 | :0C1B2300FEED3395E0FCE42DFFEE3CFEEF 437 | :011B2F002293 438 | :1018C1007F3B121AFD90044EEEF0A3EFF07F3D1224 439 | :1018D1001AFD900450EEF0A3EFF07F3F121AFD9035 440 | :1018E1000452EEF0A3EFF07F43121AFD900454EE80 441 | :1018F100F0A3EFF07F45121AFD900456EEF0A3EF2E 442 | :0F190100F07F47121AFD90044AEEF0A3EFF02298 443 | :0100210022BC 444 | :1000A60002034EE86480F8E933E83360110460F037 445 | :1000B600ED33EC337009E8FCE9FDEAFEEBFF2204C0 446 | :1000C60060DED3EB9FEA9EE99DE8C2E78CF0C2F7BB 447 | :1000D60095F0400CE8CCF8E9CDF9EACEFAEBCFFB87 448 | :1000E60012031985D0F05804700320D5B3E80470C4 449 | :1000F600075002B2D502035892D5EC0460F7E4CC5F 450 | :10010600C0E0C398F8603B94186008400DD0E0FB4F 451 | :10011600020330E4FBFAC9FC8028E830E406E4C9AF 452 | :10012600FBE4CAFCE830E305E4C9CACBFCE85407A3 453 | :100136006010F8C3E913F9EA13FAEB13FBEC13FCAE 454 | :10014600D8F130F52FC3E49CFCEF9BFFEE9AFEED51 455 | :1001560099FDD0E0FBEF4E4D4C701222DB030203FB 456 | :1001660055EC2CFCEF33FFEE33FEED33FDED30E7BF 457 | :10017600EB020330EF2BFFEE3AFEED39FDD0E0FB4C 458 | :1001860050130BBB0003020358ED13FDEE13FEEFF5 459 | :0801960013FFEC13FC0203301F 460 | :10019E00EC4D6011E8497017ED33EC3304600DE45B 461 | :1001AE00FCFFFEFD22E933E8330470F802034E1221 462 | :1001BE00031958046009E4CC248150062850090222 463 | :1001CE000358284003020355C0E0EB4A7044B9803F 464 | :1001DE0006D0E0FB020344EF4E701CBD8008EBFF1F 465 | :1001EE00EAFEE9FD80EBE98DF0A4FEE5F002028760 466 | :1001FE00E9CDF9EAFEEBFFEF89F0A4FCE5F0CE893C 467 | :10020E00F0A42EFFE435F0CD89F0A42DFEE435F0F8 468 | :10021E008067EF4E7005BD80D780C3EF8BF0A4AC26 469 | :10022E00F0EE8BF0A42CFCE435F0F8EF8AF0A42C61 470 | :10023E00E5F038FCE433CB8DF0A42CFCE5F03BF874 471 | :10024E00EE8AF0A42CFCE5F038F8E433CF89F0A464 472 | :10025E002CFCE5F038CF3400CE89F0A42FFFE5F06A 473 | :10026E003EFEE433C98DF0A42EFEE5F039CD8AF0C2 474 | :10027E00A42FFFE5F03EFEE43DFD33D0E0FB50073A 475 | :10028E000BBB000F020358EC2CFCEF33FFEE33FEDA 476 | :06029E00ED33FD02033008 477 | :1002A40075F020800E75F010800575F0087D007ED5 478 | :1002B400007F003392D530D50312048FEC33401005 479 | :1002C400EF33FFEE33FEED33FDEC33FCD5F0ED22DE 480 | :0E02D400E5F0247EA2D513CC92E7CDCEFF221A 481 | :1002E200EDD2E7CD33EC3392D524814006E4FFFE14 482 | :1002F200FDFC22FCE4CFCECDCC24E0501174FF8073 483 | :10030200EDC3CC13CCCD13CDCE13CECF13CF04700F 484 | :07031200F030D5DE02048F7C 485 | :10031900E9D2E7C933E833F892D5EDD2E7CD33EC2A 486 | :0703290033FC5002B2D522A3 487 | :10033000EC30E7100FBF000C0EBE00080DBD00042E 488 | :100340000BEB6014A2D5EB13FCED92E7FD2274FFDA 489 | :10035000FCFDFEFF22E480F8A2D574FF13FC7D8033 490 | :03036000E480EF47 491 | :0300000002158E58 492 | :0C158E00787FE4F6D8FD7581200215D5A9 493 | :10036300BB010689828A83E0225002E722BBFE0298 494 | :09037300E32289828A83E49322CB 495 | :10037C00BB010689828A83F0225002F722BBFE0160 496 | :02038C00F3225A 497 | :10038E00EF8DF0A4A8F0CF8CF0A428CE8DF0A42E83 498 | :02039E00FE223D 499 | :1003A000BC000BBE0029EF8DF084FFADF022E4CC41 500 | :1003B000F875F008EF2FFFEE33FEEC33FCEE9DEC0A 501 | :1003C000984005FCEE9DFE0FD5F0E9E4CEFD22ED50 502 | :1003D000F8F5F0EE8420D21CFEADF075F008EF2F9A 503 | :1003E000FFED33FD4007985006D5F0F222C398FD8B 504 | :0503F0000FD5F0EA2228 505 | :1003F500C2D5EC30E709B2D5E4C39DFDE49CFCEE23 506 | :1004050030E715B2D5E4C39FFFE49EFE1203A0C3F7 507 | :10041500E49DFDE49CFC80031203A030D507C3E4F2 508 | :060425009FFFE49EFE2291 509 | :10042B00C5F0F8A3E028F0C5F0F8E582158270025C 510 | :06043B001583E038F022F9 511 | :10044100A3F8E0C5F025F0F0E5821582700215836E 512 | :06045100E0C838F0E822CB 513 | :10045700BB0110E58229F582E5833AF583E0F5F0E3 514 | :10046700A3E0225009E92582F886F008E622BBFEC0 515 | :100477000AE92582F8E2F5F008E222E5832AF58306 516 | :08048700E993F5F0A3E99322CB 517 | :0E048F00C3E49FFFE49EFEE49DFDE49CFC227E 518 | :10049D00E709F608DFFA8046E709F208DFFA803E41 519 | :1004AD0088828C83E709F0A3DFFA8032E309F6082E 520 | :1004BD00DFFA8076E309F208DFFA806E88828C839A 521 | :1004CD00E309F0A3DFFA806289828A83E0A3F6084C 522 | :1004DD00DFFA805689828A83E0A3F208DFFA804A28 523 | :1004ED0080D280FA80C680D4806580F28031801001 524 | :1004FD0080A680EA809A80A880DA80E280CA803166 525 | :10050D0089828A8363A20188828C8363A201E4932A 526 | :10051D00A363A201F0A363A201DFF3DEF1800B89D7 527 | :10052D00828A83E493A3F608DFF9ECFAA9F0EDFBD8 528 | :10053D002289828A8363A20188828C8363A201E06F 529 | :10054D00A363A201F0A363A201DFF4DEF280DB89D5 530 | :10055D00828A83E493A3F208DFF980CE88F0EF60FE 531 | :10056D00010E4E60C588F0ED2402B4040050BBF5B9 532 | :10057D0082EB2402B4040050B1232345822390045E 533 | :02058D00ED730C 534 | :10058F00E709F60870FA8046E709F20870FA803E2C 535 | :10059F0088828C83E709F0A370FA807CE309F60860 536 | :1005AF0070FA8074E309F20870FA806C88828C8389 537 | :1005BF00E309F0A370FA806089828A83E0A3F608CA 538 | :1005CF0070FA805489828A83E0A3F20870FA804817 539 | :1005DF0080D280FA80C680D4806180F2802F801014 540 | :1005EF0080A680EA809A80A880DA80E280CA802F75 541 | :1005FF0089828A8363A20188828C8363A201E49338 542 | :10060F00A363A201F0A363A20170F3800B89828A16 543 | :10061F0083E493A3F60870F9ECFAA9F0EDFB2289B5 544 | :10062F00828A8363A20188828C8363A201E0A36321 545 | :10063F00A201F0A363A20170F480DD89828A83E4B2 546 | :10064F0093A3F20870F980D088F0ED2402B404006F 547 | :10065F0050C6F582EB2402B4040050BC232345821C 548 | :05066F00239005DF737C 549 | :10159A00021C02E493A3F8E493A34003F68001F249 550 | :1015AA0008DFF48029E493A3F85407240CC8C33352 551 | :1015BA00C4540F4420C8834004F456800146F6DF21 552 | :1015CA00E4800B01020408102040809010CFE47ED2 553 | :1015DA00019360BCA3FF543F30E509541FFEE49316 554 | :1015EA00A360010ECF54C025E060A840B8E493A3DD 555 | :1015FA00FAE493A3F8E493A3C8C582C8CAC583CA08 556 | :10160A00F0A3C8C582C8CAC583CADFE9DEE780BEBF 557 | :0112040000E9 558 | :00000001FF 559 | -------------------------------------------------------------------------------- /下载程序的勾选项.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ClimbSnail/HexapodRobot_STC15/5d26953540aac35dda43e3a3d93a51d1a12c20e7/下载程序的勾选项.jpg --------------------------------------------------------------------------------