
本书介绍用Keil C51对51单片机进行系统编程的实用方法,从驱动一位数码管显示“8”的程序起,以多个案例为铺垫,讲解了含时控功能的电子钟温度计和16×16点阵LED汉字显示屏的产品创意和程序设计,掌握单片机关于两个外中断、两个内中断、单总线器件、双总线器件、三总线器件、串并转换、IAP编程和用串行通信把汉字字模从PC写入单片机片外Flash存储器等核心技术。 读者对象:电类专业学生和初学者
前 言 中职学校机电类专业学生学习单片机技术,有利于提高中职学生的职业技能和就业创业能力,有利于中职学生的继续学习和终身学习。结合中等职业学校的教学实际和中职学生的学习特点,我们编写了这本《单片机C语言案例教程》。 学习从兴趣起步!兴趣是最好的老师!激发和发展学生的单片机学习兴趣,是本书的编写宗旨;强化单片机学习的操作和实践,是本书的编写风格。本书以“案例+项目”的形式展开中职学生单片机的学习开发过程。用案例为项目做铺垫,用项目整合案例,用项目向学生展现其学习价值和使用价值。 全书共13章。 第1章简要介绍了MCS-51单片机的内部结构和本书单片机学习板的电原理图及其印制电路板图,详细介绍了用Keil C51编译器和STC-ISP下载软件完成单片机编程的整个过程步骤,并用6个案例展示了C语言对单片机编程的易用性。 第2章集中介绍了单片机C语言编程的基本知识和简明方法,以作为全书各案例源程序分析时的理论依据,可以不按其小节顺序讲授。 第3章以数码管的花样显示为要求,用6个案例说明了单片机C语言编程中“谋篇布局”的思谋策略。 第4章简要介绍了中断的概念和单片机中的中断资源,用5个案例说明了如何设置中断允许寄存器IE和中断优先级寄存器IP,展示了如何使用两个外中断、两个内中断的具体方法,演示了中断嵌套和中断串接的特点。 第5章介绍了对三总线器件的编程要点,用一个案例展示了对三总线器件DS1302编程的软、硬件设计。 第6章介绍了对二总线器件的编程要点,用一个案例展示了对二总线器件AT24C02编程的软、硬件设计。 第7章介绍了对单总线器件的编程要点,用一个案例展示了对单总线器件DS18B20编程的软、硬件设计。 第8章介绍了单片机开发中的编程整合技术,即用“有时控功能和温度显示的电子钟”这一项目,展示了将三总线器件DS1302案例、二总线器件AT24C02案例、单总线器件DS18B20案例整合成一个产品项目的单片机学习开发技术。在这个项目中,还根据项目所需,综合使用了单片机中的四个中断资源。 第9章介绍了16×16点阵LED汉字显示屏的软、硬件设计。用16×16点阵LED汉字显示屏这一项目,展示了用C语言开发小型LED汉字显示屏的实用技术方案。 第10章介绍了基于宏晶公司技术资料的STC单片机片内E2PROM编程技术。用一个案例演示了STC单片机片内E2PROM的编程效果,用另一项目提升了“有时控功能和温度显示的电子钟”的开发价值。 第11章介绍了单片机与PC间的串行通信技术。用一个案例展示了单片机与PC间串行通信的实用方法及其效果。 第12章介绍了单片机扩充片外数据存储器的接口电路,用两个案例示范了HM62256和W29C020的硬件接口和读写技术,用两个项目展示了使用片外数据存储器的LED汉字显示屏的技术升级方案。 第13章介绍了模数转换和数模转换知识,用一个案例展示了ADC0809的接口电路和模数转换效果,用另一个案例展示了DAC0832的接口电路和数模转换效果。 除第2章外,本书各章均配有电子教案。每章的电子教案均按节的顺序组织。对书中的每一案例的下载操作和运行效果,电子教案中都制作有一段视频演示利于提高教学效果。 本书还有一篇讲解本书所用单片机学习板印刷电路图设计的电子教程,读者能在该电子教程的辅导下完成本书学习板电路的印刷电路设计,设计出来的PCB与本书正文中的图1-4完全一致。这就能指导读者,全程走通,从单片机的程序设计,到单片机的项目开发,再到单片机的电路制版的整个单片机产品研制过程。 本书配有电子教案、教学指南、案例源程序、习题解答、PCB制作电子教程和用于实际制版加工的PCB文件,能更多地满足读者在各方面的实用需求。请有此需要的教师登录华信教育网(www.hxedu.com.cn)免费注册后进行下载,有问题时请在网站留言板留言或与电子工业出版社联系(E-mail:hxedu@phei.com.cn)。 本书全书由白炽贵统稿。第1~4章由罗永编写,第5~8章由余明飞编写,第9~13章由白炽贵编写。由于编者水平有限,书中难免有错谬之处,敬请广大读者指正。 编著者 2010年8月
目 录 第1章 单片机基础 1 1.1 单片机简介 1 1.2 用单片机芯片组成单片机应用系统 2 1.3 对单片机编程以实现单片机系统的功能 5 【案例1】 在4位数码管的最左位上显示“8.” 5 1.4 把程序写入单片机芯片的操作平台的操作步骤 6 1.5 从数码管显示学单片机编程 18 【案例2】 数码管上的“8.8.”显示 18 【案例3】 被动形式的“8051”显示 20 【案例4】 主动形式的“8051”显示 22 【案例5】 模块化的“8051”显示 24 【案例6】 实用型的“8051”显示 26 1.6 源程序的阅读要点 28 1.7 REG51.h头文件简介 31 小结1 33 习题1 34 第2章 C语言编程基础 35 2.1 C语言程序的组成结构和运行机制 35 2.2 C语言的字符集、标识符、关键字和语句 36 2.3 C语言中的数据类型 37 2.4 常量和变量 38 2.5 整型数据 38 2.6 实型数据 39 2.7 字符型数据 39 2.8 C51扩充数据类型 40 2.9 运算符与表达式 40 2.9.1 算术运算符与算术表达式 40 2.9.2 赋值运算符与赋值表达式 41 2.9.3 关系运算符和关系表达式 42 2.9.4 逻辑运算符与逻辑表达式 43 2.9.5 位运算符与位运算表达式 43 2.9.6 逗号运算符与逗号表达式 43 2.9.7 运算符的优先级和结合性 44 2.10 程序的三种基本结构 45 2.11 选择结构 46 2.12 循环结构 48 2.13 数组 51 2.13.1 一维数组的定义和引用 51 2.13.2 二维数组的定义和引用 52 2.14 变量和数组的存储器类型 54 2.15 函数的定义和调用 54 2.15.1 系统库函数 54 2.15.2 用户自定义函数 55 2.15.3 函数的定义 55 2.15.4 函数调用的方式和规则 56 2.15.5 全局变量和局部变量 57 小结2 57 习题2 58 第3章 用数码管模拟的循环灯 59 【案例7】 “并驾齐驱”的跑马灯 59 【案例8】 “迈步边关”的巡逻灯 64 【案例9】 “大江东去”的流水灯 69 【案例10】 “孔雀开屏式”循环灯 73 【案例11】 奔腾不息的“8051” 77 【案例12】 9999倒数数的数码管显示 82 小结3 85 习题3 86 第4章 中断资源的应用编程 87 4.1 中断的概念 87 4.2 中断允许寄存器IE和中断优先级寄存器IP 87 4.2.1 中断允许寄存器IE 87 4.2.2 中断优先级寄存器IP 88 4.3 定时器/计数器简介 89 4.3.1 定时器/计数器体系结构示意图 89 4.3.2 特殊功能寄存器TCON 89 4.3.3 特殊功能寄存器TMOD 90 【案例13】 用外中断INT1操作插曲显示 91 【案例14】 中断插曲的中断插曲显示 95 【案例15】 基于定时器中断的数字钟 99 【案例16】 基于计数器中断的中断插曲 104 【案例17】 定时器T1与计数器T0的串接使用 107 小结4 111 习题4 111 第5章 日历时钟DS1302的应用编程 113 5.1 日历时钟DS1302简介 113 5.2 对DS1302的写读程序设计 114 5.2.1 最底层的按位写读函数 114 5.2.2 对DS1302的字节写读函数 116 【案例18】 基于DS1302的实用电子钟 117 小结5 125 习题5 125 第6章 AT24C02的应用编程 126 6.1 I2C总线简介 126 6.1.1 I2C总线接口 126 6.1.2 I2C器件的地址 126 6.1.3 对I2C器件进行数据传送的操作时序 127 6.2 AT24C02简介 127 6.2.1 AT24C02引脚图 127 6.2.2 读/写AT24C02的专用函数 128 6.2.3 9个专用函数间的调用路线图 131 【案例19】 AT24C02应用编程 132 小结6 138 习题6 138 第7章 DS18B20的编程应用 139 7.1 DS18B20使用简介 139 7.1.1 DS18B20的外形及与单片机的接口 139 7.1.2 DS18B20的内部结构和操作指令 139 7.2 对DS18B20的操作时序和读/写专用函数 140 7.2.1 对DS18B20的操作时序 140 7.2.2 DS18B20的读/写专用函数 141 【案例20】 DS18B20的应用编程 143 小结7 149 习题7 149 第8章 有时控功能和温度显示的电子钟项目设计 150 8.1 项目简介 150 8.2 项目源程序设计要点分析 164 小结8 168 习题8 169 第9章 16×16点阵LED汉字显示屏项目设计 170 9.1 项目简介 170 9.2 16×16点阵LED汉字显示屏电原理图 170 9.3 74HC138功能简介 171 9.4 74HC595功能简介 172 9.5 单片机与LED汉字显示屏的接口设计 174 9.6 汉字字模在二维数组中的存储格式 174 9.7 16×64点阵LED汉字显示屏项目源程序及分析 175 9.8 16×16汉字字模文件的建立 180 小结9 183 习题9 183 第10章 使用片内E2PROM存储器 184 10.1 IAP和ISP简介 184 10.2 IAP技术的接口函数 184 【案例21】 片内E2PROM编程案例 187 10.3 用片内E2PROM取代电子钟项目中的AT24C02 192 小结10 194 习题10 194 第11章 单片机与PC的串行通信 195 【案例22】 单片机与PC的串行通信案例 198 小结11 205 习题11 206 第12章 单片机片外数据存储器的扩充 207 12.1 HM62256存储器的扩充及使用案例 207 12.1.1 HM62256存储器的扩充 207 12.1.2 HM62256存储器的使用 209 12.2 用HM62256存储汉字字模案例 212 12.3 W29C020存储器的扩充和使用案例 219 12.3.1 W29C020存储器的扩充 219 12.3.2 W29C020存储器的使用 221 12.4 用W29C020存储字模的LED汉字显示屏项目设计 225 小结12 232 习题12 232 第13章 A/D转换与D/A转换简介 233 13.1 A/D器件ADC0809简介 233 13.2 ADC0809的使用接口与编程 234 13.2.1 ADC0809与单片机的接口 234 13.2.2 ADC0809的应用编程 236 【案例23】 基于ADC0809的模/数转换示例 237 13.3 D/A器件DAC0832简介 239 13.4 DAC0832的使用接口与编程 240 13.4.1 DAC0832与单片机的接口 240 13.4.2 DAC0832的应用编程 240 【案例24】 DAC0832的应用编程 241 小结13 243 习题13 243
http://www.hxedu.com.cn/hxedu/fg/book/bookinfo.html?code=G0125190