本書以兩輪小型移動機器人的制作與編程項目為主線,通過循序漸進地構建機器人的控制器和傳感器電路,并對機器人實現編程和控制,將C51單片機的外圍接口特性、內部結構原理、綜合應用設計和C語言程序設計等知識和技能傳授給學生,徹底打破了傳統的先理論后實驗的教學方法和教學體系結構,解決了單片機原理與應用,以及C語言程序設計等核心專業基礎課程抽象、枯燥與教學效果差的老大難問題。
第1講機器人大腦:從BS2微控制器到C51單片機(1)單片機和微控制器(1)學習單片機的意義(2)C51系列單片機(2)機器人與C51單片機(4)任務1 獲得軟件(4)任務2 安裝軟件(5)安裝Keil ?Vision2(5)任務3 硬件連接(5)串口的連接(6)USBASP下載器的連接(6)電源的連接(6)給教學板和單片機進行通電檢查(6)任務4 第一個程序(7)創建與編輯你的第一個程序(7)例程:HelloRoBot.c(9)程序調試(11)下載可執行文件到單片機(12)用串口調試軟件查看單片機輸出信息(13)HelloRoBot.c是如何工作的(14)printf函數(14)HelloRoBotYourTurn.c是如何工作的(16)任務5 做完實驗關斷電源(19)第2講C51接口與伺服電機控制(20)C51單片機的輸入/輸出接口(20)任務1 單燈閃爍控制(21)LED電路元件(21)LED電路搭建(21)例程:HighLowLed.c(22)HighLowLed.c是如何工作的(22)任務2 機器人伺服電機控制信號(26)例程:BothServoClockwise.c(28)任務3 計數并控制循環次數(29)例程:ControlServoRunTimes.c(31)例程:BothServosThreeSeconds.c(32)任務4 用計算機來控制機器人的運動(33)例程:ControlServoWithComputer.c(34)ControlServoWithComputer.c是如何工作的(35)第3講C語言函數與機器人巡航控制(37)任務1 基本巡航動作(37)例程:RobotForwardThreeSeconds.c(38)RobotForwardThreeSeconds.c是如何工作的(38)向后走,原地轉彎和繞軸旋轉(39)例程:ForwardLeftRightBackward.c(40)任務2 勻加速/減速運動(43)編寫勻加速運動程序(43)例程:StartAndStopWithRamping.c(44)任務3 用函數調用簡化運動程序(46)例程:MovementsWithFunctions.c(49)例程:MovementsWithOneFuntion.c(51)任務4 高級主題——用數組建立復雜運動(52)字符型數據(53)數組(54)例程:NavigationWithSwitch.c(56)NavigationWithSwitch.c是如何工作的(58)例程:NavigationWithValues.c(59)第4講C51接口與觸覺導航(62)觸覺導航與單片機輸入接口(62)任務1 安裝并測試機器人“胡須”(63)安裝“胡須”(63)測試“胡須”(64)例程:TestWhiskers.c(64)位操作符(65)if語句(66)?操作符(66)任務2 通過“胡須”導航(69)編程使機器人基于“胡須”導航(69)關系與邏輯運算符(70)例程:RoamingWithWhiskers.c(71)“胡須”導航機器人怎樣行走(74)任務3 機器人進入死區后的人工智能決策(75)編程逃離墻角死區(75)例程:EscapingCorners.c(76)EscapingCorners.c是如何工作的(79)第5講C51接口與紅外線導航(81)使用紅外線發射和接收器件探測道路(81)紅外前燈(81)任務1 搭建并測試IR發射和探測器對(82)元件清單(82)搭建紅外線前燈(82)這里為何要使用三極管9013(84)測試紅外發射探測器(84)例程:TestLeftIrPair.c(85)排錯(86)函數延時的不精確性(87)任務2 探測和避開障礙物(87)改變“胡須”程序,使其適用于IR檢測和躲避(88)例程:RoamingWithIr.c(89)任務3 高性能的IR導航(92)在每個脈沖之間采樣以避免碰撞(93)例程:FastIrRoaming.c(93)FastIrRoaming.c是如何工作的(95)任務4 俯視的探測器(97)推薦材料(97)用絕緣帶模擬桌子的邊沿(97)邊沿探測編程(98)例程:AvoidTableEdge.c(99)AvoidTableEdge.c是如何工作的(101)第6講C51定時器與機器人的距離檢測(104)用同樣的IR LED/探測電路檢測距離(104)推薦工具和原料(104)任務1 定時/計數器的運用(104)定時/計數器的控制(105)工作模式(106)定時/計數器初值的計算(106)例程:TimeApplication.c(106)TimeApplication.c是如何工作的(107)中斷(108)中斷優先級(109)任務2 測試掃描頻率(110)紅外線探測器頻率探測(110)用頻率掃描進行編程做距離探測(110)例程:TestLeftFrequencySweep.c(111)TestLeftFrequencySweep.c是如何工作的(112)例程:DisplayBothDistances.c(114)任務3 尾隨小車(114)對尾隨車編程(116)例程:FollowingRobot.c(117)FollowingRobot.c是如何工作的(120)任務4 跟蹤條紋帶(121)搭建和測試路線(121)需要的材料(121)測試條紋帶(122)絕緣帶路徑排錯(123)編程跟蹤條紋帶(124)例程:StripeFollowingRobot.c(124)第7講C51的UART與機器人串口通信(126)串口控制寄存器SCON(127)什么是波特率(127)波特率的計算(127)RS232電平與TTL電平轉換(128)任務1 編寫串口通信程序(129)例程:uart.h(129)uart.h是如何工作的(132)存儲器結構(132)串口工作流程(133)例程:HelloRoBot.c——printf("Hello,this is a message from your Robot\n")(134)例程:ControlServoWithComputer.c——scanf("%d",&PulseDuration)(134)第8講 C51顯示接口編程與機器人應用(136)LED數碼管的介紹(136)任務1 數碼管顯示(136)任務目的(138)任務要求(138)元件清單(138)電路設計(138)陰極數碼管顯示的源程序(140)電路實物(141)LCD顯示器的介紹(142)任務2 認識LCD顯示器(142)LCD顯示器與C51單片機的連接(142)LCD控制器接口說明(143)任務3 編寫LCD模塊驅動程序(145)元件清單(146)線路連接(146)例程:LCDdisplay.c(146)LCDdisplay.c是如何工作的(150)指針(151)任務4 用LCD顯示機器人運動狀態(152)C語言的編譯預處理(152)例程:MoveWithLCDDisplay.c(156)MoveWithLCDDisplay.c是如何工作的(158)第9講多傳感器智能機器人(160)任務1 多傳感器信息與C語言結構體的使用和編程(160)結構體(160)例程:IRRoamingWithWithStructLCDDisplay.c(164)IRRoamingWithWithStructLCDDisplay.c是如何工作的(165)任務2 智能機器人的行為控制策略和編程(169)例程:NavigationWithSensors.c(171)NavigationWithSensors.c是如何工作的(173)第10講機器人循線競賽(175)競賽任務(175)任務1 QTI傳感器及其通信接口(176)任務2 安裝QTI傳感器到機器人前端(177)任務3 編寫QTI傳感器的測試程序(178)Test4QTI.c是如何工作的(180)任務4 設計算法實現機器人無接觸傳感器游中國(182)RobotTourChina.c是如何工作的(186)執行調試(187)任務5 修改算法實現機器人游中國(188)任務6 用數組實現機器人游中國比賽(193)任務7 改進運動執行程序提升執行的可靠性(199)函數(203)附錄A C語言概要歸納(208)C語言概述(208)數據類型、運算符與表達式(208)分支結構程序(210)循環控制(212)數組(214)函數(215)預處理命令(215)指針(217)結構體(218)位運算(219)附錄B 微控制器原理歸納(221)引言(221)一些概念(221)中央處理器(CPU)(222)RAM和ROM(223)地址總線、數據總線和控制總線(223)微處理器和微控制器(224)附錄C 無焊錫面包板(225)附錄D LCD模塊