《单片机应用技术C语言全书教学课件》由会员分享,可在线阅读,更多相关《单片机应用技术C语言全书教学课件(460页珍藏版)》请在金锄头文库上搜索。
1、单片机应用技术(单片机应用技术(C语言)语言)任务任务1认识单片机认识单片机任务任务2了解单片机的硬件结构了解单片机的硬件结构任务任务3单片机最小系统设计单片机最小系统设计任任务1 认识单片机片机1了解单片机的基本概念及发展史。2掌握AT89S51单片机的封装及引脚定义。3了解AT89S51单片机的主要功能特性。在利用单片机实现预定的设计目标前,首先需要对单片机有一个基本的了解。本任务的目的就是使读者对单片机形成一定的感性认识,学会识别不同封装形式单片机的引脚编号,并掌握各个引脚功能的定义。一、单片机的概念一、单片机的概念单片机是采用超大规模集成电路技术把具有数据处理能力的中央处理器(CPU)
2、、随机存储器(RAM)、只读存储器(ROM)、I/O接口电路、中断系统及定时/计数器等主要计算机部件集成到一块芯片上,使其具有计算机的基本功能,称为单片微型计算机(SingleChipMicroComputer,SCMC),简称单片机。二、单片机的发展史二、单片机的发展史第一阶段(19761979)单片机的探索阶段Intel公司MCS-48为代表 第二阶段(19791982)单片机的完善阶段Intel公司MCS-51为代表 第三阶段(19821990)16位单片机推出阶段Intel公司MCS-96为代表 第四阶段(1990至今)微控制器全面发展阶段MicrochipPICMotorola为代表
3、MC68HC三、单片机的封装形式及引脚定义三、单片机的封装形式及引脚定义PDIP封装形式的封装形式的AT89S51单片机的引脚描述片机的引脚描述引脚定引脚定义引脚引脚编号号功能描述功能描述VCC40电源引脚,接+5V电源GND20接地引脚,接+5V电源地XTAL1和XTAL219和18时钟引脚,外接时钟电路RST9复位引脚,用于单片机复位P0.0P0.7(P0口)39321.作为8位双向I/O口使用2.在访问外部存储器或外部接口电路时,分时用作低8位地址线和数据总线P1.0P1.7(P1口)181.作为8位准双向I/O口使用2.用于ISP编程下载(P1.5、P1.6、P1.7)(续表)表)引脚
4、定引脚定义引脚引脚编号号功能描述功能描述P2.0P2.7(P2口)21181.作为8位准双向I/O口使用2.在访问外部存储器或外部接口电路时,分时用作高8位地址线P3.0P3.7(P3口)10171.作为8位准双向I/O口使用2.具有第二功能(详见课题五中具体应用) /Vpp31外部/内部程序存储器使能端29外部程序存储器读选通信号端ALE/ 30地址锁存允许信号端四、四、AT89S51的功能特性的功能特性兼容MCS-51系列产品。4KBFlash存储器,支持在线编程,可反复擦写1000次。128B片内RAM。工作电压4.55.5V。全静态时钟033MHz。32个双向I/O口线。2个16位定时
5、/计数器。5个中断源,2个中断优先级。1个全双工UART串行口。看门狗定时器。低功耗空闲和省电模式。生生产厂家厂家类别型号型号举例例图 片片ATMEL公司AT89系列AT89C2051(DIP封装)AT89S52(DIP封装)AT90系列(AVR单片机)ATmega48(QFP封装)查找找资料,了解常料,了解常见的其他的其他类型型单片机。片机。生产厂家生产厂家类别类别型号举例型号举例图 片片STC公司STC单片机STC89C52RC(DIP封装)MicroChip公司PIC单片机PIC16F877A(DIP封装)PHILIPS公司51LPC系列LPC2148FBD64(LCC封装)生产厂家生产
6、厂家类别类别型号举例型号举例图 片片TI公司MSP430系列MSP430F1612(QFP封装)TMS370系列TMS370C722FNT(LCC封装)Motorola公司MC68HC908系列MC68HC908SR12CB(DIP封装)单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务2 了解了解单片机的硬件片机的硬件结构构1了解AT89S51单片机的内部结构。2了解AT89S51单片机I/O端口的结构特点。3掌握AT89S51单片机I/O端口的使用方法。设计单片机应用系统,不仅要进行程序的设计,还要进行硬件电路的设计。因此,设计时要求设计者对单片机的硬件结构要有一定的了
7、解。本任务就是要在了解单片机内部结构的基础上,掌握单片机I/O端口与外围电路的合理设计方法。一、单片机内部结构一、单片机内部结构单片机各片机各组成部分成部分说明明组成部分成部分说 明明中央处理器(CPU) 单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调地工作,完成运算和控制输入输出功能等操作数据存储器(RAM) 内部有256B的RAM,其中包含128B用户数据存储单元(地址为00H7FH)和128B专用寄存器单元(地址为80HFFH)程序存储器(ROM) 内部有4KB掩膜ROM,用于存放用户程序,原始数据或表格定时/计数器(T0
8、、T1) 含有两个16位的定时/计数器(T0、T1),以实现定时或计数功能组成部分成部分说 明明并行输入输出(I/O)口 共有4组8位并行I/O口(P0、 P1、P2和P3),用于单片机与外围设备之间的数据传输全双工串行口 内置一个全双工串行通信口,用于与其他设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用中断系统 共含有5个中断源(2个外部中断、2个定时/计数器中断和1个串行中断),并具有2级的优先级别选择时钟电路 需外接晶振和微调电容构成振荡电路,产生单片机运行的脉冲时序(续表)(续表)二、单片机的二、单片机的I/O端口端口AT89S51单片机有4个并行的I/
9、O端口,即P0、P1、P2和P3口。每个端口均由8个引脚(即8位)构成,包括一个锁存器、一个输出驱动器和一个输入缓冲器。P0口为双向8位三态I/O口,作为通用I/O口时,每一位能以吸收电流的方式驱动8个TTL负载。当用于外接存储器或者扩展I/O接口时,作为数据总线(D0D7)和地址总线(A0A7)的低8位(分时复用,通过ALE信号区分)。CPU可对其按字节方式或位方式进行操作。1P0口口P0口为漏极开路输出端口,即漏极没有电阻接至电源。作为I/O口输出时,输出低电平为“0”,但输出高电平为高阻态(并非+5V,相当于悬空状态),也就是说P0口不能真正地输出高电平,因此在使用时需外接上拉电阻,由电
10、源通过这个上拉电阻给负载提供电流,如右图所示。P0口作为通用I/O口时,要外接上拉电阻才能输出高电平,上拉电阻的阻值由外部负载电流决定;当作为地址/数据总线时,无需外接上拉电阻,此时不能再作通用I/O口使用。P1口为8位准双向I/O口。使用时与P0口相似,但其内部具有提升电路,由于输入不能锁存,必须先输出1才能正确读出端口电平,故称为准双向口。作为通用I/O口使用时可以直接驱动4个TTL负载。2P1口口P1.5:MOSI端(用于端(用于ISP编程,主出从入数据端)。编程,主出从入数据端)。P1.6:MOSO端(用于端(用于ISP编程,主入从出数据端)。编程,主入从出数据端)。P1.7:SCK端
11、(用于端(用于ISP编程,串行时钟输入端)。编程,串行时钟输入端)。同时P1口的部分引脚还具有第二功能:P2口为8位准双向I/O口。当用作通用并行I/O口时,其操作方式与P0、P1口类似,每一位可驱动4个TTL负载。当用于外接存储器或者扩展I/O接口时,P2口作为扩展的高8位地址(A8A15)总线口,与P0口共同构成16位地址总线(A0A15)。3P2口口引脚引脚符号名称符号名称功能功能P3.0RXD串行数据接收P3.1TXD串行数据发送P3.2外部中断0输入P3.3外部中断1输入P3.4T0定时器0的外部输入P3.5T1定时器1的外部输入P3.6外部数据存储器写信号P3.7外部数据存储器读信
12、号P3口为8位准双向口,其结构和操作方式等与P2口类似。同时P3口还可按位复用为第二功能,具体见下表。4P3口口三、单片机三、单片机I/O口的读写操作口的读写操作 P0口作口作为输出口使用出口使用单片机片机最小系最小系统P2口作口作为输入口使用入口使用单片机的4个I/O口在使用时,当某一端口既作输入又作输出使用,且要进行输出转输入操作时,需先将该端口写“1”然后再读。例例 P1口在输出转输入操作时的软件编程方法。口在输出转输入操作时的软件编程方法。汇编:汇编:MOVP1,#23HC51:P1=0x23;/P1口作输出口使用MOVP1,#0FFHP1=0xff;/先将P1口置“FF”MOVA,P
13、1ACC=P1;/P1口由输出转输入口若端口只作输入口使用,则读数时不必再向端口先写“1”。已知P0口内部位结构图如下图所示,试查找相关资料分析为何当P0口输出高电平时需外接上拉电阻。单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务3 单片机最小系片机最小系统设计1了解单片机最小系统各部分的组成及功能。2掌握单片机最小系统的设计与制作方法。单片机是一种微控制器,而任何微控制器正常工作最基本的条件是要有正确的电源、时钟和复位电路(即最小系统),三者缺一不可。因此,在所有的单片机应用电路中,单片机必须满足以上三个条件才能正常运行工作。本任务就是要认识单片机最小系统的组成及各部
14、分的作用,并最终完成单片机最小系统的设计与制作,这是每一位设计者必须掌握的最基本的硬件电路设计知识。一、电源电路一、电源电路单片机的工作电压单片机的工作电压单片机要想工作,首先要有为整个系统提供电源的供电模块。电源模块的稳定可靠是系统平稳运行的前提前提和基础基础。51系列单片机工作电源的电压一般为+4.5+5.5V,典型值为+5V,即将单片机的VCC脚接+5V电源,GND脚接地。二、时钟电路二、时钟电路单片机的单片机的“心脏心脏”即单片机内部的高增益反向放大器通过XTAL1、XTAL2引脚外接作为反馈元件的片外晶体振荡器(呈感性)与电容组成的并联谐振回路构成一个自激振荡器,向内部的时钟电路提供
15、振荡时钟。1内部时钟方式内部时钟方式外部时钟方式常用于多片51单片机同时工作,以便于同步。它是将外部振荡脉冲信号通过CMOS门电路输入至XTAL1脚,XTAL2脚悬空,如下图所示。时钟电路异常也会引起单片机CPU不工作,可通过测量ALE脚是否有六分频信号输出来判断振荡电路是否起振。2外部时钟方式外部时钟方式3时序时序51系列单片机的一个机器周期由12个振荡周期组成,分为6个状态,分别称为S1、S2、S3、S4、S5、S6,每个状态都包含P1和P2两相。振荡周期、状态周期、机器周期和指令周期的关系如下:例例AT89S51外接晶振频率为外接晶振频率为12MHz,则,则4个时个时间周期的具体值为:间
16、周期的具体值为:解:振荡周期1/12s状态周期2振荡周期1/6s机器周期6状态周期1s指令周期(14)机器周期14s三、复位电路三、复位电路单片机恢复初始状态值单片机恢复初始状态值1硬件复位硬件复位上电复位电路上电与按键均有效的复位电路2软件复位软件复位即看门狗复位,AT89S51内部自带看门狗定时器,由一个14位定时器及WDTRST(WatchDogTimeRST)寄存器构成。利用软件控制看门狗定时器,当系统进入死循环(程序跑飞)时,看门狗定时器自动复位,让系统恢复正常运作状态。一、画出单片机最小系统电路原理图一、画出单片机最小系统电路原理图步步骤说明明示范示范图片片1材料准备参照元器件清单
17、表二、备料二、备料三、硬件电路焊接及调试过程三、硬件电路焊接及调试过程步步骤说明明示范示范图片片2硬件焊接注:单片机的 /VPP端接电源,选内部存储器电路板元件布局图电路板背面 / Vpp端GNDVCC(+5V)步步骤说明明示范示范图片片3通电调试最小系统运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任务任务1ProteusISIS7.5软件的使用软件的使用任务任务2KeilC51Vision3软件的使用软件的使用任任务1 ProteusISIS7.5软件的使用软件的使用1熟悉ProteusISIS7.5仿真软件的集成工作环境。2掌握ProteusISIS7.5仿真软件
18、的基本使用方法。 通过绘制、编辑跑马灯控制电路原理图,熟悉Proteus ISIS 7.5仿真软件工作环境,并完成软件系统和硬件系统的连接调试。一、进入一、进入ProteusISIS的方法的方法方法1:双击桌面上的ISIS 7 Professional图标“ ”。方法2:单击“开始”“程序”“Proteus 7 Professional” “ISIS 7 Professional”命令。二、工作界面二、工作界面一、新建一、新建设计文件文件1打开ProteusISIS工作界面,单击“文件”“新建设计”命令,弹出模板选择窗口,选择好模板后单击“确定”按钮。 模板选择窗口2单击“文件”“保存设计”命
19、令,在弹出的保存窗口中设置好保存路径和文件名,最后单击“保存”按钮,则完成新建设计文件的保存。保存窗口在“”按钮中单击“P”按钮进入元器件选择窗口。二、添加元器件二、添加元器件添加元器件主要有两种方法:添加元器件主要有两种方法:1在关键字文本框中直接输入所需元件名称,则会在元件列表区出现与关键字相匹配的元件列表。选中所需元件,单击“确定”按钮或直接双击,便可将器件添加到ISIS的对象选择器窗口中。2在元件类别列表中选择元件所属类,然后在元件子类别列表中选择所属子类,再从元件列表区选择出所需元件。三、元件的放置、移动、旋转、删除和属性设置三、元件的放置、移动、旋转、删除和属性设置1放置放置在对象
20、选择器中单击选中要放置的元件,然后将光标移动到原理图的编辑区,在任意位置单击鼠标左键,即可出现一个随光标浮动的元器件原理图符号,移动光标到适当位置再单击鼠标左键即可完成该元器件的放置。2移动移动在原理图编辑窗口中,左击选中需要移动的元件(默认选中时为红色),再按住鼠标左键拖动元件至适当位置,释放鼠标左键,并左击空白处撤销选中状态,即可完成元件的移动。3旋转旋转放置元件前,在对象选择器窗口先选中要旋转的元件,再根据需要单击“”方位控制按钮,即可更改元件的放置方向。4删除删除方法1:右键双击该元件;方法2:先左击选中该元件,再按下“Delete”键删除。5属性设置属性设置用鼠标左键双击要编辑的元件
21、,可弹出编辑元件窗口对元件相关属性进行设置。元件的放置、移动、旋转、删除和属性设置操作均可通过右击该元件,弹出如图所示的快捷菜单来操作完成。四、放置电源、地四、放置电源、地单击“”图标,选中“POWER”行,将鼠标移到原理图编辑窗口的适当位置再单击,便可引入“电源”。选中“GROUND”,便可引入“地”。五、元器件的连线五、元器件的连线1两个两个对象之象之间的的连线 引脚间直接连线任意角度的连线设定路径连线 2总线与分支线的画法总线与分支线的画法 (1)单击总线按钮“”。总线与分支线之间的连接(2)在合适位置单击鼠标左键放置总线起点,双击鼠标左键放置总线终点。(3)将光标移近对象引脚末端,单击
22、引出分支线,使其终点移近总线并与总线中心相连,同时按住“Ctrl”键,即可画出与总线相连的分支线。 在元件的连线过程中,如果下一次的连线路径与上一次的连线相同,则可在下一个要连元件的引脚上左双击,这样就会形成一条和上一条路径相同的连线。 当电路中多根数据线、地址线、控制线并行时建议使用总线设计。3添加网络标号添加网络标号在Proteus仿真时,系统会默认网络标号相同的引脚是连接在一起的。六、电气检测六、电气检测单击菜单“工具”“电器规则检查”命令进行电气检测。七、仿真运行七、仿真运行1双击电路原理图中的AT89C51单片机,在弹出的属性编辑窗口中载入“跑马灯.hex”文件。在仿真运行中,各元件
23、引脚会呈现不同的颜色。例如红点代表输出高电平,蓝点代表低电平,灰点代表高阻状态,黄点表示短路。可以根据引脚的颜色来区分此时引脚输出的状态。2单击仿真运行“”按钮开始仿真。单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务2 KeilC51Vision3软件的使用软件的使用1熟悉KeilVision3的集成开发环境。2掌握KeilVision3的基本使用方法。3掌握烧录器的使用方法。在Keil Vision3环境下创建一个C项目,完成程序的输入、项目的编译和调试以及程序的仿真及下载,熟悉Keil Vision3的集成开发环境。一、启一、启动Keil Vision3的方法的方法
24、1双击桌面上的KeilVision3图标“ ”。2单击“开始”“程序”“KeilVision3”命令。菜单栏常用工具栏工程文件管理窗口程序编辑区信息窗口二、工作界面二、工作界面 文件工具文件工具栏的具体功能描述的具体功能描述符号符号命令命令符号符号命令命令符号符号命令命令新建文件右缩进一个制表符返回到之前位置打开文件左缩进一个制表符向前到新位置保存文件在当前行设置书签切换浏览器窗口保存全部文件移光标到下一个书签打印当前文档剪切移光标到前一个书签调试状态切换按钮复制清除所有书签切换工程窗口粘贴在多个文件中查找切换输出窗口撤销查找与替换插入/删除断点重做增加查找删除所有断点设置/关闭断点关闭所有断
25、点创建工具栏的具体功能描述创建工具栏的具体功能描述调试工具栏的具体功能描述调试工具栏的具体功能描述一、一、创建建C项目目单击“Project”“NewProject”命令设好路径,单击“保存”在“Database”区展开Atmel系列单片机,从中选择“AT89C51”,并单击“确定”即完成创建二、新建源程序文件二、新建源程序文件单击“File”“New”命令或单击“”按钮设好路径,单击“保存”程序输入完毕单击“File”“Save”命令当源程序为C语言程序时,后缀“.C”必须手工输入,这样才能让KeilC51采用对应的C语言方式来编译源程序。若为汇编语言,后缀名为“.ASM”即可。保存成功后,
26、源程序将会以不同颜色显示出来。三、编译文件三、编译文件1将文件加载到工程文件管理窗口右击“Target1”下拉菜单中的“SourceGroup1”选择所需文件,单击“Add”,将文件加载到工程文件管理窗口2编译文件右击“Target1”“OptionsforTargetTarget1”命令,或直接单击“”图标。单击创建工具栏中的编译按钮“”,开始编译当前源程序。晶 振 频率设置勾选创建HEX 文件单击“确定”按钮四、四、Proteus软件仿真软件仿真五、程序的烧录五、程序的烧录EP3.0 程序烧录器用串口数据线将烧录机与计算机的COM口连接好,然后将要烧录的单片机放入编程器IC锁紧座并锁紧。运
27、行程序烧录软件“Easy51Pro.exe”进行程序的烧录:1检测芯片ID,根据烧录单片机的类型选择具体型号。2单击“(自动)擦除器件”命令,将要烧录的单片机中之前的程序擦除。3单击“(自动)装入文件”命令,添加通过编译后的“*.HEX”或“*.BIN”文件。4单击“写器件”命令,将所选“*.HEX”或“*.BIN”文件写入单片机。5单击“(自动)效验数据”,检验数据是否出错,当提示“效验成功,数据正确”时,说明此次烧录成功。6取下单片机,插入电路板,观察实际运行情况。烧录完成后状态信息单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任务任务1C51程序结构及内部单元赋值操作程
28、序结构及内部单元赋值操作任务任务2C51运算符的应用运算符的应用任务任务3选择语句的应用选择语句的应用任务任务4循环语句的应用循环语句的应用任务任务5指针的定义及引用指针的定义及引用任任务1 C51程序程序结构及内部构及内部单元元赋值操作操作 1了解C51程序的基本结构。2掌握C51语言的数据类型。3利用绝对地址方式访问片内RAM存储单元。在单片机内部,运行时的程序及数据均存放在存储器中,运行过程中对内存单元的数据操作较为频繁。本任务主要练习如何手动修改单片机内部RAM单元的内容。如对单片机内部RAM存储空间地址为0x30的单元进行赋值运算操作。一、一、C51程序基本结构程序基本结构/*点亮单
29、片机P1.0口发光二极管.C*/#include /包含头文件sbit LED=P10; /位定义单片机 /的P1.0口void main( ) /主函数 LED=0; / 点亮P1.0口LED预处理命令预处理命令main( )main( ) 语句语句1;1; / / 语句注释语句注释 语句语句2;2; 1预处理命令预处理命令主要包括文件包含(include)、宏定义(define)和条件编译(ifndef)。程序中的“#include”代码表示在该程序中调用了AT89系列单片机的头文件。常用的还有“#include”、“#include”。这个文件中定义了AT89系列单片机内部的特殊功能寄存
30、器(SFR)的所有端口。文件的调用一般位于程序的开头,常见的调用表示方法有两种:(1)#include(2)#include“AT89X51.h”2main主函数主函数一个C程序中有且只有一个main主函数,它是函数的入口。main函数可以调用其他的功能函数,但其他功能函数不能调用main函数。函数后面一定要有一对大括号“”,程序就写在大括号里面。main前面的“void”表示“空”,即当main函数执行完后,不返回任何值,编程时可省略不写。main后面的“()”中没有写任何参数,表示了main函数和其他函数间没有任何的参数传递。但后面的“()”必须有,不能省略。3语句语句语句是构造函数的主体
31、部分,C程序中的语句大致分为两类:一类为说明语句,用来描述数据,决定内存的分配;另一类为执行语句,用来描述对数据进行的动作,决定内存的内容。C51程序没有行号,书写格式自由,一行内可以书写多条语句,一条语句也可分写在多行上,但为了区分程序中不同结构层次的语句,通常要求在同一结构层次上的语句,在行中缩进相同的字数。并且每条语句最后必须以一个分号“;”结尾,因为分号是语句的必要组成部分。4注释注释在C51程序中,为了增加程序的可读性,通常使用“/”或一对“/*/”对程序中的某些地方作必要注释。前者只能注释一行内容,后者则可以注释多行内容。注释只是为了方便用户编写和阅读程序,其自身在编译时不参与编译
32、。同时还经常利用 “ / ” 或 “ /*/ ” 屏蔽程序中的某些语句来调试程序。二、标识符与关键字二、标识符与关键字1标识符标识符指用来表示源程序中自定义对象名称的符号,可以是常量、变量、数组、结构、语句标号以及函数等。在C51中,标识符只能由字母(az,AZ)、数字(09)和下划线“_”组成,并且第一个字符必须是字母或者下划线。 在C51程序中,标识符区分大小写,如“max”和“MAX”表示两个完全不同的标识符。用户自定义的标识符不能与系统保留的关键字重复。关键字是C51编译器保留的一些特殊标识符,具有特定的含义和用法。单片机C51程序语言继承了ANSIC标准定义的关键字共32个,如aut
33、o、double、int、break、else、switch、case等。2关键字关键字sfrP0=0x80;/*定义地址为“0x80”的特殊功能寄存器命名为“P0”。对P0口的操作也就是对地址为“0x80”的特殊功能寄存器操作*/sbitLED=P20;/*位定义LED为单片机的P2.0端口,对LED操作也即对P2.0端口操作*/同时结合单片机硬件的特点扩充了一些关键字,如sfr、sbit。三、常量与变量三、常量与变量在程序运行过程中,数值不能被改变的量称为常量,可以为字符、十进制数或十六进制数;数值能被改变的量称为变量。例已知符号常量例已知符号常量“PI”,它的值为,它的值为3.14159
34、26,求任意圆的周长,求任意圆的周长和面积。和面积。#definePI3.1415926/*宏定义符号常量PI=3.141596*/main()floatr,c,s;/定义三个实型变量分别为r、c、sc=2*PI*r;/圆的周长公式s=PI*r*r;/圆的面积公式四、四、KeilC51支持的数据类型支持的数据类型类型型符号符号基本数据基本数据长度度 / bit取取值范范围字符型无unsigned char80255有signed char8-128+127整型无unsigned int16065535unsigned long3204294967295有signed int16-32768+3
35、2767signed long32-2147483648+2147483647(续表)(续表)类型型符号符号基本数据基本数据长度度 / bit取取值范范围实型有float32 1.176E-38 3.40E+38指针型无*824存储空间065535位类型无bit10或1sbit10或1特殊功能寄存器型无sfr80255sfr1616065535一、程序设计一、程序设计C51数据的存储类型与51单片机实际存储空间的对应关系:存存储类型型长度度/bit描描 述述data8直接寻址的片内RAM低128B,访问速度快bdata1片内RAM的可位寻址区(20H2FH),允许字节和位混合访问idata8间
36、接寻址访问的片内RAM,允许访问全部片内RAMpdata8用Ri间接访问的片外RAM的低256Bxdata16用DPTR间接访问的片外RAM,允许访问全部64k片外RAMcode16程序存储器ROM 64k空间在C51编译器中提供了一组宏定义对51单片机的code、data、pdata和xdata空间进行绝对寻址。并且规定只能以无符号数方式访问,定义了8个宏,其函数原型如下:#defineCBYTE(unsignedcharvolatile*)0x50000L)#defineDBYTE(unsignedcharvolatile*)0x40000L)#definePBYTE(unsignedch
37、arvolatile*)0x30000L)#defineXBYTE(unsignedcharvolatile*)0x20000L)#defineCWORD(unsignedintvolatile*)0x50000L)#defineDWORD(unsignedintvolatile*)0x40000L)#definePWORD(unsignedintvolatile*)0x30000L)#defineXWORD(unsignedintvolatile*)0x20000L)上述函数原型放在absacc.h文件中,使用时只需用预处理命令将其包含到源程序的文件中,即#include。如对单片机片内RA
38、M的0x30单元进行操作,可使用DBYTE以字节形式对data区寻址,即0x30的绝对地址为DBYTE0x30。接下来向单片机内存单元的赋值操作,可借助KeilC51编译器所支持的无符号字符变量进行操作。unsignedchardata30=0x15;/将十六进制数15赋值给无/符号字符变量data30DBYTE0x30=data30;/将data30中的值(0x15)传送到/片内RAM的30H单元根据上述任务分析编写完整的程序:二、编写程序并录入二、编写程序并录入三、调试运行三、调试运行编译无误后单击调试按钮,将自动弹出“debug”工具栏和存储器观察窗口。通过在存储器观察窗口地址栏内输入“
39、字母:数字”即可显示相应单元值。其中字母代表的意义如下表所示。数字代表所要查看相应单元中的地址,可以为十进制数也可以为十六进制数。字母字母对应的存储器空间对应的存储器空间字母字母对应的存储器空间对应的存储器空间C代码存储空间I间接寻址的片内存储空间D直接寻址的片内存储空间X扩展的外部 RAM 空间在地址栏后的文本框内输入“D:0x30”,然后单击运行“ ”按钮,则程序进入运行状态,再单击停止“”按钮,程序执行结束,即可观察到地址为0x30开始的片内RAM新的单元值,如下图所示。单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务2 C51运算符的运算符的应用用 1了解C51的
40、运算符、表达式及其规则。2掌握每一种算术运算符对数据操作的具体功能。3能够完成计算梯形面积程序的设计与调试。51系列单片机为单芯片微控制器(简称MCU),内部有具有数据运算处理能力的CPU。本任务主要利用C51中的算术运算符,计算下图所示梯形的面积(已知梯形的上底长为a,下底长为b,高是h),并通过串行窗口输出显示出来。一、算术运算符一、算术运算符运算符运算符意意 义示示 例(例(设x=5,y=3)加法运算z=x+y; / z=8减法运算z=x-y; / z=2*乘法运算z=x*y; / z=15/除法运算z=x/y; / z=1模运算(取余运算)z=x%y; / z=2在运算过程中,当只用作
41、加1和减1运算时,可以采用自增和自减运算符:运算符运算符意意 义示示 例(例(设x的初的初值为2)x+先使用x的值,再让x加1y=x+; / y=2,x=3+x先让x加1,再使用x的值y=+x; / y=3,x=3x-先使用x的值,再让x减1y=x- ; / y=2,x=1-x先让x减1,再使用x的值y=-x; / y=1,x=1二、关系运算符二、关系运算符运算运算符符意意 义示示 例(例(设a=5,b=6)小于a大于ab; / 返回值 0=小于等于(不大于)a=大于等于(不小于)a=b; / 返回值 0!=不等于a!=b; / 返回值 1= =等于a= =b; / 返回值 0三、逻辑运算符三
42、、逻辑运算符运算符运算符意意义示示 例(例(设a=5,b=6)&逻辑与 a&b; / 返回值 1|逻辑或 a | b; / 返回值 1!逻辑非!a 或 !b; / 返回值 0关系运算符和逻辑运算符通常用来判别某个条件是否满足,其运算结果只有“0”和“1”两种值。即当所指定的条件满足时结果为“1”,否则为“0”。四、位运算符四、位运算符运算符运算符意意义示示 例例 (设a = 0x25,b = 0x46)&按位与c = a&b;/c=0x04|按位或c = a | b;/c=0x67按位取反c= a; /c=0xda运算符运算符意意义示示 例例 (设a = 0x25,b = 0x46) 按位异或
43、c = a b;/c=0x63 左移(各位同时左移若干位,高位舍弃,低位补零)c = a 右移(各位同时右移若干位,低位舍弃,高位补零)c = a2;/c=0x94(续表)(续表)逻辑与是判断“&”两侧的表达式是否都为真,都为真则此逻辑与表达式值为真;按位与是将“&”两侧的数用二进制展开,每一位都求与运算(有0出0,全1出1),最后得到的二进制数即为结果。逻辑与结果只讲真和假,而按位与得出的仍然是一个二进制数。五、复合赋值运算符五、复合赋值运算符运算符运算符意意 义示示 例例+=左边的变量或数组元素加上右边表达式的值b+=a 相当于b=b+a=左边的变量或数组元素减去右边表达式的值b=a 相当
44、于b=ba*=左边的变量或数组元素乘以右边表达式的值b*=a 相当于b=b*a/=左边的变量或数组元素除以右边表达式的值b/=a 相当于b=b/a%=左边的变量或数组元素模右边表达式的值b%=a 相当于b=b%a(续表)(续表)运算符运算符意意 义示示 例例=左移操作,再赋值b=a 相当于b=b=右移操作,再赋值b=a 相当于b=ba&=按位与操作,再赋值b &=a 相当于 b = b & a| =按位或操作,再赋值b | = a 相当于 b = b | a =按位异或操作,再赋值 b = a 相当于b = b a六、条件运算符六、条件运算符一般形式如下:逻辑表达式?表达式逻辑表达式?表达式1
45、:表达式:表达式2例当例当a=10,b=12时,求时,求a、b中最大值。中最大值。其条件表达式:max=(ab)?a:b一、程序设计一、程序设计梯形面积的计算主要分为三步:a+b;(a+b)h;(a+b)h2。根据C51中提供的算术运算符,则梯形的面积表达式为:S=(a+b)* h / 2 为了保证梯形面积计算结果的准确,程序中应定义梯形上底长a、下底长b、高h和梯形面积值S均为浮点型变量。 二、编写程序并录入二、编写程序并录入根据上述任务分析编写完整的程序:三、调试运行三、调试运行 1载入源文件,编译无误后单击调试按钮,自动弹出“debug”工具栏和存储器观察窗口。为了查看程序的运行结果,单
46、击“”按钮,弹出“serial#1”的串行窗口。 2单击运行按钮“ ”,按提示输入相应的值再分别按下回车键,则在串行窗口中即可显示出单片机计算后的梯形面积值。运行中可进行多次数据输入并计算,如图所示。单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务3 选择语句的句的应用用 1了解C51程序中选择结构的构建。2了解if、switch/case语句的功能。3能够完成学生成绩等级划分程序的设计与调试。将某校学生成绩划分为A、B、C、D、E五个等级,见下表。同时,要求根据不同的分数打印出其相应等级。数据范围(成绩)数据范围(成绩)等级等级100error90100A8089B70
47、79C6069D100)grade=e;/错误(error)elseif(score=90)grade=A;/等级为Aelseif(score=80)grade=B;/等级为Belseif(score=70)grade=C;/等级为Celseif(score=60)grade=D;/等级为Delsegrade=E;/等级为E对于不同成绩的等级划分,借助于switch/case语句打印输出:switch(grade)caseA:printf(学生的成绩等级为Ann);break;caseB:printf(学生的成绩等级为Bnn);break;caseC:printf(学生的成绩等级为Cnn);b
48、reak;caseD:printf(学生的成绩等级为Dnn);break;caseE:printf(学生的成绩等级为Enn);break;default:printf(Errorn);break;二、编写程序并录入二、编写程序并录入根据上述任务分析编写完整的程序:三、调试运行三、调试运行 1载入源文件,编译无误后单击调试按钮,自动弹出“debug”工具栏和存储器观察窗口。为了查看程序的运行结果,单击“”按钮,弹出“serial#1”的串行窗口。 2单击运行按钮“ ”,按提示输入一名学生的成绩再按下回车键,则在串行窗口中即可显示出该学生的成绩等级。运行中可进行多次成绩输入,如图所示。单击此处返回
49、目录单击此处返回目录单击此处返回目录单击此处返回目录任任务4 循循环语句的句的应用用 1了解C51程序中循环结构的构建。2掌握for、while等循环语句的功能。3掌握0100累加和的程序设计与调试方法。在单片机的程序设计中,当一段程序需要反复执行时,通常采用循环体来构建,这样不仅可以优化程序,而且还可以提高程序的执行效率。本任务以完成Sum=0+1+2+3+99+100累加和的程序设计为例,学习使用“for”和“while”语句来构建循环体的方法。一、一、for循环语句循环语句for(初始化表达式;条件表达式;增量表达式)(初始化表达式;条件表达式;增量表达式)语句语句;/循环体循环体 fo
50、r循环语句的表达式间要用“;”隔开,循环体即为for后面用“ ”括起来的语句,当循环语句只有一条时,“ ”可以省略,紧跟在for语句的结构表达式之后。for循环语句的执行过程如下:(1)初始化表达式。(2)求解条件表达式。如其值为“真”,则执行for循环体内的语句;如果为“假”则退出for循环,转到for循环体外语句去执行。(3)如条件表达式为“真”,在执行for循环体内的语句后,执行增量表达式,再转到上一步继续执行。(4)结束for循环,执行后面的语句。for语句不仅可以用于循环已经确定的情况,而且可以用于循环次数不确定但已经给出循环条件的情况。下面为for语句应用的几个特例:1)for(;
51、i=100;i+)sum+=i;/i不设初值,由外部i决定2)for(i=1;i+)sum+=I;/不设循环判断条件,默认将/无条件循环执行下去3)for(i=1;i=100;i+);/没有循环体,用于实现延时4)for(;)sum+=i;/没有任何限制,无限循环二、二、while循环语句循环语句while(表达式)(表达式)语句语句;/循环体循环体括号中的表达式为while循环能否继续的条件,而语句部分则是循环体。只要表达式为真,则重复执行循环体内的语句;否则,终止while循环,执行循环之外的下一行语句。while语句应用的几个特例:1)while(1)sum+=i;/表达式始终为真,无限
52、循/环语句“sum+=i;”2)while(1);/表达式始终为真,死循环当循环语句只有一条时,“ ”可以省略,紧跟在while语句的结构表达式后。一般在循环体中应该有让循环最终结束的语句,否则将造成死循环。三、三、dowhile循环语句循环语句do语句语句;/循环体循环体while(表达式)(表达式); do是C语言的关键字,必须和while联合使用。while(表达式)后的分号“;”不能少,它表示整个循环体的结束。在使用时由于是先执行循环体再判断,所以应注意循环次数的设置。dowhile循环语句和while循环语句的最大区别是:先执行循环体一次,再判断表达式的值。若为真,则继续执行循环体,
53、否则退出循环。dowhile语句执行过程如下:(1)先执行循环体语句一次,然后判断表达式。(2)当表达式的值为非“0”时,返回到上一步重新执行循环体语句。(3)如此反复,直到表达式的值为“0”时循环结束。一、程序设计一、程序设计二、编写程序并录入二、编写程序并录入根据上述任务分析编写的完整程序:三、调试运行三、调试运行单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录载入源文件,编译无误后单击调试按钮弹出“debug”工具栏,单击“”按钮,弹出“serial#1”的串行窗口。再单击运行按钮,即可查看串行窗口中输出的和的值:任任务5 指指针的定的定义及引用及引用 1了解数组、指针的
54、定义。2掌握指向数组的指针的引用。3掌握利用数组的指针控制单片机I/O口的方法。在C51中,指针是被广泛使用的一种特殊数据类型。通过指针可以间接地访问另一变量,方便地使用字符串,有效地使用数组,可使程序更加精炼、高效。本任务以用数组的指针控制单片机的I/O口为例,学习掌握指向数组的指针的引用方法,从而体会指针在C51中的重要意义。一、数组的定义与引用一、数组的定义与引用1一维数组一维数组类型说明符类型说明符数组名数组名常量常量如inta10;一维数组的赋值方法有以下几种:(1)在数组定义时赋值例例inta10=0,1,2,3,4,5,6,7,8,9;在a10中,10表示a数组中有10个元素,下
55、标从0开始,依次是a0=0,a1=1,a9=9,数组中的有效数据只有10个。(2)数组元素部分赋值例例intb10=0,1,2,3,4;定义整型数组b,共包含10个元素,只对前5个元素作了定义,后5个元素值均为0。(3)全部数组元素都已赋值,可省去方括号中的下标例例intc=0,1,2,3,4,5,6,7;若被定义的数组长度(常量)与实际数组中的元素个数不相等,则数组长度不能省略。2字符数组字符数组用来存放字符型数据的数组称为字符数组。字符数组的赋值方法有以下几种:例例chara5=H,E,L,L,O;定义字符型数组a,它包含了a0a4共5个字符元素。(1)在定义时进行初始化赋值(2)用字符串
56、的形式对全体字符数组元素进行赋值例例charstr=Hello,word!;或者charstr=Hello,word!;字符串是以0作为结束标志,且并不显现出来。当定义了一个字符串数组后,系统会自动将结束标志0存入数组,因此,上面定义的字符串数组str最后一个元素不是!,而是0。二、指针二、指针指针就是一个变量,它包含着另一个变量的地址。C语言中提供了两个专门用于指针和地址的运算符,见下表:运算符运算符意意义运算符运算符意意义* 取内容&取地址1指针的定义格式指针的定义格式类型说明符类型说明符*指针变量名指针变量名例例unsignedint*p;/定义无符号整型指针,变量名为p2指针的初始化指
57、针的初始化指针在使用前必须要进行初始化,要使一个指针变量指向一个变量,可以使用取地址运算符“&”来完成。例例unsignedintm;/定义一个无符号整型变量munsignedint*p;/定义无符号整型指针变量pp=&m;/&m表示m的地址,将m的地址存放在/指针变量p中(即指针p指向m) 指针在使用前要先定义指针变量类型。一个指针变量只能指向同一个类型的变量,不要将非指针类型的变量赋值给一个指针变量,如整型指针不能指向字符型变量,且指针变量中只能存放地址。一、程序设计一、程序设计本任务中为观察到单片机的I/O口(P1)上的高电平由低位到高位的有序变化,定义数组如下:unsignedchar
58、table8=0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;要实现指针指向该数组,指针的初始化为:unsignedchar*p;/定义无符号字符型指针变量puchartable8=0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/定义一维数组tablep=&table0;或p=table;/将数组table的首地址存放到指针变量p中1载入源文件,当编译无误后单击调试按钮,将自动弹出“debug”工具栏,单击菜单栏中的“Peripherals”选项,弹出如图所示下拉菜单,在“I/O-Ports”选项中分别选中“
59、Port0” “Port1”“Port2”和“Port3”,将依次弹出单片机4个并行I/O口的观察窗口。二、编写程序并录入二、编写程序并录入根据上述任务分析编写的完整程序:三、调试运行三、调试运行2单击运行按钮,则此时可在4个I/O观察窗口中依次看到P0、P1、P2和P3口的数据及高低电平的变化(各标志位上打勾的代表该位为高电平),运行情况如下图所示。最后单击停止按钮,程序执行结束。单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任务任务1跑跑 马马 灯灯任务任务2 花花 样样 灯灯 任务任务3键控彩灯键控彩灯任务任务4数显抢答器数显抢答器任务任务5简易数字秒表简易数字秒表任任
60、务1 跑跑马灯灯 1了解跑马灯的工作过程及控制原理。2掌握单片机I/O口控制外部负载的合理设计方法。3掌握移位和延时程序的设计方法。4能够设计并制作跑马灯控制系统。本任务选用单片机P0口控制8只发光二极管(D1D8),使D1D8由低位到高位依次点亮,时间间隔为1s,如此往复循环,完成跑马灯控制系统的设计与制作。一、函数一、函数1标准库函数标准库函数即由C编译系统提供的库函数,在C编译系统中将一些独立的功能模块编写成公用函数,并将它们集中存放在系统的函数库中,供程序设计时使用。丰富的可直接调用的库函数是C51功能强大及其高效率的重要体现之一,多使用库函数可使程序代码简化,结构清晰,易于调试和维护
61、。 2用户自定义函数用户自定义函数即用户根据自己的需要而编写的函数。从函数定义的形式上可以划分为无参数函数、有参数函数和空函数。无参函数的一般形式为:函数类型函数类型函数名(函数名(void)/用用“void”声明该函数为声明该函数为/无参函数无参函数局部变量定义;局部变量定义;函数体语句;函数体语句;其中:函数类型函数类型定义了该函数返回值的类型。函数名后括号中的“void”,声明了该函数为无参函数,可以省略不写,但括号不能少。局局部部变变量量的定义就是对在本函数内部使用的变量进行定义,只在本函数内部有效。它与全局变量相对,全局变量则是定义在函数的外部,一般位于程序的顶部,它的有效范围为从定
62、义开始的位置到源文件结束。二、移位运算符二、移位运算符C51中移位运算符主要包括左移(“”)两种。“”运运算算符符的功能是:将一个二进制数的各位全部右移若干位,移动过程中,低位舍弃,高位补0。例例将无符号字符型变量m中的数据左环移n(n8)位。解:解:a=m(8-n);/*将变量m右移(8-n)位后并赋给中间变量bm=a|b;/*将两个中间变量中的数据进行按位“或”运算再返还给变量m,则此时m中的数据即为左环移n位后的结果*/在C51中若要实现汇编移位指令中的环移功能,可以借助C编译系统中的“INTRINS.H”库函数,其中包含了字符循环左移(_crol_)和字符循环右移(_cror_)指令。
63、三、延时程序三、延时程序采用for三重循环语句结构完成1s延时的函数:void delay1s(void) /定义一个延时为1s的无参函数供主函数调用 unsigned char i, j, k; /局部变量定义 /* 最外层循环共要循环10次,共计延时约为100.1s =1s*/ for(k=10 ; m0 ; m-) /*次外层循环共要循环200次,共计延时约为2000.5ms=100ms=0.1s*/ for(j=200 ; j0 ; j-) /*内循环共要循环250次,共计延时约为2502s=500s=0.5ms*/ for(i=250 ; i0 ; i-) ; /*最内层的循环体为空
64、,循环每次延时2s*/ 此延时函数的时间延时只是近似1s,而并非标准的1s时间,因此只能用于对延时时间要求不是很准确的场合,若要实现标准的1s延时,可利用以后学习的定时器功能来完成。 一、设计并绘制电路原理图一、设计并绘制电路原理图单片机对LED控制的连接电路有两种方式,如下图所示。相应地,硬件上的不同连接方式也决定了软件上的不同控制逻辑,见下表:端口控制逻辑电平端口控制逻辑电平端口端口LED状态状态逻辑电平逻辑电平P0.0亮0灭1P2.0亮1灭0在Proteus中根据上述分析绘制跑马灯电路原理图:AT89S51的I/O口在外接负载时,要注意其负载能力。P0每位可驱动8个TTL负载,每一位最大
65、的吸收电流为26mA,P1P3口每位可驱动4个TTL负载,每一位最大的吸收电流为15mA。输输 出出 端端 口口说说 明明P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0D8D7D6D5D4D3D2D111111110D1亮11111101D2亮11111011D3亮11110111D4亮11101111D5亮11011111D6亮10111111D7亮01111111D8亮二、程序设计二、程序设计跑马灯的程序设计流程图如下图所示:根据上述设计思路编写完整的程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步骤说明明示范示范图片片1
66、材料准备参照元器件清单表步步骤说明明示范示范图片片2硬件焊接电路板元件布局图电路板背面步步骤说明明示范示范图片片3程序烧入、运行并调试跑马灯运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务2 花花样灯灯 1了解花样灯的工作过程。2掌握查表程序的设计方法。3掌握有参函数的调用及声明。4能够设计并制作花样灯控制系统。花样灯是按时间依次让灯呈现出规定的花样,相对跑马灯来说,控制的显示数据之间没有规律,显示上具有多变性和复杂性,如下图所示。本任务使用单片机的P2口控制8只LED,循环实现如下图所示四种花样的显示,完成花样灯控制系统的设计与制作。花花样D8D7D6D5D4D3
67、D2D1数据数据编码一0xff0x7e0x3c0x180x000x180x3c0x7e注:灯亮灯灭花花样D8D7D6D5D4D3D2D1数据数据编码二0xff0x7f0x3f0x1f0x0f0x070x030x010x00花花样D8D7D6D5D4D3D2D1数据数据编码三0xff0xaa0x550xaa0x55四0xff0xf00x0f0xf00x0f0xff一、有参函数定一、有参函数定义的一般形式的一般形式函数类型函数类型函数名(形式参数表)函数名(形式参数表)/表明该函数带有参数传递表明该函数带有参数传递局部变量定义;局部变量定义;函数体语句;函数体语句;2形参与实参形参与实参形参:在定
68、义函数时,函数名后面括号中的变量称为“形参”,定义时不赋值,由调用函数将值传递过来。实参:主调用函数后面括号中的表达式为“实参”,实参必须有确定的值。该值在调用时按对应关系传递给形参。注意:在C语言中参数的传递是单向的。函数返回值通过“return(x)”返回,返回值是通过函数名带回的,所以一个函数只能有一个返回值。1函数返回值函数返回值例例 定定义一个返回两个整数的最大一个返回两个整数的最大值的函数的函数max( )。 int max( int x, int y ) int z ; z = x y ? X :y ; return(z); 二、有参函数调用的一般形式二、有参函数调用的一般形式函
69、数名(实参列表);函数名(实参列表);有参函数在被调用时,调用函数将要运算的对象以实参的形式传递给有参函数,有参函数再将运算对象带入自身函数体内执行,并在函数结束时返回结果供调用它的函数使用。三、自定义函数的声明三、自定义函数的声明extern函数类型函数类型函数名(形式参数表);函数名(形式参数表);函数的声明是把函数名字、函数类型以及形参的类型、个数和顺序通知编译系统,以便调用函数时系统进行对照检查。函数的声明后面要加分号。如果声明的函数在文件内部,则声明时不用加“extern”,如果声明的函数不在文件内部,而在另一个文件中,声明时须带“extern”,指明使用的函数在另一个文件中。例例
70、有参函数的有参函数的调用及声明。用及声明。 #include / 包含AT89单片机寄存器的头文件 #include /*包含I/O库函数文件(它当中定义了C51中的输入和输出函数)*/ int max(int x,int y); /对max函数函数进行声明行声明 main( ) /主函数 int a,b; SCON = 0x50; /串口工作于方式1,10位异步收发 TMOD = 0x20; /定时器T1工作于方式2自动装入模式 TH1 = 0xFD; /晶振11.0592MHz,波特率:9600 TI = 1; /串行发送中断标志位置1 TR1 = 1; /启动定时器T1 while(1)
71、 printf(“please input a,b:n”); /输入要比较的两个整数 scanf(%d,%d,&a,&b); printf(“max is:%dn”, max(a,b) ); /调用有参函数并输出最大值 int max(int x,int y) int z; z=(x=y?x:y); /通过表达式求出最大值 return(z); /返回最大值 在C51程序设计中,一般将被调用函数放置于主调用函数之前,这样可以在程序头省去对被调用函数的声明。一、一、设计并并绘制花制花样灯灯电路原理路原理图注意:注意:在实际应用电路中,若接节日彩灯或广告霓虹灯,一般还需外加隔离电路(光电耦合器)和
72、驱动电路(如晶闸管或继电器等)。二、程序设计二、程序设计根据上述设计思路编写完整的程序:三、程序输入与仿真调试三、程序输入与仿真调试四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图电路板背面步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试彩灯运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务3 键控彩灯控彩灯 1了解按键的特性及其与单片机端口的连接方法。2掌握独立式按键扫描及软件消抖的编程原理。3能够设计并制作键控彩灯控制系统。本任务
73、使用单片机P0口连接8只彩色LED,按照绿、黄、红顺序依次排开。使用两个独立按键,分别连接在单片机的P2.0和P2.1口,实现下表中所述的控制要求,完成键控彩灯控制系统的设计与制作。按键编号按键编号连接端口连接端口按键功能说明按键功能说明K1P2.0右移按键,彩灯右移一位点亮K2P2.1左移按键,彩灯左移一位点亮一、一、键盘及其接口及其接口矩阵键 盘独立键 盘独立式键盘的各个按键之间相互独立,每个按键独立地与一根数据输入线(单片机并行I/O口或其他接口芯片的并行接口)相连。常见的接口电路如下图所示。独立式键盘配置灵活,软件结构简单,但每个按键必须占用一根接口线,在按键数量较多时,将占用较多接口
74、线,因此,独立式按键常用于按键数量不多的场合。二、按键的机械特性二、按键的机械特性为了保证每按下一次按键,单片机仅作一次键输入处理,就需要消除因按键抖动现象而引起的错误动作,常用的去除抖动的方法有硬件消抖硬件消抖和软件消抖软件消抖两种。在实际应用中,当所接按键较多时,为了减少外围电路,通常利用软件延时的方法来消除抖动。三、硬件消抖电路三、硬件消抖电路一、一、设计并并绘制制键控彩灯控彩灯电路原理路原理图二、程序设计二、程序设计软件消抖流程图键控彩灯程序设计流程图根据上述设计思路编写完整的程序:三、程序输入与仿真运行三、程序输入与仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明
75、示示 范范 图 片片1焊接前材料准备参照元器件清单表步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图电路板背面步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试彩灯左移运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务4 数数显抢答器答器1了解数码管的结构及显示原理。2掌握对独立式键盘扫描、处理的编程方法。3掌握单片机控制LED数码管静态显示方法。4能够设计并制作数显抢答器控制系统。抢答器是一种广泛应用于各种竞赛活动、抢答现场中的重要设备,如下图所示,它能迅速、准确、公正、客观地分辨出最先获得发言权的选手,保证比赛的顺利有效进行,同时增加比赛的刺
76、激性和娱乐性。1每个参赛选手控制一个按钮,按动按键发出抢答信号。2竞赛主持人控制两个功能按钮,一个为抢答开始按钮,另一个为抢答结束后的复位按钮。3竞赛开始后,先由主持人按下抢答开始按钮,8位参赛选手通过按下各自的抢答按钮进行抢答。哪位选手最先按下抢答按钮,数码管就显示其对应的号码,表示该名选手抢答成功并且锁定,其他参赛选手再抢答无效。4竞赛结束时,再由主持人按下复位按钮,本轮抢答结束,为下一轮抢答做准备。本任务主要是设计并制作一个简易的8路抢答器,不考虑音响、灯光等辅助设施。通过独立键盘输入抢答信号,一位数码管显示出抢答者的号码,具体控制要求如下:一、一、LED数数码管的管的结构构 数码管是由
77、几个发光二极管组合在一起而形成的显示装置,组成数码管的每一个发光二极管称为数码管的“段”。以一位8段LED数码管为例,共有7段组成一个“日”字形,分别定义为数码管的a、b、c、d、e、f、g段,另外再加上一个用于小数显示的小数点dp(或h)段。数码管根据不同码段之间的组合,来显示数字09或简单的字符信息。由于组成数码管的发光二极管自身具有极性,所以组成的数码管也有共阴极和共阳极之分。共阳极共阴极二、单片机与数码管之间的连接二、单片机与数码管之间的连接共阳数码管共阴数码管当使用单片机的I/O口控制一位显示输出时,最好选择共阳极数码管,这样电路采用灌电流方式,数码管直接受控于I/O端口,否则,当连
78、接的是共阴极数码管时,需在I/O口上添加上拉电阻来驱动数码管。三、数码管字符显示原理三、数码管字符显示原理a)共阴数码管显示以单片机I/O口输出显示“5”的字形数据为例:b)共阳数码管显示四、数码管静态显示方式四、数码管静态显示方式静态显示即当数码管显示某一字符时,相应码段的发光二极管恒定的导通或截止,只要通过改变数码管各码段引脚的高低电平,就能达到显示不同字符的目的。优点:点:数码管显示稳定无闪烁,亮度高,软件控制比较容易;缺点:缺点:占用单片机较多的I/O口资源,且硬件接线复杂。 五、一位数码管循环显示五、一位数码管循环显示“09”1电路原理图2“09循环显示”程序一、一、设计并并绘制制8
79、路数路数显抢答器答器电路原理路原理图二、程序设计二、程序设计本任务的程序设计主要包括数码管显示程序和按键处理程序两部分。根据设计思路编写的8路数显抢答器程序为:8路数显抢答器程序设计流程图如右图所示。三、程序输入与仿真运行三、程序输入与仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图电路板背面DIP底座步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试2号抢答成功运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务5 简易数字秒表
80、易数字秒表 1了解秒表的工作过程。2掌握单片机控制LED数码管动态显示字符方法。3能够设计并制作简易数字秒表。本任务利用软件延时计数法,通过四位一体数码管输出显示,实现简易秒表的计时功能,具体控制要求如下:1单片机的P0口控制四位一体LED共阴数码管的各码段端;2单片机的P2.0P2.3引脚外接驱动电路控制数码管的四个位选端;3四位数码管分别用来显示一位分计时和两位秒计时,中间用“”隔开。动态显示动态显示是将所有数码管的8个段码端的同名端并联在一起,由一个8位的输出口控制,每位数码管的公共端(称位线)由各自独立的输出口线控制,如图所示。它解决了数码管静态显示时占用较多的I/O口资源的问题。在轮
81、流显示过程中,每位数码管的点亮时间一般要控制在12ms,这样由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,显示的效果和静态显示一样。但由于CPU需要不断扫描刷新数据,因此会占用CPU较多的时间。采用动态显示方式时,为了保证数码管的亮度,一般需在数码管的段输出或位输出端加驱动电路。如使用三极管9012、74HC573或74LS07(74HC07)进行位信号驱动,码段上则可使用74LS245、ULN2003或74LS373等来驱动。在实际电路设计中,如果驱动数码管的位数不多,可选用市场上的高亮度
82、数码管,这样就可以省去加驱动电路的麻烦。74HC07逻辑图及其功能表如下:输入入输出出LLHH一、一、设计并并绘制制简易数字秒表易数字秒表电路原理路原理图二、程序设计二、程序设计例例 4610 = 46 /商4,余6在单片机控制的LED数码管显示电路中,对于多位数码管的显示,通常采用动态显示方式,即软件上采用循环扫描的方式。本任务中要让四位数据从左到右在数码管上依次显示出来,扫描过程如下图所示:本任务中由于秒变量中存放的两位数都要送出去显示,因此在显示之前要先分离,对于任意一个两位数,可以先将其与10相除,然后利用取余和取商的方法,分别得到这两位数的个位和十位,如下所示:四位数码管动态扫描显示
83、过程数码管动态显示时对扫描的频率有一定的要求,频率太低,数码管将出现闪烁现象;频率过高,由于数码管点亮时间太短,数码管显示将无法看清。因此编写延时程序时,一位数码管的扫描时间一般取12ms为宜。简易数字秒表软件设计流程图本任务是利用软件延时的方法来实现秒表的计时功能,对于精度自然也就达不到理想控制要求,这一问题将在课题五中利用定时器中断的方法解决。根据上述设计思路编写的完整程序为:三、程序输入与仿真运行三、程序输入与仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局
84、图步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试简易秒表运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任务任务1简易电子计分器简易电子计分器任务任务2方波信号发生器方波信号发生器任务任务3简易频率计简易频率计任务任务4主从呼叫器主从呼叫器任任务1 简易易电子子计分器分器1了解单片机中断概念及工作过程。2掌握单片机外部中断相关寄存器的设置方法。3掌握单片机外部中断初始化过程、中断处理及应用。4能够设计并制作简易电子计分器。在举行一些体育比赛时,如乒乓球、羽毛球、排球和篮球等球类比赛,经常会用到电子计分器来给参赛的每一支队伍进行计分。多功能的电子计分器不仅可以显
85、示比赛双方的分数,而且还可以显示获胜局数及倒计时等功能。本任务主要完成对比赛选手的计分功能,使用两位LED数码管显示参赛者的得分信息,并手动实现加、减分功能。由于是两位计数显示,因此最大计数值为99,当超过99时,重新从0开始计数。具体控制要求如下:1单片机的P0口依次连接两位一体共阴数码管ag端,分别用于显示计数值的十位和个位;2单片机的P2口任选两个端口作为两位共阴数码管的位选端;3单片机的P3口作为按键输入端,按键具体功能见下表:按键编号按键编号连接端口连接端口按键功能说明按键功能说明K1P3.2( )加分按键,计数值每次加1K2P3.3( )减分按键,计数值每次减1K3RST复位按键,
86、计数值归0一、中断的概念一、中断的概念 执行主程序主程序继续执行 主程序断点中断请求中断响应执行中断处理程序中断返回当CPU正在处理某项事务时,如果外界或者内部发生了紧急事件,要求CPU暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程就成为中断中断。二、中断源二、中断源产生中断的请求源称为中断源中断源。MCS-51单片机的中断源可分为两类:外部中断外部中断和内部中断内部中断。1.外部中断源外部中断源外部中断0(INT0):来自P3.2引脚,采集到低电平或者下降沿时,产生中断请求。外部中断1(INT1):来自P3.3引脚,采集到低电平或者
87、下降沿时,产生中断请求。2.内部中断源内部中断源定时器计数器0(T0):定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外P3.4引脚。发生溢出时,产生中断请求。定时器计数器1(T1):定时功能时,计数脉冲来自片内;计数功能时,计数脉冲来自片外P3.5引脚。发生溢出时,产生中断请求。串串行行口口:为完成串行数据传送而设置。单片机完成接受或发送一组数据时,产生中断请求。MCS-51单片机内部有5个中断源,但对于8052系列的单片机内部则增加了一个定时计数器2(T2)的中断,即有6个中断源。三、中断特殊功能寄存器三、中断特殊功能寄存器TCON(88H)位地址8FH8EH8DH8CH8BH8
88、AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT0IT0和IT1外部中断0和1触发方式控制位IT0(IT1)1脉冲触发方式,下降沿有效;IT0(IT1)0电平触发方式,低电平有效。IE0和IE1外部中断0和1请求标志位1定时定时/计数器控制寄存器(计数器控制寄存器(TCON)对脉冲触发方式的外部中断,CPU响应中断后硬件自动清除中断请求标志IE0和IE1,但对电平触发方式的外部中断,由于CPU响应中断速度较快,容易导致连续多次中断,因此,选择外部中断触发方式时,最好选择下降沿触发方式。2中断允许控制寄存器(中断允许控制寄存器(IE)IE(A8H)位地址AFHAEHADHAC
89、HABHAAHA9HA8H位符号EA/(ET2)ESET1EX1ET0EX0EA中断允许总控制位EA0中断总禁止,禁止所有中断;EA1中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设置。EX0和EX1外部中断0和1允许控制位EX0(EX1)0禁止外部中断0(1)的中断;EX0(EX1)1允许外部中断0(1)的中断。ET0和ET1定时/计数器0和1中断允许控制位ET0(ET1)0禁止定时/计数器T0(T1)的中断;ET0(ET1)0允许定时/计数器T0(T1)的中断。ES串行中断允许控制位ES=0禁止串行中断;ES=1允许串行中断。ET2定时/计数器2中断允许控制位(8052
90、系列单片机使用)。3中断优先级控制寄存器(中断优先级控制寄存器(IP)IP(B8H)位地址BFHBEHBDHBCHBBHBAHB9HB8H位符号/(PT2)PSPT1PX1PT0PX0PX0外部中断0优先级设定位。PT0定时/计数器T0优先级设定位。PX1外部中断1优先级设定位。PT1定时/计数器T1优先级设定位。PS串行中断优先级设定位。PT2定时/计数器T2优先级设定位。四、中断入口地址及响应过程四、中断入口地址及响应过程中断源中断源入口地址入口地址中断号中断号说 明明中断中断优先先级外部中断00003H0P3.2( )引脚上的低电平/下降沿引起的中断高定时/计数器0000BH1T0计数器
91、溢出后引起的中断外部中断10013H2P3.3()引脚上的低电平/下降沿引起的中断定时/计数器1001BH3T1计数器溢出后引起的中断串口中断0023H4串行口接收或发送完一帧数据后引起的中断定时/计数器2002BH5T2计数器溢出后引起的中断(51系列单片机没有此中断)低关于中断的优先级有三条原则:1CPU同时接收到几个中断时,首先响应优先级最高的中断请求。2正在进行的中断过程不能被新的同级或低优先级的中断请求所中断。3正在进行的低优先级中断服务,能被高优先级中断请求中断。五、五、C51中的中断函数中的中断函数1中断号中断号在C51中,每一个中断源都有一个指定的中断号,中断服务函数中必须声明
92、对应的中断号,用中断号确定该中断服务程序是哪个中断所对应的中断服务程序。2中断函数的格式中断函数的格式函数类型函数类型函数名(参数)函数名(参数)interrupt中断号中断号using寄存器组号寄存器组号其中,函数类型和参数都取为void。using寄存器组号用于指定该中断函数内部使用的工作寄存器组,寄存器组号的取值为03,可以省略不作设置。3中断服务程序的执行中断服务程序的执行外部中断设置工作示意图4外部中断初始化流程外部中断初始化流程根据中断需要开放相应中断使能根据需要对TCON中的IT0、IT1设置为脉冲或电平触发方式设置中断优先级别,当不发生中断冲突时,可不做设置根据中断使用情况定义
93、相应入口地址一、一、设计并并绘制制简易电子计分器简易电子计分器电路原理路原理图二、程序设计二、程序设计1TCON的设置的设置TCON位符号TF1TR1TF0TR0IE1IT1IE0IT0位设置00000101TCON=0x05;/字节操作,选择下降沿触发方式有效或IT1=1;IT0=1;/位操作TCON的初始化设置如下:2IE的的设置置IE位符号EA/(ET2)ESET1EX1ET0EX0位设置10000101IE的初始化设置如下: IE = 0X85 ; /开中断总允许(EA),开外部中断0和1的中断或 EA=1; EX1=1; EX0=1; / 位操作 本次设计不需要考虑中断优先的问题,因
94、此可以省去对中断优先控制寄存器(IP)的设置,即默认外部中断( )优先。在编程对中断相关控制寄存器进行设置时,既可以采用字节赋值方式,也可以采用位操作的方式。a) 外部中断0服务程序b)主程序c)外部中断1服务程序根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试加分运行图减分运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返
95、回目录任任务2 方波信号方波信号发生器生器 1了解定时/计数器的工作原理。2掌握定时/计数器相关寄存器的设置方法。3掌握定时器中断的初始化过程及在不同工作方式下初始值的计算方法。4能够设计并制作方波信号发生器。单片机内部含有定时器和计数器,主要用于延时、定时控制、外部计数和检测等。利用单片机定时器输出指定周期的方波,既可作为其他电路的信号源,也可直接驱动音响设备,用来制作报警器和简易电子琴等电子产品。本任务将利用定时器中断方式产生如下图所示周期为1s的等宽连续正方波脉冲,并在P1.0口输出。单片机系统的外接晶振频率fOSC=12MHz。一、定一、定时/计数器数器简介介在51系列单片机内部有两个
96、16位可编程的定时/计数器,简称为T0和T1。它们的核心部件都是16位加法计数器,当计数计满回零时,自动产生溢出发出中断请求,表示定时时间已到或计数已满,使用时可通过编程设置为定时或计数模式。定时/计数器的寄存器是一个16位的寄存器,由两个8位寄存器组成,高8位为TH,低8位为TL,见下表: 定时定时/计数器名称计数器名称寄存器(高寄存器(高8位)位) 寄存器(低寄存器(低8位)位)T0TH0TL0T1TH1TL1二、定时二、定时/计数器的控制寄存器(计数器的控制寄存器(TCON)TCON(88H)位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1
97、IE0IT0TR0和TR1定时器运行控制位TR0(TR1)0定时器/计数器0(1)停止工作TR0(TR1)1定时器/计数器0(1)开始工作TF0和TF1T0和T1的溢出标志位对定时/计数器T0、T1的中断,CPU响应中断后,硬件自动清除中断请求标志TF0和TF1。如果编程中不使用中断服务程序,也可在主程序中利用查询中断请求标志TF0和TF1的状态,完成相应的中断功能。 TMOD(89H)位符号GATEM1M0GATEM1M0控制定时器 T1控制定时器 T0三、定时三、定时/计数器的方式控制寄存器(计数器的方式控制寄存器(TMOD)GATE定时器动作开关控制位,也称门控位GATE=1时,当外部中
98、断引脚()出现高电平且控制寄存器TCON中TR0(TR1)控制位为1时,才启动定时器T0(T1)。GATE=0时,只要控制寄存器TCON中TR0(TR1)控制位为1,便启动定时器T0(T1)。 定时/计数器模式选择位 =0时,设置为定时器模式,定时/计数器的计数脉冲输入来自单片机内部系统时钟提供的工作脉冲(系统晶振输出脉冲经12分频),计数值乘以机器周期就是定时的时间。 =1时,设置为计数器模式,定时/计数器的计数脉冲输入来自外部引脚 T0(P3.4)或 T1(P3.5)输入的外部脉冲。M1、M0工作方式选择位M1M0工作方式工作方式功功 能能 说 明明00方式013位定时/计数器,TLx只用
99、低5位01方式116位定时/计数器(常用常用)10方式2自动重装初值的8位定时/计数器,THx的值保持不变,TLx溢出时,THx的值自动装入TLx中(常用常用)11方式3仅适用于T0,T0分成2个独立的8位计数器,T1停止计数TMOD不能位寻址,只能是整个字节进行设置,如程序中TMOD=0X01; 语句就是对TMOD进行整体设置。CPU复位时TMOD所有位清0。四、定时四、定时/计数器的工作方式计数器的工作方式1工作方式工作方式1该模式是一个16位定时/计数方式,最大计数值为216=65536。寄存器THx和TLx是以全16位参与操作,当要定时任意时间时,采用预置数的方法,THx赋高8位,TL
100、x赋低8位。定时工作方式时,定时时间为:T定定 =(216 - 初初值) 机器周期机器周期Tm例例 若单片机晶振频率fosc=12MHz,使用定时器T0工作在方式1下,定时50ms中断,试计算寄存器TH0和TL0装入的初始值。 解:解: 已知 fosc = 12MHz,则: 振荡周期 Tc = 1/12MHz = 1/12s 机器周期 Tm = 12Tc = 12(1/12) = 1s 因为 T定 =(216 - 初值)Tm 50 000 s =(65 536 - 初值 ) 1 s 所以 初值 = 65 536 - 50 000 = 15 536 = 3CB0H在C51程序设计时,一般将装入初
101、值以表达式形式赋值,这样在编译程序时会自动将计算结果换算成对应的数值赋值给THx和TLx,其初始值设置命令为:THx = (216TfOSC/12)/256 = (65536TfOSC/12)/256; TLx = (216TfOSC/12)%256 = (65536TfOSC/12)%256;2工作方式工作方式0该模式是一个13位定时/计数方式,最大计数值为213=8192。由寄存器THx的8位和TLx的低5位构成,TLx高3位未用。工作原理与方式1一样,定时工作方式时,定时时间为:T定定=(213-初值)初值)机器周期机器周期Tm在C51程序设计中,其初始值设置命令为:THx = (213
102、TfOSC/12)/32 = (8192- TfOSC/12)/32; TLx = (213TfOSC/12) %32 = (8192- TfOSC/12)%32;3工作方式工作方式2该模式是一个8位自动装入定时/计数方式,最大计数值为28=256。TLx用作8位计数器,THx用作保存计数初值。在初始化编程时,TLx和THx由指令赋予相同的初值,一旦TLx计数溢出,则将TFx置“1”,同时将保存在THx中的计数初值自动重装入TLx,继续计数,THx中的内容保持不变,即TLx是一个自动恢复初值的8位计数器。定时工作方式时,定时时间为:T定定=(28-初值)初值)机器周期机器周期Tm在C51程序设
103、计中,其初始值设置命令为:THx=256Tfosc/12;TLx=256Tfosc/12;4工作方式工作方式3该模式下定时/计数器T0被分成两个独立的8位定时/计数器TL0和TH0。其中,TL0既可作定时器,又可作计数器使用,而TH0则被固定为一个8位定时器(不能作外部计数模式)。T0被分成两个来用,那就要两套控制及溢出标记:TL0还是用原来的T0的标记,而TH0则使用定时器T1的状态控制位TR1和TF1。TL0定时工作方式时,定时时间为:T定定=(28-初值)初值)机器周期机器周期Tm五、定时五、定时/计数器的初始化计数器的初始化对TMOD进行设置,确定启动方式、计数/定时功能和工作方式根据
104、定时时间,计算出定时器的初值,并装入THx和TLx启动相应定时器开始工作根据中断需要开放相应中断使能程序头定义相应中断的入口地址一、一、设计并并绘制制方波信号发生器方波信号发生器电路原理路原理图TMOD位符号GATEM1M0GATEM1M0位设置00000001二、程序设计二、程序设计1定时中断相关SFR的设置(1)TMOD的设置TMOD的初始化设置如下:TMOD=0x01;/选择定时器T0工作于方式1(2)TCON的设置TCON位符号TF1TR1TF0TR0IE1IT1IE0IT0位设置00010000TCON的初始化设置如下:TCON=0x10;/字节操作,启用定时器T0或TR0=1;/位
105、操作(3)IE的设置IE位符号EA/(ET2)ESET1EX1ET0EX0位设置10000010IE的初始化设置如下:IE=0x82;/*字节操作,开中断总允许(EA),开定时器T0中断。*/或EA=1;ET0=1;/位操作2定时时间的计算本设计选择定时器T0工作于方式1,设置每次定时基准为50ms,定时时间到则计数1次,连续定时10次,刚好为0.5s(500ms),然后每隔0.5s再对P1.0口输出取反一次。每次定时中断50ms时计数初始值为: TH0 = (65536-50000) / 256; /高八位的初始值 TL0 = (65536-50000)%256; /低八位的初始值主程序及中
106、断服务程序设计流程图:根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步骤说明明示范示范图片片1焊接前材料准备参照元器件清单表步步骤步步骤步步骤2硬件焊接电路板元件布局图3程序烧入、运行并调试示波器测量的输出波形图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务3 简易频率计简易频率计1了解定时器与计数器之间的关系。2掌握计数器中断的初始化编程。3能够设计并制作简易频率计。利用AT89S51单片机的T0、T1定时/计数功能设计一个简易频率计,完成对输入信号频率的测量,测量结果通过六位数码管动态显示出
107、来。测量信号频率范围设置在0100kHz,具体控制要求如下:1P0口依次与一个六位一体共阴数码管的码段端相连,用作频率的输出显示。2P2口连接六位一体共阴数码管的位选端,控制数码管动态显示时的位选。3单片机的P3.4(T0)口作为被测信号的输入口。一、一、频率率测量原理量原理用定时器T1来产生一个1s的时钟基准,同时计数器T0对由P3.4口输入的脉冲信号的下降沿进行累积计数,1s定时到,则其频率=M(Hz)。TMOD位符号GATEM1M0GATEM1M0位设置00010101二、计数器相关二、计数器相关SFR1方式控制寄存器(TMOD)TMOD的初始化设置如下:TMOD=0x15;/T0计数功
108、能,工作于方式1;/T1定时功能,也工作于方式12定时/计数器的控制寄存器(TCON)TCON位符号TF1TR1TF0TR0IE1IT1IE0IT0位设置01010000TCON的初始化设置如下:TCON=0x50;/启用定时/计数器T0、T1或TR0=1;/T0开始计数;TR1=1;/T1开始定时3中断允许控制寄存器(IE)IE位符号EA/(ET2)ESET1EX1ET0EX0位设置10001010IE的初始化设置如下:IE=0x8a;/开中断总允许(EA),/开定时/计数器T0、T1中断或EA=1;ET0=1;ET1=1;一、一、设计并并绘制制简易频率计简易频率计电路原理路原理图二、程序设
109、计二、程序设计c)计数中断)计数中断T0服务程序服务程序a) 主程序主程序 b) 定时中断定时中断T1服务程序服务程序 本次设计仅用计数方式对P3.4引脚输入的脉冲进行计数,当在频率较高时测量的相对误差较大,因此主要用于低频测量,如能综合采用计数法和测周法同步法测量方式,做到脉冲测量时的启停同步,无计数误差,将大大提高测量的精度。根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片1焊接前 材料准备参照元器件清单表步步骤说明明示范示范图片片2硬件焊接电路板元件布局图步步骤说明明示范示范图片片
110、3程序烧入、运行并调试无输入信号时,频率值显示为“000000” Hz输入脉冲信号频率为500Hz时,显示为“498”Hz步步骤说明说明示范示范图片片3程序烧入、运行并调试输入脉冲信号频率为1000Hz时,显示为“995”Hz单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务4 主从呼叫器主从呼叫器1了解串行通信的基本概念及通信方式。2掌握串口不同工作方式下波特率的计算。3掌握串口中断初始化及服务程序的编写。4能够设计并制作主从呼叫器控制系统。 工业控制中,用户常常使用单片机的串口通信功能实现与上位机的信息交换。本任务通过设计一套主从呼叫器(包含主机、从机两部分)来演示单片
111、机的串口通信过程。主机从机其具体控制要求为:1主机一台,安装在主控室;从机一台,放置在被控室中。2从机设置四个呼叫键,通过按键可使从机向主机发送呼叫信号,主机利用一位数码管显示从机呼叫号,当从机有呼叫信号时指示灯点亮,并且向主机发送键值。3主机监视人员看到从机的呼叫信号后,可按下回应键,向从机回送信号并灭从机呼叫指示灯,告知从机已收到呼叫信号,并关闭主机上的显示信息。一、通信的基本概念一、通信的基本概念并行通信示意图串行通信示意图计算机与外部设备或计算机与计算机之间的信息交换称为通信,通信可分为并行通信和串行通信两种基本方式。二、串行通信的基本方式二、串行通信的基本方式1异步通信异步通信起始位
112、起始位:位于数据帧的开头,占1位,为0(低电平),表示发送端开始发送一帧数据。有效数据位有效数据位:紧跟起始位后,低位在前,高位在后,数据位共8位。奇偶校验位奇偶校验位:紧跟数据位后,占1位,视有效数据位中1的个数是奇数还是偶数由系统自动确定(偶数0,奇数1)。停止位停止位:位于数据帧的末尾,占一位,为1(高电平),表示一帧数据发送完毕。2同步通信同步通信同步通信则要求发送设备和接收设备使用完全相同的时钟频率,使双方达到完全同步。同步通信以一串字符为一个传送单位,字符间不加标识位,在一串字符开始时用同步字符标识,硬件要求高,通信双方须严格同步。同步通信的传输速率高(可达56KB/s或更高),但
113、需要保证发送设备和接收设备的完全同步,因此硬件设备比较复杂。异步通信速度比较慢,但是设备简单,使用方便,对通信设备要求较低(收、发设备的时钟基本同步即可),可远距离传输数据,应用较广。3数据通信形式数据通信形式串行通信中的数据通信形式有三种,分别为单工通信、半双工通信、全双工通信。单工通信:通信双方,一方只能发送,另一方只能接收,传送方向是单一的。半双工通信:通信双方只有一根传输线(共地),但任何一方都可以发送,当一方发送时,另一方只能接收。全双工通信:需要通信双方连接两条传输线(共地),一条是将数据从甲方送到乙方,另一条是从乙方送到甲方,允许双向同时发送。51系列单片机的串行通信属于全双工通
114、信方式。三、单片机双机异步通信系统三、单片机双机异步通信系统四、串口控制相关寄存器四、串口控制相关寄存器1串行数据缓冲器(串行数据缓冲器(SBUF)SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器,以便能以全双工方式进行通信。在逻辑上,SBUF只有一个,它既表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H。但在物理结构上,则有两个完全独立的SBUF,一个是发送缓冲寄存器SBUF,另一个是接收缓冲寄存器SBUF。指令:SBUF=ACC/启动一次数据发送,/可向SBUF再发送下一个数指令:ACC=SBUF/完成一次数据接收,/SBUF可再接收下一个数2串行口控制寄存器(串行口控制寄
115、存器(SCON)SCON(98H)位地址9FH9EH9DH9CH9BH9AH99H98H位符号SM0SM1SM2RENTB8RB8TIRISM0、SM1串行口工作方式选择位。SM0SM1工作方式工作方式功功 能能 说说 明明波波 特特 率率00方式0移位寄存器(用于I/O口扩展)01方式110位UART(8位数据)波特率可变(由T1溢出率确定)10方式211位UART(9位数据)或11方式311位UART(9位数据)波特率可变(由T1溢出率确定)SM2在方式2、3时,用作多机主从串行通信时的控制位。REN允许串行口接收控制位(相当于串行通信的开关)。REN=0禁止串行口接收由RXD(P3.0)
116、口输入的串行数据。REN=1允许串行口接收由RXD(P3.0)口输入的串行数据。TB8在方式2、3时,是发送的第9位数据,需要时由软件置位或复位。RB8在方式2、3时,是接收到的第9位数据;在方式1时,RB8是接收到的停止位;方式0时,不使用RB8。TI发送中断标志位,数据发送结束后,由硬件对其置位(TI=1)。可由软件查询TI位标志,也可以向CPU申请中断,但都必须由软件清0。RI接收中断标志位。接收数据结束后,由硬件对其置位(RI=1)。可由软件查询RI位标志,也可以向CPU申请中断,但都必须由软件清0。在AT89S51中,串行发送中断TI和接收中断RI的中断号同是interrupt4,因
117、此在中断程序中必须由软件查询TI和RI的状态才能确定究竟是接收还是发送中断,进而作出相应的处理。单片机复位时,SCON所有位均清0。3电源控制寄存器(电源控制寄存器(PCON)PCON(87H)位序号D7D6D5D4D3D2D1D0位符号SMOD/GF1GF0PDIDLSMOD位为波特率倍增位。当SMOD=1时,串行口波特率增加一倍。当SMOD=0时,串行口波特率为设定值。当系统复位时,SMOD=0。五、串行口的工作方式五、串行口的工作方式1方式方式0串行口工作在方式0时,作同步移位寄存器使用,以8位数据为一帧,无起始位和停止位。串行数据由RXD( P3.0) 端 输 入 或 输 出 , 同
118、步 移 位 脉 冲 由TXD(P3.1)端输出。这种工作方式常用于扩展I/O口中,外接移位寄存器实现数据并行输入或输出。工作在方式0时,波特率固定为fosc/12,即每个机器周期输入或输出一位数据。(1)数据发送当数据写入SBUF后,从RXD端输出,在移位脉冲的控制下,逐位移入74LS164,74LS164完成数据的串并转换。当8位数据全部输出后,由硬件将TI置“1”,发出中断请求。数据由74LS164并行输出,其接口电路如下图所示,RXD端接74LS164的串行输入端A、B,TXD接74LS164的时钟脉冲输入端CLK,P2.7接74LS164的清零端。(2)数据接收要实现接收数据,必须首先
119、把SCON中的允许接收位REN置“1”。当REN为1时,数据在移位脉冲的控制下,从RXD端输入。当接收完8位数据时,将接收中断标志位RI置“1”,发出中断请求。2方式方式1方式1为10位异步串行通信方式。其帧格式为1个起始位、8个数据位和1个停止位,其波特率可调。(1)数据发送数据写入SBUF后,就启动发送器开始发送,此时由硬件加入起始位和停止位,构成一帧数据,由TXD串行输出。发送完一帧数据后,将TI置“1”,通知CPU可以进行下一个数据的发送。(2)数据接收REN=1且接收到起始位后,就开始接收一帧数据。当停止位到来后,把停止位送入RB8中,并置位RI,通知CPU接收到一个数据,将其从SB
120、UF中取走。(3)波特率确定例例 串口通信波特率为9600bit/s,晶振频率fosc=11.0592MHz,使用定时器T1工作在方式2产生波特率,SMOD0,则计数器初值N= 。 解:解: 已知 fosc = 12MHz,波特率 = 9600 bit/s。 SMOD=0,T1工作于方式2 因为 所以 即:TH1=0xfd;TL1=0xfd;3方式方式2方式2为11位异步串行通信方式。其帧格式为1个起始位、9个数据位和1个停止位。与方式1相比增加了一个第9位数据位(D8),其功能由用户确定,是一个可编程位。(1)数据发送发送前先根据通信协议用指令设置好SCON中的TB8,然后将要发送的数据(D
121、0D7)写入SBUF中,而D8位的内容则由硬件电路从TB8中直接送到发送移位寄存器的第9位,并以此来启动串行发送。一帧发送完毕,将TI位置“1”,其他过程与方式1相同。(2)数据接收方式2的接收过程也与方式1基本类似,所不同的只在第9位数据上,串行口把接收到的前8位数据送入SBUF,而把第9位数据送入RB8。在接收前先将REN位置“1”,将RI位清“0”。然后根据SM2的状态和接收到的RB8的状态决定串行口在数据到来后是否使RI置“1”,如RI置“1”则接收数据,否则不接收数据。(3)波特率确定方式2的波特率是固定的,由晶振频率及SMOD的值确定。当SMOD为0时,波特率为晶振频率1/32,即
122、fosc/32;当SMOD为1时,波特率为晶振频率的1/64,即fosc/64。用公式表示为:4方式方式3方式3也是11位异步串行接收/发送方式。它的工作方式与方式2一样,但方式3的波特率与方式1波特率的设置相同。波特率波特率(bit/s)fosc(MHz)SMODT1方式方式2定定时初初值实际波特率波特率误差差(%)960012.001F9H89287480012.000F9H44647240012.000F3H24030.13120012.000E6H12010.0011920011.05921FDH192000960011.05920FDH96000480011.05920EAH4800
123、0240011.05920F4H24000120011.05920E8H12000常常见波特率波特率设置参数:置参数:一、一、设计并并绘制制主从呼叫器主从呼叫器电路原理路原理图二、程序设计二、程序设计1串口的初始化本次设计中,单片机串行通信模式选择方式1,数据传送的波特率为9600bit/s,波特率不增倍(SMOD=0)。根据波特率与T1初值N的关系式,T1装入的初值为FDH,波特率初始化设置为:PCON=0x00;/波特率不加倍,即SMOD=0TH1=0xfd;/波特率:9600TL1=0xfd;(1)波特率的设置TMOD位符号GATEM1M0GATEM1M0位设置00100000波特率由T
124、1工作于方式2产生,所以定时/计数器的方式控制寄存器TMOD设置如下:TMOD的初始化设置为:TMOD=0x20;/*设置波特率发生器T1工作于方式2自动装入模式*/(2)串行控制/状态寄存器(SCON)的设置SCON位符号SM0SM1SM2 RENTB8RB8TIRI位设置01010000SCON的初始化设置如下:SCON=0x50;/串口工作于方式1,10位异步收发2串口中断服务程序串口中断服务程序/*串口中断函数(主机)串口中断函数(主机)*/voidserial()interrupt4/串口中断编号为4,当进入中断,要么RI=1,要么TI=1if(RI=1)/如果是接收数据(从机发送过
125、来的按键编码数据)引起的中断RI=0;/当接收结束时,软件清接收中断标志位num=SBUF;/取出接收到的数据,转移给显示变量P0=dispcodenum;/查表送给数码管显示出呼叫号elseTI=0;/如果是发送数据引起的中断,则发送结束后由软件清发送中断标志位根据上述设计思路编写的主机完整程序:根据上述设计思路编写的从机完整程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步骤说明明示范示范图片片1焊接前材料准备主机元器件从机元器件步步骤说明明示范示范图片片2硬件焊接主机电路板元件布局图从机电路板元件布局图步步骤说明说明示范示范图片片3程序烧入
126、、运行并调试从机3号呼叫运行图单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任务任务1电子密码锁电子密码锁任务任务2字符型字符型LCD1602显示系统显示系统任务任务3实时温度监控系统实时温度监控系统任务任务4汉字点阵屏显示系统汉字点阵屏显示系统任务任务5简易数字电压表简易数字电压表任务任务6简易波形发生器简易波形发生器任任务1 电子密子密码锁1了解矩阵式键盘的电路设计。2掌握矩阵式键盘的按键识别编程方法。3掌握单片机对继电器及蜂鸣器控制电路的设计。4能够设计并制作电子密码锁控制系统。传统密码锁大多为机械式结构,其构造简单、安全性能低,还需随时携带金属钥匙,在科学技术日益发达
127、的今天已越来越无法满足人们的需求。而电子防盗密码锁(见下图)安全性能高、使用方便,人们只要通过键盘正确输入密码即可打开密码锁,否则将发出警报。本任务主要通过设计电子密码锁来学习矩阵式键盘电路的设计及软件编程方法。电子密码锁的具体控制要求如下:1单片机P2口连接控制44矩阵键盘,按键编号依次为“0F”,其中“0D”用作6位密码输入,“E”键为取消键,“F”键为确认键。2单片机P0口连接控制一位共阳数码管,用于输入密码显示和信息提示。3当单片机运行时,输入6位密码(预设值为123456),然后按下确认键:(1)密码正确,数码管显示“y”,同时单片机P1.0口输出开锁信号,驱动电磁锁打开(固态继电器
128、触点闭合,指示灯亮),模拟密码锁打开。(2)密码不正确,数码管显示“n”,同时单片机P1.7口输出报警信号,控制蜂鸣器发出警报声(提示密码错误)。4当在输入密码过程中或密码输入错误发出警报声时,按下取消键,重新输入6位密码。一、一、键盘扫描方式描方式在单片机应用系统中,键盘扫描只是CPU的工作内容之一。CPU除了要检测键盘和处理键盘操作之外,还要进行其他事物的处理。通常,完成键盘扫描和处理的程序是系统程序中的一个专用子程序,CPU调用该子程序对键盘进行扫描和处理的方式主要有三种:程序控制扫描、定时扫描和中断扫描。1程序控制扫描方式程序控制扫描方式在主控程序中的适当位置调用键盘扫描程序,对键盘进
129、行读取和处理。由于CPU要不间断地对键盘进行扫描以监视键盘的输入,而不能处理其他任务,这样将占用CPU大部分的资源。2定时扫描方式定时扫描方式在该方式中,要使用单片机的一个定时器,使其产生一个10ms的定时中断,CPU响应定时中断,执行键盘扫描,若在连续两次中断中都读到相同的按键按下(间隔10ms作为消抖处理),CPU即执行相应的键处理程序。由于单片机仍要定时对键盘进行扫描,这样相对程序控制扫描方式而言,节约了CPU的部分资源。3中断方式中断方式使用中断方式时,键盘的硬件电路要做一定的改动,增加一个按键产生中断信号的输入线,当键盘有按键按下时,键盘硬件电路产生一个外部的中断信号,CPU响应外部
130、中断,进行键盘处理。由于仅在按键按下产生外部中断时,CPU才执行键盘扫描和按键处理程序,因此大大提高了CPU的工作效率。二、矩阵键盘处理过程二、矩阵键盘处理过程1键输入键输入2键译码键译码3键处理键处理三、矩阵键盘的编程方法三、矩阵键盘的编程方法1扫描法扫描法2反转法反转法(1)让P2口低四位输出“1”,高四位输出“0”。从P2口的低四位读取键盘状态,若有按键按下,则低四位中会有一个“1”翻转为“0”,高四位不会变,此时即可确定被按下的键的行位置。(2)让P2口高四位输出“1”,低四位输出“0”。从P2口的高四位读取键盘状态,若有按键按下,则高四位中会有一个“1”翻转为“0”,低四位不会变,此
131、时即可确定被按下的键的列位置。(3)将两次结果组合起来,得到当前按键的特征编码。然后通过查表方式找到该特征码所对应的顺序编码。根据上述设计思路编写反转法键盘扫描程序:一、一、设计并并绘制制电子密码锁电子密码锁电路原理路原理图电子密码锁通常通过电磁继电器和离合器等电气元件来控制锁的机械部分。在本任务中通过控制继电器的吸合和断开来模拟密码锁的打开和关闭。单片机的P1.0和P1.7口为信息输出口,其中P1.0口输出信号控制固态继电器线圈得电,常开触点闭合,控制LED指示灯亮。P1.7口则输出报警信号,控制蜂鸣器发出警报声,两个电路均采用三极管驱动方式,如下图所示。二、程序设计二、程序设计根据上述设计
132、思路编写的完整程序:矩阵按键的扫描及译码程序流程图:三、程序输入及仿真运行三、程序输入及仿真运行密码正确时的仿真运行图密码不正确时的仿真运行图四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试密码输入正确密码输入错误单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务2 字符型字符型LCD1602显示系统显示系统1了解LCD的结构及引脚功能。2掌握单片机对LCD1602的指令操作方法。3能够设计并
133、制作键盘控制的字符型LCD1602显示系统。液晶显示器(LCD)以其轻薄短小、功耗小、字符显示系统完整等优点,逐渐在工业控制、仪器仪表等领域得到广泛应用。LCD1602液晶显示模块是16(字符)2(行),即32个字符的显示模块,具有专门的操作指令,能直接与单片机构成接口电路,其功能强、使用灵活。LCD16021单片机的P2口连接控制44矩阵键盘,按键编号依次为“0F”。2单片机的P0口连接LCD1602的8位双向并行总线(D0D7)。3单片机P1口的低三位分别控制LCD1602的RS、RW和EN端。4通过矩阵键盘输入,在LCD1602屏幕的预定位置显示出相应按键值。本任务的主要内容是设计一个字
134、符显示系统,具体控制要求如下:一、一、LCD1602的基础知识的基础知识1LCD1602引脚功能介绍引脚功能介绍161编号号符号符号引引 脚脚 说 明明1VSS电源负极(接地)2VCC电源正极(+5V)3VL对比度调整端接正电源时对比度最弱,接地电源时对比度最高(使用时可以通过一个10k的电位器调整对比度)4RS数据/命令选择端(H/L)为高电平时表示将进行数据操作为低电平时表示进行命令操作5R/W读/写选择端(H/L)为高电平时表示要对液晶进行读操作为低电平时表示要进行写操作6E使能信号读指令或数据时,高电平使能写指令或数据时,下降沿使能编号号符号符号引引 脚脚 说 明明7D08位双向并行总
135、线 0位(最低位)8D18位双向并行总线 1位9D28位双向并行总线 2位10D38位双向并行总线 3位11D48位双向并行总线 4位12D58位双向并行总线 5位13D68位双向并行总线 6位14D78位双向并行总线 7位(最高位,也是用来检测液晶忙的标志位)15BLA背光源正极(接+5V)16BLK背光源负极(接地)(续表)(续表)2字符集字符集1602液晶模块内部的字符发生存储器(CGROM)存储了由8位字符码生成的192个57点阵字符和32种510点阵字符。这些字符有:阿拉伯数字、英文字母的大小写、常用的符号和日文假名等。在单片机编程中,既可以用ASCII码直接赋值,也可以用字符型常量
136、或变量赋值,如A。在LCD1602内部的CGROM中提供了57点阵字符代码,但在实际的1602液晶显示屏上,字符却是以58点阵显示出来,即每块点阵的最底面一行是空显示。当用户显示自定义字符时,可以将字符定义为58点阵,并在液晶屏上显示出来。3显示位与显示位与RAM的对应关系(地址映射)的对应关系(地址映射)16字符2行显示位序号12341415161740RAM地址( 0x )第一行000102030D0E0F1027第二行404142434D4E4F5067由于受到LCD1602显示屏的限制,每行只能显示16个字符,当把显示字符地址设置在0x100x27(第1行)或0x500x67(第2行)
137、显示位时,LCD1602无法显示出来,但可以通过控制屏幕画面左移的方法,观察到每行写入在第16列以后的字符。二、二、LCD1602操作方法操作方法1基本操作时序基本操作时序基本操作基本操作输入入输出出RSRSR/WR/WE E读状态01高电平D0D7=状态字写指令00高脉冲无读数据11高电平D0D7=数据写数据10高脉冲无注:注:E=高脉冲,表示E端初始化时为0,然后置1,再清0(即下降沿有效)。2指令集指令集指令名称指令名称指指 令令 代代 码功功 能能D7D7 D6D6 D5D5 D4D4D3D3D2D2D1D1D D0 0显示模式设置00111000162显示,58点阵,8位数据接口清屏
138、00000001显示清屏:1数据指针清零2所有显示清零回车00000010显示回车,数据指针清零指令名称指令名称指指 令令 代代 码功功 能能D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0输入模式设置000001I/DSI/D=1 当读或写一个字符后地址指针加1,且光标加1;I/D=0 当读或写一个字符后地址指针减1,且光标减1S=1 当写一个字符后,整屏显示左移(I/D=1)或右移(I/D =0),以得到光标不移动而屏幕移动的效果;S=0 当写一个字符后,整屏显示不移动(续表)(续表)指令名称指令名称指指 令令 代代 码功功 能能D7D7D6D6D5D5D4D4D3D3D2
139、D2D1D1D0D0显示状态设置00001DCBD=1 开显示;D=0 关显示C=1 显示光标;C=0 不显示光标B=1 光标闪烁;B=0 光标不显示画面或光标滚动设置0001S/CR/L00S/C=1 画面滚动;S/C=0 光标滚动R/L=1 向右滚动;R/L=0 向左滚动数据指针设置1地址码设置数据地址指针80H+RAM地址变量(续表)(续表)三、三、LCD1602的操作函数的操作函数1检查检查LCD忙状态忙状态bitlcd_busy()1602bitbusy_flag;/定义忙标志位LCD_RS=0;LCD_RW=1;_nop_();LCD_EN=1;_nop_();/EN置为高电平,读
140、取状态字busy_flag=(bit)(LCD_Port&0x80);/查看忙标志位LCD_EN=0; _nop_();return(busy_flag); 在LCD1602初始化程序中,也可省略此函数,改用延时函数作适当的延时,跳过忙标志位的检测。2向向LCD写入一字节指令写入一字节指令voidlcd_write_command(ucharcmd)while(lcd_busy();/检查忙标志位,若忙则等待LCD_RS=0;/写指令(RS=0,RW=0)LCD_RW=0;LCD_EN=0;_nop_();_nop_();LCD_Port=cmd;_nop_();_nop_();/指令送LCD
141、总线端口LCD_EN=1; _nop_();_nop_();/EN产生下降沿LCD_EN=0;3向向LCD写入一字节数据写入一字节数据voidlcd_write_data(uchardat)while(lcd_busy();/检查忙标志位,若忙则等待LCD_RS=1;/写数据(RS=1,RW=0)LCD_RW=0;LCD_EN=0;LCD_Port=dat;_nop_();_nop_();/数据送LCD总线端口LCD_EN=1;_nop_();_nop_();/EN产生下降沿LCD_EN=0;4设定字符显示位置设定字符显示位置voidlcd_position(ucharpos)lcd_writ
142、e_command(pos|0x80);/数据指针=80+地址变量例例在LCD1602显示器的第二行第8列位置,显示一个字符“#”。lcd_position(0x48);/设定显示位置lcd_write_data(#);或lcd_write_data(0x23);/送要显示字符数据/(经查表,字符“#”的ASCII码为0x23)5LCD1602的初始化设置的初始化设置voidlcd_Initial()/*设置显示模式*/lcd_write_command(0x38);delay(1);/16*2显示,5*8点阵,8位数据接口/*设置显示状态*/lcd_write_command(0x08);d
143、elay(1);/关闭显示lcd_write_command(0x0c);delay(1);/显示开,关光标/*清除屏幕显示*/lcd_write_command(0x01);delay(1);/清除LCD的显示内容/*设置输入模式*/lcd_write_command(0x06);delay(1);/移动光标一、一、设计并并绘制制键盘控制的键盘控制的LCD1602显示系统显示系统电路原理路原理图二、程序设计二、程序设计矩阵键盘控制的LCD1602显示系统的程序流程图:根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步
144、骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表(可在上个任务的电路板上添加本任务所需电路)步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图(先取下单片机并通电,旋转电位器(RV1)的旋钮,调整液晶显示屏的对比度,使液晶屏显示如右图所示)步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试无按键按下时液晶显示有按键(E键)按下时液晶显示单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务3 实时温度监控系统实时温度监控系统1了解DS18B20的内部结构及测温原理。2掌握单片机对DS18B20的指令操作方法。3能够设计并制作基于DS18B20的
145、实时温度监控系统。温度控制系统广泛应用于社会生活的各个领域,如家电、汽车、材料、电力电子等。测量温度的关键是温度传感器,随着技术飞速发展,数字温度传感器DS18B20因其内部集成了A/D转换器而使电路结构更加简单,而且减少了温度测量转换时的精度损失,使得测量温度更加精确。基于基于S18B20的温控仪的温控仪本任务是要设计一个基于DS18B20数字式温度传感器的实时温度监控系统,要求将测量温度值送LCD1602显示,具体控制要求如下:1单片机的P3.7口连接DS18B20的数据输入输出端(DQ),DS18B20为电源供电方式。2单片机的P0口连接LCD1602的8位双向并行总线(D0D7)。3单
146、片机P1口的低三位分别控制LCD1602的RS、R/W和EN端,在LCD1602屏幕上显示当前环境温度。4具有高低温报警监控功能。当环境温度低于0时,单片机的P2.0口驱动蜂鸣器发出连续警报音;当环境温度高于25时,蜂鸣器发出间隔为0.5s的警报音。一、一、DS18B20功能功能简介介DS18B20是一个单总线(1Wire)数字测温芯片,仅需使用1个端口就能实现与单片机的双向通信。DS18B20的性能特点如下:(1)每个DS18B20器件上都有独一无二的序列号。(2)实际应用中不需要外部任何元器件即可实现测温。(3)可用数据线供电,电压范围:+3.0+5.5V。(4)测温范围:55+125,固
147、有测温分辨率为0.5。(5)测量分辨率可通过编程设定为912位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温。(8)负压特性,电源极性接反时,DS18B20不会因发热而烧毁,但不能正常工作。二、二、DS18B20内部结构及引脚图内部结构及引脚图1DS18B20内部结构内部结构(1)DS18B20ROM中的64位序列号排列图8位产品系列号48位产品序列号8位CRC编码(2)DS18B20温度值格式部分温度部分温度对应值表:表:温度温度/二二进制表示制表示十六十六进制表示制表示+1250000 0111 11
148、01 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H(3)DS18B20温度传感器的内部存储器序号序号寄存
149、器名称寄存器名称作作 用用序号序号寄存器名称寄存器名称作作 用用0温度低字节以16位补码形式存放4配置寄存器分辨率设置1温度高字节5、6、7保留自身用2TH/用户字节1存放温度上限3TL/用户字节2存放温度下限8CRC(检验码)数据校验(4)DS18B20的配置寄存器TMR1R011111R1R0分辨率分辨率温度最大转换时间温度最大转换时间009位93.75ms0110位187.5ms1011位375ms1112位750ms低5位一直都是“1”,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。DS18B20出厂时该位被设置为0,用户不要去改动。R1和R0用来设置分辨率,如下表
150、所示(DS18B20出厂时被设置为12位)。封装形式封装形式实 物物 图引引 脚脚 图TO92TSOCSOIC2DS18B20引脚图引脚图DS18B20的引脚的引脚说明:明:编号号符号符号引引 脚脚 说 明明1GND 电源负极(接地)2DQ 数字信号输入/输出端(当被用在寄生电源下时,也可以向器件提供电源)3VCC 外接供电电源输入端(在寄生电源接线方式时接地)1初始化初始化三、三、DS18B20控制命令控制命令复位要求主机(单片机)将数据线下拉480640s(t0t1),然后主机释放总线(t1时刻),由上拉电阻将总线拉至高电平,同时主机进入接收状态。当DS18B20收到信号后等待1560s(
151、t1t2)左右,从机(DS18B20)会向总线发出一个应答脉冲,将总线拉低60240s(t2t3),主机(单片机)收到此信号表示复位成功。主机的整个接收状态至少应维持主机的整个接收状态至少应维持480s(t1t4)。DS18B20的初始化序列图2ROM命令命令(1)写时序主机拉低总线,在接着的15s之内释放总线,由上拉电阻将总线拉至高电平,并维持整个时序期间。写“0”时序:主机拉低总线,在整个时序期间内保持低电平(至少60s)。写时序至少需要60s,而且两次独立的写时序之间至少需要1s的恢复时间。(2)读时序读时序同样由主机发起,拉低总线至少1s,然后主机释放总线。从机得到主机发出的时序后,开
152、始在总线上发送“0”或“1”。若从机发送“1”则保持总线为高电平,若发送“0”则拉低总线。当发送“0”后,从机发出的数据在起始时序之后保持有效时间15s,然后释放总线,由上拉电阻将总线拉回至空闲高电平状态。主机在时序起始后的15s之内对总线状态进行采样。ROM指令表:指令表:指指 令令约定代约定代码码功功 能能读ROM33H读DS1820温度传感器ROM中的编码(即64位地址)符合 ROM55H发出此命令之后,接着发出64位 ROM编码,访问单总线上与该编码相对应的DS1820使之作出响应,为下一步对该DS1820的读写做准备搜索 ROMF0H用于确定挂接在同一总线上 DS1820 的个数和识
153、别 64 位 ROM 地址(为操作各器件做好准备)跳过 ROMCCH忽略64 位 ROM 地址,直接向 DS1820 发温度变换命令(适用于单片独立工作)警告搜索命令ECH执行后只有温度超过设定值上限或下限的芯片才做出响应3功能命令功能命令指指 令令约定代码约定代码功功 能能温度转换44H启动DS1820进行温度转换,结果存入内部9字节RAM中读暂存器BEH读内部RAM中9字节的内容写暂存器4EH发出向内部RAM的2、3字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据复制暂存器48H将RAM中第2、3字节的内容复制到EEPROM中重调EEPROMB8H将EEPROM中内容恢复到R
154、AM中的第2、3字节。读供电方式B4H读DS1820的供电模式(寄生供电时DS1820发送“0”,外接电源供电时 DS1820发送“1”)四、四、DS18B20的操作函数的操作函数1DS18B20初始化初始化bitds18b20_rst(void)/*ds1820复位*/ucharrst_flag;/定义复位标志位DQ=0;/DQ被拉低delay_18B20(100);/精确延时大于480sDQ=1;/主机释放delay_18B20(10);/等待释放总线rst_flag=DQ;/延时后DS18B20将拉低总线,/若DQ=0,则初始化成功,否则失败delay_18B20(5);/延时片刻后,再
155、返回returnrst_flag;2从从DS18B20中读出一字节数据中读出一字节数据uchards18b20_rd(void)/从DS18B20中读出一字节数据uchari=0;uchardat=0;for(i=8;i0;i-)DQ=0;/给脉冲信号(拉低总线)dat=1;/数据右移一位DQ=1;/给脉冲信号(释放总线)if(DQ=1)/DQ为1dat|=0x80;/读出数据delay_18B20(4);return(dat);/数据返回3向向DS18B20中写入一字节数据中写入一字节数据voidds18b20_wr(uchardat)/向DS18B20中写入一字节数据uchari=0;fo
156、r(i=8;i0;i-)DQ=0;/给脉冲信号(拉低总线)DQ=dat&0x01;/数据从低位开始写入delay_18B20(5);/延时,等待DS18B20采集输入信号DQ=1;/给脉冲信号(释放总线)dat=1;/数据右移一位delay_18B20(4);4读取温度值并转换读取温度值并转换voidread_temp(void)/*读取温度值并转换*/uchara,b;while(ds18b20_rst();/若为1,则重新初始化ds18b20_wr(0xcc);/跳过读序列号ds18b20_wr(0x44);/启动温度转换delay_18B20(500);/温度转换稍作延时,/一般不超过7
157、50ms(仿真时要加)while(ds18b20_rst();ds18b20_wr(0xcc);/跳过读序列号ds18b20_wr(0xbe);/读取温度a=ds18b20_rd();/读取低字节b=ds18b20_rd();/读取高字节tvalue=b;tvalue=8;tvalue=tvalue|a;/组合成双字节if(tvalue0x0fff)/温度值为正tflag=0;/符号标志位清“0”,代表温度值为正else/温度值为负tvalue=tvalue+1;tflag=1;/符号标志位置“1”,代表温度值为负tvalue=tvalue*0.625;/温度值扩大10倍,精确到1位小数一、一
158、、设计并并绘制制实时温度监控系统实时温度监控系统电路原理路原理图二、程序设计二、程序设计本任务的程序包括两部分:一是单片机对DS18B20的操作,即对DS18B20的初始化、ROM命令控制、存储器读取、数据转换及温度显示;二是高、低温警报程序,这里显示器选择LCD1602显示方式,还设定温度的上下限值,当越限时要发出高低温警报,高温警报要发出连续警报音,即一直让P2.0口输出低电平,低温警报时发出间断警报音,即每隔0.5s将P2.0口电平取反。主程序温度测量及数据变换子程序根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步
159、步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图(旋转电位器RV1上的旋钮,调整液晶显示屏的对比度)步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试当前室温显示(注意观察温度计上的温度示数与LCD1602上显示的温度值是否一致)用手握住DS18B20的顶部,观察温度值是否升高,当温度超过25时,蜂鸣器发出连续警报DS18B20蜂鸣器报警单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务4 汉字点字点阵屏屏显示系示系统 1了解88LED点阵屏的内部结构及字符显示原理。2掌握单片机控制16
160、16LED点阵屏的汉字显示方法。3能够设计并制作基于1616LED点阵屏的汉字显示系统。LED点阵电子显示屏具有色彩鲜艳、亮度高、工作稳定、功耗低、安装方便等优点,已广泛应用于各种公共场合,如广告屏、宣传栏、银行叫号器以及公交车报站器等。本任务的主要内容是使用88点阵发光管模块组成的1616发光点阵,实现单个汉字的静态循环显示,显示内容可以为待定的中文、字符或数字。一、一、LED点点阵屏基屏基础知知识LED点阵是由许多单个LED按矩阵的方式排列而成,通过控制每个LED灯的亮灭来完成各种字符或图形的显示。单色88LED点阵实物图和结构图如下图所示: b)结构图a)实物图二、二、88LED点阵屏的
161、字符显示原理点阵屏的字符显示原理行行 数数点点阵数据数据第1行0x00第2行0x24第3行0x5A第4行0x81第5行0x42第6行0x24第7行0x18第8行0x00由8行8列构成的“”图形,如下图所示。其中要显示的点用二进制位1表示,不显示的点用位0表示。这样每行构成了一个字节,从上到下各行的数值用十六进制数表示,见下表。以按行显示为例,在88LED点阵上显示一个“”时,显示过程如下:P2口送出第1行要显示数据0x00,P0口送出选中第1行控制数据00000001;P2口送出第2行要显示数据0x24,P0口送出选中第2行控制数据00000010;P2口送出第3行要显示数据0x5A,P0口送
162、出选中第3行控制数据00000100;送完8行的显示数据和8个行控制信号,一个“”就显示了一遍,接着再重复上述显示过程。只要每行的刷新速率大于50Hz,利用人眼的视觉余辉效应,人们就可以看到一幅完整的文字或画面。88点阵字符显示参考程序如下:#include/包含AT89单片机寄存器的头文件#defineucharunsignedchar/定义无符号字符型uchar等价于unsignedcharcodeucharheart8=0x00,0x24,0x5A,0x81,0x42,0x24,0x18,0x00;/心形点阵数组main()uchari,k;while(1)k=0x01; /初始化,显示
163、第一行for(i=0;i8;i+)/显示8行,逐行扫描P0=0x00;/关闭显示P2=hearti;/因为是行线高电平有效,列数据低电平有效,数据取反送出P0=k;/选中行线k=k1;/指向下一行三、三、1616LED点阵屏点阵屏1点阵屏的组成点阵屏的组成1616LED点阵屏有16个行和16个列,由4个大小均为3232mm的88共阳点阵组成,点阵屏可拆装,采用圆孔铜排针,便于连接。在行上和列上分别连接有驱动电路,应用串行数据转并行数据的方式来实现数据的转换,驱动部份使用两个移位带存储器的74HC595和两个移位寄存器74HC164组成,74HC595负责列扫描数据,74HC164负责行扫描数据
164、。行扫描上同时采用三极管放大驱动电流,提高点阵屏亮度。输入数据口扩展口1616LED点阵屏的数据接口采用可并接方式,有输入和输出,可进行多块点阵屏之间的级联,方便多块合并,可组成3216、4816、6416等点阵屏,实现更多位的汉字显示。2电路原理图电路原理图点阵的列驱动电路主要由74HC595完成。74HC595是硅结构的CMOS器件,兼容低电压TTL电路,具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SHcp的上升沿输入,在STcp的上升沿进入存储寄存器。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲,电路中将两个时钟分开控制,目的是先移
165、好位再存储数据,这样在移位的过程中,可保持输出的数据。移位寄存器有一个串行移位输入(Ds)和一个串行输出(Q7)电路将其接入下一个IC的输入(Ds)组成16位移位存储器。一个异步的低电平复位(),电路中不使用复位信号,将此脚直接接入电源(+5V)。存储寄存器有一个三态的并行8位总线输出,当使能()为低电平时,存储寄存器的数据输出到总线,电路中直接将此脚接GND,做直接输出。点阵的行驱动电路主要由两片74HC164芯片和16个PNP型三极管S8550构成。74HC164是简单的8位移位寄存器,数据输入端A、B在SCK时钟脉冲作用下移入寄存器。A、B是与的输入,本电路将其合并作一个输入,移位寄存器
166、的最后一位输出(QH)接入下一个74HC164的输入A、B,组成16位移位寄存器。位的输出再经过三极管反向放大电流加到点阵的共阳端,即作为点阵的行控制口。该1616LED点阵屏优点是数据采用了串入并出的方式,占用单片机的接口较少。显示汉字较为灵活,不仅可以静态的显示信息,而且还可以动态滚动显示,从而增加信息显示的容量。 一、一、设计并并绘制制1616LED点阵屏汉字显示系统点阵屏汉字显示系统电路原理路原理图以显示“无锡”二字为例,字符的点阵图如下图所示。将字型数据分成上下两个8行,共16行,每行又各占16列,如果每列分别用一位二进制数表示,这样每行将占用两个字节。因此,一个汉字就可以用162=
167、32个字节的点阵码来表示。程序中将每个汉字的点阵码分别用数组来表示,当要显示某一汉字时,直接将该汉字的数组点阵码送入显示缓冲区。二、程序设计二、程序设计本设计采用逐行扫描方式,要在16行16列的LED点阵上显示一个字符,先由单片机从显示缓冲区取出第一行需要显示的2字节点阵数据(数据分两次送入,先送一行的最后一字节),依次串行输入至列移位寄存器74HC595,然后单片机输出数据控制行移位寄存器74HC164选中第一行,即可实现该行的数据显示,紧接着再进行下一行点阵数据的显示,如此循环,便可显示整个汉字的内容。注意:每次只能选通一行数据,并通过不断的逐行扫描来实现汉字或字符的显示。 汉字的点阵数据
168、可以从计算机显示字库中获得,也可用字库软件转换得到。对于特殊符号或图案,要先绘出图形,再根据图形写出相应的代码。 a)主程序流程图b)显示程序流程图根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行 由于Proteus元件库中没有S8550的仿真模型,因此仿真时用74HC04集成电路替换。步步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试显示屏显示“无”字显示屏显示“锡”字单击此处返回目录
169、单击此处返回目录单击此处返回目录单击此处返回目录任任务5简易数字电压表简易数字电压表1了解A/D的基本概念。2了解ADC0809的内部结构及转换原理。3掌握ADC0809的各引脚功能及初始化过程。4掌握单片机控制ADC0809实现05V直流电压测量的方法。5能够设计并制作简易数字电压表。数字电压表是诸多数字式仪表的核心与基础,以数字电压表为核心,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表(如温度计、电子称等)。本任务采用AT89S51单片机和ADC0809模数转换芯片来设计一个简易的数字电压表,要求其能够对输入的05V模拟直流电压进行测量,并通过3位7段的LED数码管进行
170、显示,测量误差约为0.01V。数字电压表电子称一、一、A/ D的基本概念的基本概念将模拟量转换成数字量,简称为A/D转换。完成这种转换的电路称为模数转换器(AnalogtoDigitalConverter),简称ADC。二、二、ADC0809简介简介ADC0809是采用CMOS工艺制成的单片8位8通道逐次逼近式A/D转换器,通过一套基准电压与取样保持电压进行比较,从而将模拟量直接转换成数字量。其特点是工作速度快,转换精度容易保证,使用也比较方便。其输入的模拟电压与数字量输出之间的转换关系是:ADC0809的核心部分是8位A/D转换器,它由比较器、逐次逼近寄存器、D/A转换器及控制和定时5部分组
171、成,其逻辑框图及引脚排列如下图所示。a)内部逻辑框图b)引脚排列图1引脚功能说明引脚功能说明引脚编号引脚编号引脚定义引脚定义功功 能能 说说 明明26 28、1 5IN0 IN78路模拟量输入端14 、15、8、17 21D0 D78位数字量输出端2325ADDC、ADDB、ADDA3位地址输入线(选通8路模拟输入中的一路)22ALE地址锁存允许信号,输入高电平有效,对应ALE上升沿,A、B、C地址状态送入地址锁存器中6STARTA/D转换启动信号,输入高电平有效START上升沿时,复位ADC0809START下降沿时,启动芯片开始进行A/D转换(在A/D转换期间,START应保持低电平)引脚
172、编号引脚编号引脚定义引脚定义功功 能能 说说 明明7EOCA/D转换结束信号。EOC=0,正在进行转换;EOC=1,转换结束。该状态信号既可作为查询的状态标志,又可作为中断请求信号使用9OE数据输出允许信号,高电平有效。当A/D转换结束时,OE=1,打开输出三态门,输出数字量,控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻10CLK时钟脉冲输入端(时钟频率不高于1280kHz)12、16VREF()、VREF()基准电压11Vcc电源(+5V)13GND地(续表)(续表)2模拟通道选择模拟通道选择选中的中的模模拟通道通道IN0IN1IN2IN3IN4IN5IN6IN7
173、地 址ADDC00001111ADDB00110011ADDA010101013ADC0809的工作过程的工作过程首先输入3位地址码(ADDC、ADDB、ADDA),并使ALE=1,将地址码存入地址锁存器中。此地址经译码后,选通8路模拟通道之一到比较器。给START一个上升沿将逐次逼近寄存器复位,下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换完毕,结果数据已存入锁存器。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。4转换数据的传送转换数据的传送(1)定时传送方式(2)查询方式(3)中断方式三、三、AD
174、C的主要技术指标的主要技术指标1分辨率分辨率A/D转换器的分辨率(Resolution)是指引起A/D转换器的输出数字量变动一个二进制数码的最低有效位(LSB)时输入模拟量的最小变化量。例例 某某A/D转换器器输入模入模拟电压变化范化范围为010V时: 解:解: 若为8位ADC,其分辨率为:若为10位ADC,其分辨率为若为12位ADC,其分辨率为2转换速度转换速度完成一次A/D转换(从接到转换启动信号开始,到输出端获得稳定的数字信号)所经过的时间叫做转换时间,转换时间越短,则转换速度越快。双积分型ADC的转换时间在几十毫秒至几百毫秒之间;逐次比较型ADC的转换时间大都在1050s之间;并行比较
175、型ADC的转换时间可达10ns。3转换误差转换误差转换误差也叫相对精度或相对误差,表示A/D转换器实际输出的数字量与理论上的输出数字量之间的差别,通常用最低有效位(LSB)的倍数表示。例例某ADC的相对精度为(1/2)LSB,这说明理论上应输出的数字量与实际输出的数字量之间的误差不大于最低位为的一半。一、一、设计并并绘制制简易数字电压表简易数字电压表电路原理路原理图二、程序设计二、程序设计1ADC0809时钟脉冲的产生时钟脉冲的产生ADC0809时钟的典型运用为640kHz,本任务中外接晶振频率为12MHz,采用定时器T1工作于方式2为ADC0809提供频率为500kHz的时钟脉冲,定时周期为
176、2s,在中断程序中将电平取反完成脉冲的输出。由于Proteus中没有ADC0809的仿真模型,在仿真时可以选用Proteus中的ADC0808代替。ADC0809与ADC0808的功能结构相似,引脚排列也相同。2ADC0809数据的读取数据的读取(1)初始化时,使START和OE信号全为低电平。(2)将要转换的通道地址送到A、B、C端口上,在ALE上加上锁存脉冲。(3)在START端给出一个至少有100ns宽的正脉冲信号。(4)是否转换完毕根据EOC信号来判断。如果EOC为低电平,表示还在转换过程中;如果EOC变为高电平,表示转换完毕。(5)使OE为高电平,将转换后的数据送给单片机处理。当数据
177、传送完毕后,将OE置为低电平,使ADC0809输出为高阻状态,让出数据线。3数据的处理数据的处理本电路中ADC0809使用的基准电压VREF+5V,根据A/D转换的公式,实际测量的电压值Vin=DoutVREF/(281)。由于在数码管上要显示出电压值的小数点后第二位数字,因此在本次数据处理程序中,先将VREF扩大了100倍,然后再去除以255,经过运算处理,得到A/D的另一个变换公式:a)定时器T1服务程序b)主程序c)定时器T0服务程序根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片
178、1焊接前材料准备参照元器件清单表ADC0809步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图步步 骤说 明明示示 范范 图 片片3程序烧入、运行并调试旋转电位器(RV1),输入的模拟电压值为2.50V(可用数字式万用表测量ADC0809的IN0端电位)旋转电位器(RV1),输入的模拟电压值为4.23V单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录任任务6 简易波形发生器简易波形发生器1了解D/A的基本概念。2了解DAC0832的内部结构及转换原理。3掌握DAC0832与单片机之间的连接方法。4掌握单片机控制DAC0832产生不同波形的编程方法。5能够设计并制作
179、简易波形发生器。作为一种常用的信号发生装置,信号发生器广泛应用于电子实验、设备检测和自动控制系统等领域。虽然常见的信号源完全可以由硬件电路搭接而产生,如采用555振荡电路产生脉冲波,但是这种电路存在波形质量差、控制难、可调范围小和电路复杂等缺点。本任务主要利用单片机和DAC0832组成信号发生系统,通过程序的控制来产生方波、锯齿波、三角波和正弦波4种波形,并通过一个按键实现波形之间的切换。一、一、D/A的基本概念的基本概念将数字量转换成模拟量,简称为D/A转换。完成这种转换的电路称为数模转换器(DigitaltoAnalogConverter),简称DAC。运算放大器输出的模拟量Vo为:二、二
180、、DAC0832简介简介DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器,它主要由T型R-2R电阻网络、模拟开关、参考电压VREF组成。a)逻辑框图b)引脚排列根据对数据锁存器和数据寄存器控制方式的不同,DAC0832有三种工作方式:(1)直通方式直通方式:即数据不经两级锁存器锁存。此方式适用于连续反馈控制线路,但在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。(2)单缓冲方式单缓冲方式:即控制输入寄存器和数据寄存器同时接收数据,或者只用输入寄存器而把数据寄存器接成直通方式。此方式适用于只有一路模拟量输出或几路模拟量异步输出的情形。(3)双缓冲方式双
181、缓冲方式:先使输入寄存器接收数据,再控制输入寄存器的数据输出到数据寄存器,分两次锁存输入数据。此方式适用于多个D/A转换同步输出的情形。引脚编号引脚编号引脚定义引脚定义功功 能能 说说 明明4 7、13 16D0 D7数字信号输入端19ILE输入寄存器允许端(高电平有效)1片选信号(低电平有效)2写信号1(低电平有效)17传送控制信号(低电平有效)18写信号2(低电平有效)DAC0832引脚功能说明:引脚功能说明:(续表)(续表)引脚编号引脚编号引脚定义引脚定义功功 能能 说说 明明11、12IOUT1,IOUT2DAC电流输出端9R f b集成在片内的外接运放的反馈电阻端8VREF基准电压(
182、-10V +10V)20Vcc电源电压(+5V +15V)3AGND模拟地可接在一起使用10DGND数字地三、三、DAC的主要技术指标的主要技术指标1分辨率分辨率分辨率是指输出电压的最小变化量(对应于输入数字量最低位为1,其余各位均为0时的输出电压)与满量程输出电压(对应于输入数字量全部为1时的输出电压)之比,通常用百分比来表示。对于n位D/A转换器,分辨率可表示为:例例4位DAC的分辨率:1/(24-1)=1/15=6.67%8位DAC的分辨率:1/(28-1)=1/255=0.39%2转换速度转换速度D/A转换器从输入数字量到转换成稳定的模拟输出电压所需要的时间称为转换速度。不同的DAC其
183、转换速度也是不相同的,一般约在几微秒到几十微秒的范围内。3转换精度转换精度转换精度是指电路实际输出的模拟电压值和理论输出的模拟电压值之差。通常用最大误差与满量程输出电压之比的百分数表示。例例某D/A转换器满量程输出电压为10V,如果误差为1%,就意味着输出电压的最大误差为0.1V。即百分数越小,精度越高。5温度系数温度系数4非线性误差非线性误差即DAC的实际转换特性曲线与理想特性曲线之间的最大偏差,并以该偏差相对于满量程的百分数度量。D/A转换器的非线性误差主要由模拟开关以及运算放大器的非线性引起。转换器电路设计一般要求非线性误差不大于1/2最低有效位(LSB)。在输入不变的情况下,输出模拟电
184、压随温度变化而变化的量,称为DAC的温度系数。一般用满刻度的百分数表示温度每升高1输出电压变化的值。四、四、D/A与与A/D的关系的关系典型的单片机控制模拟系统框图一、一、设计并并绘制制简易波形发生器简易波形发生器电路原理路原理图由于任务中是要输出多种信号波形,为了便于观察,可以借助于Proteus中的仿真示波器来显示输出波形简易波形发生器的软件设计流程图二、程序设计二、程序设计1方波的产生方波的产生voidsquare(void)/方波发生函数ucharx;for(x=0;x125;)/低电平半周if(time=1)/40s时间到标志位Dac0832_data=0x00;x+;time=0;
185、for(x=0;x125;)/高电平半周if(time=1)Dac0832_data=0xff; x+;time=0;2锯齿波的产生锯齿波的产生voidsaw(void) /锯齿波发生函数ucharx;for(x=0;x250;)if(time=1)/40s时间到标志位Dac0832_data=x;/产生斜坡x+;time=0;3三角波的产生三角波的产生voidtriangle(void)/三角波发生函数ucharx;for(x=0;x0;)/产生三角波的下降斜边If(time=1)/40s时间到标志位Dac0832_data=x;x=x-2;/减2即下降斜边也取125个点,保证全周期为250
186、个点time=0;4正弦波的产生正弦波的产生ucharcodesin_tab250=/输出电压从0到最大值(090)0x80,0x83,0x86,0x89,0x8c,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa6,0xa9,0xac,0xaf,0xb2,0xb5,0xb7,0xba,0xbd,0xc0,0xc3,0xc5,0xc8,0xcb,0xcd,0xd0,0xd2,0xd5,0xd7,0xd9,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5,0xf6,0x
187、f7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,/输出电压从最大值到0(90180)0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,0xda,0xd7,0xd5,0xd2,0xd0,0xcd,0xcb,0xc8,0xc6,0xc3,0xc0
188、,0xbd,0xba,0xb8,0xb5,0xb2,0xaf,0xac,0xa9,0xa6,0xa3,0xa0,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,/输出电压从0到最小值(180270)0x80,0x7c,0x79,0x76,0x73,0x70,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51,0x4e,0x4b,0x48,0x45,0x42,0x3f,0x3c,0x3a,0x37,0x34,0x32,0x2f,0x2d,0x2a,0x28,0x26,0x23,0x21,0x1f,0x1d,
189、0x1b,0x19,0x17,0x15,0x14,0x12,0x10,0x0f,0x0d,0x0c,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,/输出电压从最小值到0(270360)0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0c,0x0d,0x0e,0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0
190、x21,0x23,0x25,0x28,0x2a,0x2c,0x2f,0x31,0x34,0x37,0x39,0x3c,0x3f,0x42,0x44,0x47,0x4a,0x4d,0x50,0x53,0x56,0x59,0x5c,0x5f,0x62,0x66,0x69,0x6c,0x6f,0x72,0x75,0x79,0x7c;voidsin(void)/正弦波发生函数ucharx;for(x=0;x250;)if(time=1)Dac0832_data=sin_tabx;x+;time=0; 正弦波发生函数中使用到的正弦波数组sin_tab250中的采样数据可通过单片机正弦波数据生成器专业软件生成,而且采样点数可调。根据上述设计思路编写的完整程序:三、程序输入及仿真运行三、程序输入及仿真运行幅值约5Va)方波b)锯齿波c)三角波d)正弦波四、制作硬件电路并调试四、制作硬件电路并调试步步 骤说 明明示示 范范 图 片片1焊接前材料准备参照元器件清单表DAC0832LM324步步 骤说 明明示示 范范 图 片片2硬件焊接电路板元件布局图步步 骤说 明明示示 范范 图 片片3程序烧入、运行及波形测量方波输出锯齿波输出步步 骤说 明明示示 范范 图 片片3程序烧入、运行及波形测量三角波输出正弦波输出单击此处返回目录单击此处返回目录单击此处返回目录单击此处返回目录