内容简介
基于AVR Studio+WinAVR(GCC)组合环境和Proteus硬件仿真平台,精心安排了100个AVR单片机C程序设计案例。《单片机C语言程序设计实训100例:基于AVR+Proteus仿真》提供了所有案例完整的C语言源程序,各案例设计了难易适中的实训目标。
基础设计类案例涵盖AVR单片机最基本的端口编程、定时/计数器应用、中断程序设计、A/D转换、比较器程序设计、EEPROM、Flash、USART及看门狗程序设计;硬件应用类案例涉及单片机存储器扩展、接口扩展、译码、编码、驱动、光电、机电、传感器、I2C/TWI及SPI接口器件、MMC、红外等器件;综合设计类案例涉及消费类电子产品、仪器仪表及智能控制设备相关技术,相关案例涉及485及RTL8019的应用。
《单片机C语言程序设计实训100例:基于AVR+Proteus仿真》适合用作大专院校学生学习实践AVR单片机C语言程序设计技术的参考书,也可用作电子工程技术人员、单片机技术爱好者的学习参考书。
内页插图
目录
第1章 AVR单片机C语言程序设计概述1
1.1 AVR单片机简介1
1.2 AVRStudio+WinAVR开发环境安装及应用4
1.3 AVRGCC程序设计基础7
1.4 程序与数据内存访问14
1.5 I/O端口编程14
1.6 外设相关寄存器及应用16
1.7 中断服务程序31
1.8 GCC在AVR单片机应用系统开发中的优势33
第2章 Proteus操作基础35
2.1 Proteus操作界面简介35
2.2 仿真电路原理图设计37
2.3 元件选择39
2.4 仿真运行44
2.5 Proteus与AVRStudio的联合调试45
2.6 Proteus在AVR单片机应用系统开发中的优势46
第3章 基础程序设计48
3.1 闪烁的LED48
3.2 左右来回的流水灯50
3.3 花样流水灯52
3.4 LED模拟交通灯54
3.5 单只数码管循环显示0~957
3.6 8只数码管滚动显示单个数字59
3.7 8只数码管扫描显示多个不同字符61
3.8 K1~K4控制LED移位62
3.9 数码管显示4×4键盘矩阵按键65
3.10 数码管显示拨码开关编码68
3.11 继电器控制照明设备70
3.12 开关控制报警器72
3.13 按键发音74
3.14 INT0中断计数76
3.15 INT0与INT1中断计数79
3.16 TIMER0控制单只LED闪烁83
3.17 TIMER0控制流水灯85
3.18 TIMER0控制数码管扫描显示87
3.19 TIMER1控制交通指示灯90
3.20 TIMER1与TIMER2控制十字路口秒计时显示屏94
3.21 用工作于计数方式的T/C0实现100以内的脉冲或按键计数98
3.22 用定时器设计的门铃100
3.23 报警器与旋转灯103
3.24 100000s以内的计时程序106
3.25 用TIMER1输入捕获功能设计的频率计109
3.26 用工作于异步模式的T/C2控制的可调式数码管电子钟113
3.27 TIMER1定时器比较匹配中断控制音阶播放117
3.28 用TIMER1输出比较功能调节频率输出120
3.29 TIMER1控制的PWM脉宽调制器123
3.30 数码管显示两路A/D转换结果126
3.31 模拟比较器测试128
3.32 EEPROM读/写与数码管显示130
3.33 Flash程序空间中的数据访问136
3.34 单片机与PC机双向串口通信仿真141
3.35 看门狗应用147
第4章 硬件应用150
4.1 74HC138与74HC154译码器应用150
4.2 74HC595串入并出芯片应用153
4.3 用74LS148与74LS21扩展中断157
4.4 62256扩展内存实验160
4.5 用8255实现接口扩展163
4.6 可编程接口芯片8155应用168
4.7 可编程外围定时/计数器8253应用173
4.8 数码管BCD解码驱动器7447与4511应用178
4.9 8×8LED点阵屏显示数字181
4.10 8位数码管段位复用串行驱动芯片MAX6951应用183
4.11 串行共阴显示驱动器MAX7219与7221应用188
4.12 16段数码管演示193
4.13 16键解码芯片74C922应用196
4.14 1602LCD字符液晶测试程序199
4.15 1602液晶显示DS1302实时时钟205
4.16 1602液晶工作于4位模式实时显示当前时间211
4.17 2×20串行字符液晶演示214
4.18 LGM12864液晶显示程序217
4.19 PG160128A液晶图文演示226
4.20 TG126410液晶串行模式显示247
4.21 用带SPI接口的MCP23S17扩展16位通用I/O端口257
4.22 用TWI接口控制MAX6953驱动4片5×7点阵显示器262
4.23 用TWI接口控制MAX6955驱动16段数码管显示266
4.24 用DAC0832生成多种波形270
4.25 用带SPI接口的数/模转换芯片MAX515调节LED亮度273
4.26 正反转可控的直流电机276
4.27 正反转可控的步进电机279
4.28 DS18B20温度传感器测试282
4.29 SPI接口温度传感器TC72应用测试293
4.30 SHT75温、湿度传感器测试299
4.31 用SPI接口读/写AT25F1024309
4.32 用TWI接口读/写24C04318
4.33 MPX4250压力传感器测试326
4.34 MMC存储卡测试329
4.35 红外遥控发射与解码仿真340
第5章 综合设计348
5.1 多首电子音乐的选播348
5.2 电子琴仿真353
5.3 普通电话机拨号键盘应用357
5.4 1602LCD显示仿手机键盘按键字符363
5.5 数码管模拟显示乘法口诀369
5.6 用DS1302与数码管设计的可调电子钟372
5.7 用DS1302与LGM12864设计的可调式中文电子日历380
5.8 用PG12864LCD设计的指针式电子钟393
5.9 高仿真数码管电子钟401
5.10 1602LCD显示的秒表409
5.11 用DS18B20与MAX6951驱动数码管设计的温度报警器413
5.12 用1602LCD与DS18B20设计的温度报警器421
5.13 温控电机在L298驱动下改变速度与方向运行431
5.14 PG160128中文显示日期时间及带刻度显示当前温度439
5.15 液晶屏曲线显示两路A/D转换结果447
5.16 用74LS595与74LS154设计的16×16点阵屏452
5.17 用8255与74LS154设计的16×16点阵屏457
5.18 8×8LED点阵屏仿电梯数字滚动显示461
5.19 用内置EEPROM与1602液晶设计的带MD5加密的电子密码锁466
5.20 12864LCD显示24C08保存的开机画面480
5.21 12864LCD显示EPROM27C256保存的开机画面488
5.22 I2CAT24C1024×2硬字库应用491
5.23 SPI-AT25F2048硬件字库应用498
5.24 带液晶显示的红外遥控调速仿真505
5.25 能接收串口信息的带中英文硬字库的80×16点阵显示屏511
5.26 用AVR与1601LCD设计的计算器523
5.27 电子秤仿真设计531
5.28 模拟射击训练游戏537
5.29 PC机通过485远程控制单片机546
5.30 用IE访问AVR+RTL8019设计的以太网应用系统550
参考文献568
前言/序言
目前,各高校电类专业都将C语言作为专业基础课程纳入教学计划。由于C语言功能强大、便于模块化开发、所带库函数非常丰富、编写的程序易于移植,因此,它成为单片机应用系统开发最快速高效的程序设计语言。仅具有C语言基础知识但不熟悉单片机指令系统的读者也能很快掌握单片机C程序设计技术,C语言在单片机应用系统设计上的效率优势已经远远高于汇编、BASIC等开发语言。
单片机C程序设计不同于通用计算机应用程序设计,它必须针对具体的微控制器及外围电路来完成。为便于学习单片机应用程序设计和系统开发,很多公司推出了单片机实验箱、仿真器和开发板等,这些硬件设备可用于验证单片机程序、开发和调试单片机应用系统。但由于这些设备价格不菲,它们阻碍了普通读者对单片机技术的学习和研究。令人高兴的是,英国Labcenter公司推出了具有单片机系统仿真功能的Proteus软件,单片机系统开发通常是基于上位机加目标系统进行的,Proteus的出现使读者仅用一台PC在纯软件环境中完成系统设计与调试成为可能。目前Proteus支持8051、AVR、PIC等多种单片机,系统库中包含有大量的模拟、数字、光电和机电类元器件,系统还提供了多种虚拟仪器,用AVR Studio+WinAVR(GCC)开发的程序可以在用Proteus设计的仿真电路中调试和交互运行。这无疑为读者学习和提高AVR单片机C程序设计技术,为单片机应用系统高水平工程师的成长提供了理想平台。
为帮助读者快速提高AVR单片机C程序设计水平,本书基于AVR Studio+WinAVR(GCC)组合开发环境和Labcenter公司的Proteus仿真平台,精心安排了100个AVR单片机C程序设计案例,各案例同时给出了难易适中的实训目标。
前2章分别对AVRGCC程序设计和Proteus操作基础作了概述。第3章基础程序部分给出的案例涵盖AVR单片机端口编程、定时/计数器应用、A/D转换、模拟比较器程序设计、中断程序设计、EEPROM、Flash、USART及看门狗程序设计,各案例分别对相关知识和技术要点作了阐述与分析,源程序中也给出了丰富的注释信息。第4章硬件应用部分针对AVR单片机的存储器扩展、接口扩展、译码、编码、驱动、光电、机电、传感器、I2C/TWI及SPI接口器件、MMC、红外等器件给出了数十个案例,对案例中涉及的硬件技术资料亦进行了有针对性的分析,以便于读者快速理解相关代码的编写原理。第5章的案例综合应用了单片机内部资源和外部扩展硬件,通过对这些案例的独立分析研究与调试运行,读者用C语言开发AVR单片机应用系统的能力会得到大幅提升。
本书是单片机C语言程序设计实训仿真系列8051版之后的第2册。为使本书能早日与读者见面,笔者坚持挤出时间不懈耕耘。在编写过程中,刘静、张力、王魏参与了案例的调试与校稿工作,在此对他们深表感谢!本书从选题、撰稿到出版的全过程中,学院领导、学院科研处及高教研究所对本选题始终给予大力支持,并提供项目资助,教务处和信息技术系也一直关注本书的编写与进展情况,在此一并对学院和部门领导的关心与支持表示由衷感谢!
嵌入式系统开发之路:从理论到实践的 AVR 单片机实战详解 在飞速发展的科技浪潮中,嵌入式系统已成为现代工业、智能家居、物联网等领域不可或缺的核心技术。而 AVR 系列单片机凭借其高性能、低功耗、易于开发等优势,在全球范围内得到了广泛应用,成为众多工程师和爱好者的首选平台。本书旨在带领读者深入探索 AVR 单片机的魅力,从基础理论到实际应用,提供一条清晰、高效的学习路径,助力您成为一名合格的嵌入式系统开发者。 本书特色与价值: 本书并非一本枯燥的理论堆砌,而是强调“学以致用”的学习理念。我们精心设计了 100 个精选的实训项目,涵盖了 AVR 单片机开发的方方面面,从最基本的 GPIO 控制,到复杂的通信协议、传感器数据采集、电机驱动,再到人机交互界面设计,每一个项目都经过精心挑选,力求在有限的篇幅内,展现 AVR 单片机的强大功能和应用潜力。 实训项目的编排逻辑: 本书的实训项目并非随意组合,而是遵循由浅入深、由简到繁的学习规律。 第一部分: AVR 单片机基础入门 首先,我们将从 AVR 单片机的基本概念、内部结构、指令集、寄存器模型等最核心的知识点讲起。 接着,通过一系列基础的硬件操作实验,例如 LED 闪烁、按键输入检测、蜂鸣器发声等,帮助读者熟悉 AVR 开发环境的搭建,如 Keil MDK、GCC for AVR 等,以及掌握基本的 C 语言编程技巧在单片机开发中的应用。 理解中断机制是 AVR 单片机高级应用的基础,本书将详细讲解外部中断、定时器中断、串口中断等,并通过实例演示如何高效利用中断来提升程序响应速度和系统性能。 定时器/计数器是 AVR 单片机的重要外设,本书将深入剖析其工作原理,并通过 PWM 产生、脉冲测量、延时等实际应用,让读者掌握其灵活运用。 第二部分: AVR 单片机常用外设与通信协议 GPIO 扩展与控制: 进一步拓展 GPIO 的应用,例如驱动多位 LED 数码管显示、控制继电器、步进电机等。 ADC 模数转换: 学习如何利用 AVR 的 ADC 模块采集模拟信号,并将其转换为数字信号进行处理,如温度传感器、光敏电阻、电位器等数据采集。 DAC 数模转换: 掌握如何利用 DAC 模块输出模拟信号,例如产生不同频率的音频信号。 串口通信 (UART): 深入讲解 UART 的工作原理,以及如何实现单片机与 PC 机、其他单片机之间的串行通信,为后续的无线通信和网络通信打下基础。 I2C 通信: 学习 I2C 协议,并实践与各种 I2C 设备(如 EEPROM、RTC 实时时钟、各种传感器)的通信,理解其主从模式、地址寻址等机制。 SPI 通信: 讲解 SPI 协议,并演示如何与 SPI 设备(如 SD 卡、LCD 控制器、ADC/DAC 芯片)进行高效的数据传输。 外部存储器接口: 介绍如何扩展外部 RAM 和 ROM,以满足更复杂的程序和数据存储需求。 第三部分: AVR 单片机进阶应用与系统集成 LCD 显示驱动: 讲解字符型 LCD 和图形点阵 LCD 的驱动原理,并通过实例实现汉字、图形的显示,为用户界面设计提供基础。 人机交互设计: 结合按键、编码器、触摸屏等输入设备,以及 LCD、OLED 等输出设备,设计友好的用户交互界面,提升产品的易用性。 电机控制: 深入讲解直流电机、步进电机、伺服电机的驱动原理和控制方法,包括速度控制、方向控制、位置控制等。 传感器网络与数据采集: 整合多种传感器,构建简单的数据采集系统,并实现数据的存储和初步分析。 无线通信模块集成: 介绍与常见的无线通信模块(如 NRF24L01、ESP8266、蓝牙模块)的接口和通信方式,为物联网应用奠定基础。 嵌入式操作系统 (RTOS) 简介与实践: 在部分项目结尾,我们将引入实时操作系统 (RTOS) 的概念,并尝试用 RTOS 来管理任务,实现更复杂的并发控制。 Proteus 仿真环境的运用: 本书的一大亮点在于 全程结合 Proteus 仿真软件。Proteus 是一款强大的电子设计自动化 (EDA) 软件,集电路原理图设计、PCB 布局布线以及虚拟仿真于一体。通过 Proteus,您可以在不实际购买硬件的情况下,进行 AVR 单片机的代码编写、编译、下载和仿真测试。 虚拟硬件平台: Proteus 提供了丰富的 AVR 单片机型号、外围器件(LED、按键、数码管、传感器、电机等)的模型库,您可以像搭建真实电路一样,在 Proteus 中搭建虚拟的 AVR 开发平台。 代码仿真与调试: 您可以将编写好的 C 语言程序编译成 HEX 文件,然后在 Proteus 中载入到 AVR 单片机模型中,进行实时仿真。Proteus 允许您单步执行代码,观察寄存器变化,查看输入输出波形,方便您查找和修复程序中的错误。 快速原型验证: 仿真环境极大地缩短了产品开发周期。在投入实际硬件成本之前,您可以在 Proteus 中充分验证您的设计思路和程序逻辑,及时发现问题并进行优化。 降低学习成本: 对于初学者而言,直接接触实体硬件可能会面临器件损坏、焊接困难等问题。Proteus 仿真环境有效降低了入门门槛,让您可以专注于核心的编程和逻辑设计。 学习本书,您将收获: 扎实的 AVR 单片机理论知识: 全面掌握 AVR 单片机的架构、指令集、寄存器以及各外设的工作原理。 精湛的 C 语言嵌入式编程技巧: 熟练运用 C 语言进行嵌入式系统开发,掌握代码优化、中断处理、驱动编写等关键技能。 丰富的实战经验: 通过 100 个贴近实际应用的实例,您将亲手完成各种功能的开发,积累宝贵的项目经验。 高效的仿真调试能力: 熟练掌握 Proteus 仿真软件,能够独立完成电路设计、代码仿真和硬件调试。 解决实际问题的能力: 能够将所学知识融会贯通,独立分析和解决嵌入式系统开发过程中遇到的各种挑战。 为更高级的嵌入式技术打下坚实基础: 本书内容涵盖了许多高级嵌入式开发所需的基础,为后续学习 Linux 嵌入式、FPGA 等技术提供有力支撑。 本书的目标读者: 电子工程、自动化、计算机科学等专业的在校学生: 本书是您系统学习单片机课程的理想教材,能够帮助您巩固课堂知识,并通过实践加深理解。 嵌入式系统开发工程师: 无论您是初入职场的新人,还是希望拓展 AVR 技术栈的资深工程师,本书都能为您提供有价值的参考和实践案例。 嵌入式系统爱好者和创客: 如果您对智能硬件、物联网、机器人等领域充满热情,本书将是您开启嵌入式开发之旅的得力助手。 希望通过实践提升编程技能的开发者: 本书以项目驱动,帮助您将抽象的编程知识转化为解决实际问题的能力。 如何更好地利用本书: 1. 动手实践: 学习任何一项技术,动手实践都是最重要的。请务必亲手在 Proteus 中搭建电路,编写代码,运行仿真,观察结果。 2. 理解原理: 不要仅仅停留在复制代码,要努力理解每个项目背后的工作原理,例如中断是如何工作的,ADC 采样的过程是怎样的。 3. 思考与拓展: 对于每个项目,可以尝试思考如何对其进行改进,增加新的功能,或者将其应用到其他场景中。 4. 查阅资料: 在遇到问题时,可以查阅 AVR 单片机的官方数据手册 (Datasheet)、相关的技术文档,以及在线社区的讨论。 5. 循序渐进: 按照本书的章节顺序进行学习,逐步掌握基础知识,再进入更复杂的项目。 Embarking on the journey of embedded systems development can be a challenging yet immensely rewarding experience. This book serves as your comprehensive guide, demystifying the world of AVR microcontrollers and empowering you with practical, hands-on skills. Through a meticulously curated collection of 100 real-world projects, coupled with the powerful simulation capabilities of Proteus, you will gain a profound understanding of embedded system design and implementation. Prepare to transform theoretical concepts into tangible, functional systems.