《单片机原理及应用项目化教程(完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程.ppt》由会员分享,可在线阅读,更多相关《单片机原理及应用项目化教程(完整版课件全套ppt整本书电子讲义全书ppt电子课件最全教学教程.ppt(310页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、单片机原理及应用项目化教单片机原理及应用项目化教程(程(C C 语言版)语言版)项目结构项目结构项目一:单片机介绍项目一:单片机介绍项目二:输入项目二:输入/输出功能输出功能项目三:数码管基础与矩阵键盘扫描项目三:数码管基础与矩阵键盘扫描项目四:定时器与数码管动态显示项目四:定时器与数码管动态显示项目五:外部中断与串行通信项目五:外部中断与串行通信项目六:项目六:LCD1602LCD1602显示原理及实现显示原理及实现项目七:项目七:I I2 2C C总线与总线与EEPROMEEPROM项目八:项目八:DS18B20DS18B20与与蜂鸣器蜂鸣器项目九:项目九:A/DA/D与与D/AD/A转换
2、转换项目十:项目十:实时时钟实时时钟DS1302DS1302项目十一:项目十一:红外通信与步进电机红外通信与步进电机项目一:单片机介绍项目一:单片机介绍单片机最小系统单片机开发系统软件介绍Proteus仿真软件的使用单片机介绍单片机介绍1.1.1 1.1.1 单片机的基本概念单片机的基本概念单片微型计算机(Single-Chip Microcomputer),简称单片机,是将微处理器微处理器(CPU)、存储器存储器(存放程序或数据的ROM和RAM)、总线总线、定时器定时器/计数器计数器、输输入入/输出接口输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。由于单片机的重要应用领
3、域为智能化电子产品,一般需要嵌入仪器设备内,故又称为嵌入式微控制器嵌入式微控制器(Embedded Microcontroller)。单片机介绍单片机介绍单片机的主要特点如下:(1)可靠性高;(2)便于扩展;(3)控制功能强;(4)低功耗、低电压;(5)易于嵌入、发展迅速、应用广泛单片机介绍单片机介绍1.1.2 单片机的应用领域单片机的应用领域(1)工业控制与检测(2)智能仪器仪表(3)消费类电子产品(4)网络和通信(5)设备领域(6)武器装备(7)汽车电子 此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空航天等领域都有着十分广泛的用途。单片机介绍单片机介绍1.1.3单片机有哪
4、些系列单片机有哪些系列单片机种类繁多,一般常用的有以下几种:(1)8051 单片机(2)MOTOROLA 单片机(3)Microchip 单片机(4)Atmel 单片机(5)NEC 单片机(6)东芝单片机 单片机介绍单片机介绍(7)富士通单片机(8)LG公司生产的GMS90系列单片机(9)凌阳16位单片机(10)Scenix单片机(11)EPSON单片机(12)华邦单片机单片机介绍单片机介绍1.1.4 单片机的选择单片机的选择 当今单片机琳琅满目,产品性能各异。如何选择好单片机是项目开发首要解决的问题。(1)单单片片机机的的基基本本参参数数及及其其内内部部资资源源,如:程序存储器容量,I/O引
5、脚数量,AD或DA通道数量及转换样精度等;(2)单片机的增增强强功功能能,例如看门狗,RTC,EEPROM,扩展RAM,CAN总线接口,I2C接口,SPI接口等。(3)Flash和OTP(一次性可编程)相比较,最好是Flash。(4)封封装装,一般来说贴片的比直插的体积小,抗干扰性强,但是价格要贵一些。单片机介绍单片机介绍(5)工作温度范围,工业级还是商业级,如果设计户外产品,必须选用工业级工业级。(6)工作电压范围工作电压范围,例如设计电视机遥控器,2节干电池供电,至少应该能在1.83.6V电压范围内工作。(7)功耗功耗,能够满足设计要求的前提下功耗越低越好。(8)性价比高性价比高。(9)供
6、货渠道畅通供货渠道畅通,尽量选用市场上容易购买到的单片机。(10)有服务商有服务商,像Microchip公司推PIC,周立功公司推Philips,双龙公司推AVR,都提供了很多有用的技术资料,起码烧写器有地方买。单片机介绍单片机介绍1.1.5 MCS-511.1.5 MCS-51单片机识读单片机识读1 1、MCS-51MCS-51单片机内部结构单片机内部结构 MCS-51单片机由中央处理器中央处理器(CPU)、程序存储程序存储器器(ROM/EPROM)、数据存储器数据存储器(RAM)、定定时时/计数器计数器、I/OI/O接口接口、中断系统中断系统等组成。内部内部中断中断外部外部中断中断CPU振
7、荡器振荡器基准时钟源基准时钟源4KB ROM256B RAM总线控制扩展总线控制扩展I/O串行口串行口2个个16位的位的TC控制控制并行并行I/O串行串行输入输入串行串行输出输出计数器计数器80518051的结构框图的结构框图内部结构如下内部结构如下:运算器运算器控制器控制器CPU128字节的字节的RAM,作用是存放运算的,作用是存放运算的中间结果以及数据暂存。中间结果以及数据暂存。00H7FH4K程序存储区,地址从程序存储区,地址从0000H开始,用于开始,用于存放程序代码和表格数据存放程序代码和表格数据2个个16位的定时计数器位的定时计数器4个个IO(P0,P1,P2,P3共共32线线)口
8、与外界交换信息口与外界交换信息1.2MHz12MHz一个全双工的串口一个全双工的串口UART5个中断源,三个个中断源,三个内部,二个外部内部,二个外部单片机介绍单片机介绍2、引脚功能说明、引脚功能说明 DIPDIP引脚图引脚图 逻辑符号逻辑符号 单片机介绍单片机介绍电源引脚(2根)V VCCCC(40脚):电源端,接+5V电源。V VSSSS(20脚):接地端。I/O引脚(48=32根)控制引脚(6根)时钟电路引脚 XTAL1(19脚)和XTAL2(18脚)XTAL1XTAL1:接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,若使用外部TTL时钟时,该引脚必须接地。XTAL2XT
9、AL2:接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,若使用外部TTL时钟时,该引脚为外部时钟的输入端。单片机介绍单片机介绍ALE/PROGALE/PROG(30脚):地址锁存允许信号输出当CPU访问片外存储器时,ALE输出信号控制锁存控制锁存P0P0口输出的低口输出的低8 8位地址位地址,从而实现P0口数据与低位地址的分时复用。EA/VEA/VPPPP(31脚):外部程序存储器地址允许输入端。当为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令。当为低电平时,CPU只执行片外程序存储器指令。PSENPSEN(32脚):
10、外部程序存储器读选通信号。是读外部程序存储器的选通信号,低电平有效。RSTRST(9脚):复位信号输入端。该信号高电平有效,在输入端保持两个机器周期的高电平后两个机器周期的高电平后,就可以完成复位操作。单片机介绍单片机介绍1.1.6单片机最小系统的组成单片机最小系统的组成所谓单片机最小系统,是指用最少的元件能使单片机工作起来的一个最基本的组成电路。对51系列单片机来说,最小系统一般应该包括:电源电源、晶振电路晶振电路、复位电路复位电路等。同时单片机要正常运行,还必须具备电源正常电源正常、时钟正常时钟正常、复位正复位正常常三个基本条件。单片机介绍单片机介绍(1 1)电源电源 电源是单片机工作的动
11、力源泉。我们所选用的STC89C52,它需要5V的供电系统,我们的开发板是使用USB口输出的5V直流直接供电的。供电电路在40脚和20脚的位置上,40脚接的是+5V,通常也称为VCC或VDD,代表的是电源正极,20脚接的是GND,代表的是电源的负极。(2 2)时钟电路时钟电路 时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在统一的时序脉冲的驱动下进行的。STC89C52单片机的18脚和19脚是晶振引脚,我们接一个11.0592MHz的晶振(它每秒振荡11059200次),外加两个20pF的电容,电容的作用是帮助晶振起振,并维持振荡信号的稳定。单片机介绍单片机介绍(3 3)复位电路复
12、位电路 在复位引脚(9脚)脚持续出现2424个振荡器脉冲周期个振荡器脉冲周期(即2个机器周期)的高电平高电平信号将使单片机复位,此时,一些专用寄存器的状态值将恢复为初始值。单片机复位一般是3种情况:上电复位、手动复位、程序自动复位。(a)上电复位电路(b)按键复位电路单片机介绍单片机介绍 复位后复位后各特殊功能寄存器初始状态各特殊功能寄存器初始状态寄存器状态寄存器状态PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0-P3 FFHSCON00HIPxxx00000HSBUF不确定IE0 xx00000HPCON0
13、 xxx0000HTMOD00H单片机开发系统软件介绍单片机开发系统软件介绍单片机开发,首要的两个软件一个是编程软件,一个是下载软件。编程软件我们用Keil uVision的51版本,也叫Keil C51,Keil C51 Keil C51 集编辑,编译,仿真于一体集编辑,编译,仿真于一体,支持汇编、PLM 语言和 C 语言的程序设计,界面友好,易学易用。在51系列单片机的学习与开发过程中,keil C51软件的使用为程序设计开发提供了一个高效率的平台。单片机开发系统软件介绍单片机开发系统软件介绍单片机开发系统软件介绍单片机开发系统软件介绍用keil C51软件编辑编译一段C程序,实现打印的K
14、eil C51 欢迎界面:“Hello I am KEIL,I will be your friend.”。根据任务编写的C源程序如下:#include /包含头文件#include void main(void)/主函数 SCON=0 x52;TMOD=0 x20;TH1=0 xf3;TR1=1;/PRINTF函数所必须 printf(“Hello I am KEIL.n”);printf(“I will be your friend.n”);while(1);单片机开发系统软件介绍单片机开发系统软件介绍(1)建立一个新的工程项目单片机开发系统软件介绍单片机开发系统软件介绍(2)保存工程项目
15、单片机开发系统软件介绍单片机开发系统软件介绍(3)为工程项目选择单片机型号单片机开发系统软件介绍单片机开发系统软件介绍(4)新建源程序文件单片机开发系统软件介绍单片机开发系统软件介绍(5)保存源程序文件单片机开发系统软件介绍单片机开发系统软件介绍(6)为工程项目添加源程序文件单片机开发系统软件介绍单片机开发系统软件介绍(7)输入源程序文件单片机开发系统软件介绍单片机开发系统软件介绍(8)编译源程序单片机开发系统软件介绍单片机开发系统软件介绍(9)调试源程序单片机开发系统软件介绍单片机开发系统软件介绍(10)查看分析结果单片机开发系统软件介绍单片机开发系统软件介绍(11)生成Hex代码文件 PR
16、OTUES仿真软件的使用仿真软件的使用Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、可以仿真、分析分析(SPICE)各种模拟器件和集成电路各种模拟器件和集成电路。在51系列单片机的学习与开发过程中,keil C51软件是程序设计开发的平台,不能直接的进行单片机的硬件仿真。如果将keil C51软件和Proteus软件有机结合起来,那么51系列单片机的设计与开发将在软硬件仿真上得到完美的结合。主页主页ISISISISARESARES3D3D浏览浏览Proteus8.0ProfessionalProteus8.0Pro
17、fessional的的主页界面主页界面元件清单元件清单关于关于Proteus8.0Proteus8.0帮助帮助信息信息简介简介PCBPCB设计设计模拟模拟入门指导入门指导新版本新版本等等打开设计图打开设计图/新建设计图新建设计图最近最近的的设计图设计图主页主页文件文件(F)(F)编辑编辑(E)(E)浏览浏览(V)(V)工具工具(T)(T)设计设计(D)(D)绘图绘图(G)(G)除错除错(D)(D)库库(L)(L)模板模板(T)(T)系统系统(S)(S)帮助帮助(H)(H)Proteus中ISIS的主窗口示意图ISISISIS通用工具菜单通用工具菜单专用专用工具工具菜单菜单电路编辑窗口电路编辑窗
18、口坐标坐标原点原点浏览浏览窗口窗口器件器件工具工具列表列表窗口窗口ARESARES电气电气规则规则检查检查主菜单主菜单交互仿真按键交互仿真按键元件清单元件清单点击鼠标点击鼠标:点击此键可取消左键的放置功能,但可编辑对象。点击此键可取消左键的放置功能,但可编辑对象。选择元器件选择元器件:在元件表选中器件在元件表选中器件,在编辑窗中移动鼠标在编辑窗中移动鼠标,点击左键放置点击左键放置标注联接点标注联接点:当两条连线交叉时当两条连线交叉时,放个接点表示连通。放个接点表示连通。标志网络线标号标志网络线标号:电路联线可用网络标号代替电路联线可用网络标号代替,相同标号的线是相同的。相同标号的线是相同的。放
19、置文本说明放置文本说明:是对电路的说明是对电路的说明,与电路仿真无关与电路仿真无关!放置总线放置总线:当多线并行简化联线当多线并行简化联线,用总线标示。用总线标示。放置器件引脚放置器件引脚:有普通有普通.反相反相.正时钟正时钟.反时钟反时钟.短引脚短引脚.总线。总线。放置图纸内部终端放置图纸内部终端:有普通有普通.输入输入.输出输出.双向双向.电源电源.接地接地.总线。总线。放置子电路放置子电路:可将部分电路以子电路形式画在另一图纸上。可将部分电路以子电路形式画在另一图纸上。编编辑辑工工具具放置分析图放置分析图:有模拟有模拟.数字数字.混合混合.频率特性频率特性.传输特传输特 性性.噪声分析等
20、。噪声分析等。放置录放音设置放置录放音设置:放置电源放置电源.信号源信号源:有直流电源有直流电源,正弦信号源正弦信号源,脉冲脉冲 信号源等。信号源等。放置电压电流探针放置电压电流探针:显示网络线上的电压或串联显示网络线上的电压或串联在指定的网络线上显示电流值。在指定的网络线上显示电流值。放置虚拟仪器放置虚拟仪器:有示波器有示波器.计数器计数器.RS232终端终端.SPI调调试器试器.I2C调试器调试器.信号发生器信号发生器.图形发生器图形发生器.直流直流电压表电压表.直流电流表直流电流表,交流电压表交流电压表.交流电流表。交流电流表。调调试试工工具具放置各种线放置各种线:有器件有器件.引脚引脚
21、.端口端口.图形线图形线.总线等。总线等。放置矩形框放置矩形框:移动鼠标到框的一角移动鼠标到框的一角,按下左键拖动按下左键拖动,释放后完成。释放后完成。放置圆形框放置圆形框:移动鼠标到圆心移动鼠标到圆心,按左键拖动按左键拖动,释放后完成。释放后完成。放置圆弧线放置圆弧线:鼠标移到起点鼠标移到起点,按下左键拖动按下左键拖动,释放后调整弧长释放后调整弧长,点击鼠点击鼠 标完成。标完成。画闭合多边形画闭合多边形:鼠标移到起点鼠标移到起点,点击产生折点点击产生折点,闭合后完成。闭合后完成。放置文字标签放置文字标签:在编辑框放置说明文本标签。在编辑框放置说明文本标签。放置特殊图形放置特殊图形:可在库中选
22、择各种图形。可在库中选择各种图形。放置特殊节点放置特殊节点:可有原点可有原点.节点节点.标签引脚名标签引脚名.引脚号。引脚号。图形正图形正/反旋转反旋转。图形垂直图形垂直/水平翻转水平翻转。图形工具 PROTUES仿真软件的使用仿真软件的使用用Proteus仿真软件,实现单片机最小系统的简单应用。要求:P1口控制8个发光二极管LED循环点亮。电路原理图如下图所示。PROTUES仿真软件的使用仿真软件的使用(1)建立一个新的设计项目 PROTUES仿真软件的使用仿真软件的使用(2)保存设计项目 PROTUES仿真软件的使用仿真软件的使用(3)为设计项目选择电路元器件 PROTUES仿真软件的使用
23、仿真软件的使用(4)设计电路元器件的布局与连线 PROTUES仿真软件的使用仿真软件的使用(5)编辑电路原理图元件 PROTUES仿真软件的使用仿真软件的使用(6)编辑设计原理图界面 PROTUES仿真软件的使用仿真软件的使用(7)保存设计的原理图电路文件单击保存按钮,保存原理图电路文件。到此,一个完整的单片机最小系统电路原理图就设计完成了。接下来需要做的就是将在Keil C51软件中编译生成的.Hex文件添加到原理图的单片机中就可以了。PROTUES仿真软件的使用仿真软件的使用(8)为单片机添加.Hex程序文件在原理图中右键选中单片机,单击左键,在弹出的对话框中选中Program File选
24、项,再单击“打开”按钮,添加.Hex文件。保存后就可以进行电路仿真了,仿真电路如下图所示。然后根据仿真现象,不断进行源程序调试,完善设计。附:单片机常用学习网站附:单片机常用学习网站 周立功单片机(周立功单片机()武汉力源(武汉力源()中源单片机(中源单片机()嵌入开发网(嵌入开发网()5151单片机(单片机()单片机学习网(单片机学习网()单片机爱好者(单片机爱好者(www.mcufan.conwww.mcufan.con)项目二项目二 输入输入/输出功能输出功能项目描述项目描述 我们所熟悉的电脑的输入设备有键盘、鼠标、麦克风等,输出设备有显示器、音响等。如同电脑,输入/输出是单片机最基本的
25、功能,单片机最常用的输入设备为按键,最常用的输出设备为发光二极管LED、数码管以及液晶显示器LCD。本项目基于KST-51开发板,通过编程实现独立按键检测与LED灯点亮功能。输出功能输出功能点亮点亮LED灯灯2.1.1 LED2.1.1 LED灯介绍灯介绍 LED(light-emitting diode),即发光二极管,俗称LED小灯,我们板子上用的是普通的贴片发光二极管,其正向导通电压是1.8V到2.2V之间,工作电流一般在工作电流一般在1mA1mA20mA20mA之之间间。当电流在1mA5mA之间变化时,随着通过LED的电流越来越大,我们的肉眼会明显感觉到这个小灯越来越亮,而当电流从5m
26、A20mA之间变化时,我们看到的发光二极管的亮度变化就不是太明显了。当电流超过20mA时,LED就会有烧坏的危险了,电流越大,烧坏的也就越快。输出功能输出功能点亮点亮LED灯灯 LED驱动电路如下图所示。若接入的VCC电压是5V,发光二极管自身压降大概是2V,电阻两端电压U=3V,当电流是1mA的时候,电阻值是3K;当电流是20mA的时候,电阻值是150欧,也就是R34的取值范围是1503K欧姆。这个电阻我们通常称之为“限流电阻”。图中R用的是1K,可以计算出流过LED的电流大约为3mA。输出功能输出功能点亮点亮LED灯灯 将上页图变换一下,用一个单片机的IO口来驱动LED,有两种方式输出功能
27、输出功能点亮点亮LED灯灯2.1.22.1.2源程序编写源程序编写1、特殊功能寄存器和位定义 sfr P0=0 x80sfr P0=0 x80;sfr这个关键字,是51单片机特有的,他的作用是定义一个单片机特殊功能寄存器SFR(special function register)。51单片机内部有很多寄存器,如果我们想使用的话必须提前进行sfr声明。不过Keil软件已经把所有这些声明都预先写好并保存到一个专门的文件中去了,我们要用的话只要文件开头添加一行#include即可。输出功能输出功能点亮点亮LED灯灯 sbit LED=P00;这个sbit用来定义寄存器或者变量中的某一位。经过上边语句
28、后,以后只要在程序里写LED,就代表了P0.0口,注意这个P必须大写,也就是说我们给P0.0又取了一个更形象的名字叫做LED。输出功能输出功能点亮点亮LED灯灯2、程序编写(用C语言编写程序点亮LED灯)#include /包含特殊功能寄存器定义的头文件sbit LED=P10;/位地址声明,注意:sbit必须小写、P大写!void main()/任何一个C程序都必须有且仅有一个main函数 /是成对存在的,在这里表示函数的起始和结束LED=0;/分号表示一条语句结束逻辑上来看,程序这样写就可以了,但是在实际单片机应用中,存在一个问题。比如我们的程序空间可以容纳100行代码,但是我们实际上的程
29、序只用了50行代码,当运行完了50行,再继续运行时,第51行的程序不是我们想运行的程序,而是不确定的未知内容,一旦执行下去程序就会出错从而可能导致单片机自动复位。输出功能输出功能点亮点亮LED灯灯通常在程序中加入一个死循环,让程序停留在我们希望的这个状态下,不要乱运行,有以下两种写法可以参考:参考程序一:参考程序二:#include#include sbit LED=P00;sbit LED=P00;void main()void main()while(1)LED=0;while(1);LED=0;理论上这两个程序都能点亮LED小灯,但是下载到开发板以后板子上的LED等并没亮,为什么呢?输出
30、功能输出功能点亮点亮LED灯灯我们做单片机编程,实际上算是硬件底层驱动程序开发,这种程序的开发,是离不开电路图的,必须根据必须根据硬硬件件电路图来进电路图来进行程序的编写行程序的编写。输出功能输出功能点亮点亮LED灯灯分析电路可知:若要点亮LED2,必须使得DB0端口(通过锁存器74HC245连接至单片机P0.0端口)输出低电平,同时Q16三极管9012导通,即LEDS6端口输出低电平,而LEDS6接至74HC138的Y6端,Y6端输出低电平的条件是74HC138正常工作(E1、E2端为低电平,E3端为高电平)且A2A1A0端口电平分别为1、1、0,因此,程序初始化时应将ENLED置0,ADD
31、R3置1,ADDR2置1,ADDR1置1,ADDR0置0。输出功能输出功能点亮点亮LED灯灯#include /包含特殊功能寄存器定义的头文件sbit LED=P00;/位地址声明,注意:sbit必须小写、P大写!sbit ADDR0=P10;sbit ADDR1=P11;sbit ADDR2=P12;sbit ADDR3=P13;sbit ENLED=P14;void main()ENLED=0;ADDR3=1;ADDR2=1;ADDR1=1;ADDR0=0;LED=0;/点亮小灯while(1);/程序停止在这里输出功能输出功能点亮点亮LED灯灯3、程序下载首先,我们要把硬件连接好,把板子
32、插到电脑上,打开设备管理器查看所使用的是哪个COM口,如左图所示,找到“USB-SERIAL CH340(COM3)”这一项,这里最后的数字就是开发板目前所使用的COM端口号。注意要先在电脑上安装USB转串口的驱动程序以后才能看到相应的COM端口,否则如右图所示,将无法下载程序。输出功能输出功能点亮点亮LED灯灯打开STC系列单片的下载软件STC-ISP输出功能输出功能点亮点亮LED灯灯下载软件列出了5个步骤:选择单片机型号,我们现在用的单片机型号是STC89C52RC点击“打开程序文件”,找到我们刚才建立工程文件夹,找到步骤二编译所生成的hex文件LED.hex,点击打开;选择刚才查到的CO
33、M口,波特率使用默认的就行;这里的所有选项都使用默认设置,不要随便更改,有的选项改错了以后可能会产生麻烦。因为STC单片机要冷启动下载,就是先点下载,然后再给单片机上电,所以我们先关闭板子上的电源开关,然后点击“Download/下载”按钮,等待软件提示你请上电后,然后再按下板子的电源开关,就可以将程序下载到单片机里边了。当软件显示“已加密”就表示程序下载成功了。输入功能输入功能按键检测按键检测2.2.1 2.2.1 键盘介绍键盘介绍 在单片机应用系统中,键盘主要用于向计算机输入数据、传送命令等,是人工干预计算机的主要手段。键盘要通过接口与单片机相连,分为编码键盘编码键盘和非编码键盘非编码键盘
34、两类。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。而靠软件编程来识别的称为非编码键盘,在单片机组成的各种系统中,使用最广泛的是非编码键盘。当然,也有用到编码键盘的。非编码键盘有分为:独立键盘和行列式(又称为矩阵式)键盘。输入功能输入功能按键检测按键检测 独立键盘每个键相互独立,各自与一条独立键盘每个键相互独立,各自与一条I/OI/O线相连线相连,CPU可直接读取该I/O线的高/低电平状态。其优点是硬件、软件结构简单,判键速度快,使用方便;缺点是占I/O口线多。多用于设置控制键、功能键。适用于键数少的场合。输入功能输入功能按键检测按键检测 矩阵键盘
35、的键按矩阵排列,各键处于行/列的结点处,CPU通过对连在行(列)的I/O线送已知电平的信号,然后读取列(行)线的状态信息。逐线扫描,得出键码。其特点是键多时占用I/O口线少,硬件资源利用合理,但判键速度慢。多用于设置数字键,适用于键数多的场合。输入功能输入功能按键检测按键检测 在2.1节中,IO口作为输出口时,只需要在程序中将P0.0端口设为低电平即可点亮LED灯,将P0.0端口设为高电平即可熄灭LED灯。STC89C52单片机的输入功能比输出功能稍微复杂一些,在使用之前需进行一些设置,否则有可能无法准确识别输入端口电平!(1)P0口口 P0口为双向三态输入/输出口,P0P0口既可作为地口既可
36、作为地址址/数据总线口,又可作为通用数据总线口,又可作为通用I/OI/O口口,作通用I/O口时,P0口只是一个准双向口,需要在外部引脚处外需要在外部引脚处外接上拉电阻接上拉电阻。VCC作输入口使用时必须先给锁存器置作输入口使用时必须先给锁存器置1 1!Q(2)P2(2)P2口口 P2P2口口常常用用做做外外部部存存储储器器的的高高8 8位位地地址址口口。当不用做地址口时,P2P2口口也也可可作作为为通通用用I/OI/O口口,这时它也是一个准双向I/O口,即即作作输输入入口口使使用用时时必必须须先先给给锁锁存存器器置置1 1。不必外接上拉电阻就可以驱动任何MOS驱动电路。(3)P1(3)P1口口
37、 P1P1口常用做通用口常用做通用I/OI/O口口,它也是一个标准的准双向I/O口,不必外接上拉电阻就可以驱动任何MOS驱动电路。P1口的位结构如下图所示。(4)P3(4)P3口口 P3P3口口是一个双功能口,第一功能与P1口一样可用做通用I/O口,也是一个准准双双向向I/OI/O口口。另外还具具有有第第二二功功能能。P3口工作在第二功能时各管脚定义如下表所示。P3口的位结构图如右图所示。引脚功能引脚信号名称P3.0串行数据接收口(RXD)P3.4定时器/计数器0的外部输入口(T0)P3.1串行数据发送口(TXD)P3.5定时器/计数器1的外部输入口(T1)P3.2外部中断0(INT0)P3.
38、6外部RAM写选通信号(WR)P3.3外部中断1(INT1)P3.7外部RAM读选通信号(RD)输入功能输入功能按键检测按键检测 分析IO口电路就可以得出一个结论,这种具有上拉的准双向IO口,如果要正常读取外部信号的状态,必须首先得保证自己内部输出的是1,如果内部输出0,则无论外部信号是1还是0,这个引脚读进来的都是0。因此,输入数据时,应先向输入数据时,应先向端端口写口写1 1,使场效应管截止,然后方可作为输入。(注:P0P0口作为口作为通用通用IOIO口使用时需加上拉电阻口使用时需加上拉电阻,其他IO口内部有上拉电阻,不需外接上拉电阻)输入功能输入功能按键检测按键检测2.2.2 独立按键扫
39、描独立按键扫描单独的按键扫描程序执行后看不到任何现象,为了有个直观的效果,我们可以将之前的点亮LED灯的程序加进来,当K1键按下时点亮一个LED灯(如板子最右侧的LED2)。1、构建独立按键若要将K1变为独立按键,只需KeyOut1端接地即可,因此,只要将单片机的将单片机的P2.3 P2.3(KeyOut1接至P2.3端口)端口输出低电平端口输出低电平,就可以将K1看成是一个独立按键。输入功能输入功能按键检测按键检测2、独立式按键的软件设计开 始初始化按键是否按下?延时去抖点亮LEDYN输入功能输入功能按键检测按键检测3、按键消抖在键盘的软件设计中还要注意按键的去抖动问题。由于按键一般是由机械
40、式触点构成的,在按键按下和断开的瞬间均有一个抖动过程,时间大约为5ms10ms,可能会造成单片机对按键的误识别。按键消抖一般有两种方法,即硬件消抖和软件消抖。软件消抖方式经济实惠,且操作简单,因此应用广泛。在软件设计中,当单片机检测到有键按下时,可以先延时一段时间越过抖动过程再对按键识别。输入功能输入功能按键检测按键检测实际应用中,一般希望按键一次按下单片机只处理一次,但由于单片机执行程序的速度很快,按键一次按下可能被单片机多次处理。为避免此问题,可在按键第一次按下时延时10ms之后再次检测按键是否按下,如果此时按键仍然按下,则确定有按键输入。这样便可以避免按键的重复处理。输入功能输入功能按键
41、检测按键检测2.2.3源程序编写源程序编写#include/包含特殊功能寄存器定义的头文件sbit LED0=P00;/位地址声明sbit ADDR0=P10;sbit ADDR1=P11;sbit ADDR2=P12;sbit ADDR3=P13;sbit ENLED=P14;sbit KeyIn1=P24;sbit KeyOut1=P23;void delay10ms(void)/延时10ms 子函数 unsigned char i,k;/变量定义for(i=20;i0;i-)/for语句循环体 for(k=250;k0;k-);输入功能输入功能按键检测按键检测void main()/主程
42、序KeyIn1=1;/向输入端口写1,为输入做准备KeyOut1=0;/将K1作为独立按键使用ENLED=0;ADDR3=1;ADDR2=1;ADDR1=1;ADDR0=0;while(1)if(KeyIn1=0)/判断K1键是否按下 输入功能输入功能按键检测按键检测delay10ms();/延时去抖if(KeyIn1=0)while(KeyIn1=0);/等待按键释放LED0=0;/点亮LED灯 程序写完以后,按照Keil写程序的过程,建立工程-保存工程-建立文件-添加文件到工程-编写程序-编译-下载程序。程序下载完成以后,可以发现,按K1键,松开以后开发板上最右侧的LED灯(LED2)点亮
43、。项目三项目三 数码管基础与数码管基础与矩阵键盘扫描矩阵键盘扫描项目描述项目描述单片机项目开发过程中经常要用到“09”的数字显示,如:显示实时时钟、显示检测到的温度、电压等。数码管是实现“09”的数字显示的最简单的元件,其结构简单、价格便宜、驱动程序编写容易,因此得到广泛应用。本项目通过编程扫描44矩阵键盘,并将键值编号(0F)显示在数码管上。数码管基础数码管基础3.1.1 3.1.1 数码管的基本介绍数码管的基本介绍 七段LED数码管显示器能够显示十进制或十六进制数字及某些简单字符。从原理图可以看出数码管共有a、b、c、d、e、f、g、dp这么8个段,而实际上,这8个段每一段都是一个LED小
44、灯,所以一个数码管就是由8个LED小灯组成的。数码管基础数码管基础从开发板的电路图上能看出来,我们所用的数码管都是共阳数码管,一共有6个。6个数码管的com都是接到了正极上,由74HC138控制三极管的导通来控制整个数码管的使能。先来看最右边的DS1这个数码管,原理图上可以看出,控制DS1的三极管是Q17,控制Q17的引脚是LEDS0,对应到74HC138上边就是U3的Y0输出。数码管基础数码管基础数码管基础数码管基础要最右边的DS1数码管亮,LEDS0这个引脚必须输出低电平,由上图分析可知ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;ENLED=0.数码管通常是用来显示数字
45、的,我们板子上有6个数码管,习惯上称之为6位,那控制位选择的就是74HC138了。而数码管内部的8个LED小灯我们称之为数码管的段,那么数码管的段选择(即该段的亮灭)是通过P0口控制,经过74HC245驱动。数码管基础数码管基础3.1.2 3.1.2 数码管真值表数码管真值表 数码管的8个段,我们直接当成8个LED小灯来控制,那就是a、b、c、d、e、f、g、dp一共8个LED小灯。我们通过原理图可以看出,如果点亮b和c这两个LED小灯,也就是数码管的b段和c段,其他的所有的段都熄灭的话,就可以让数码管显示出一个数字1,那么这个时候实际上P0的值就是0b11111001,十六进制就是0 xF9
46、。数码管基础数码管基础用同样的方法,我们可以把其他的数字字符列出来,如下表所示,称为数码管真值表。思考:如果是共阴数码管,其真值表应如何列?数码管基础数码管基础#include sbit ADDR0=P10;sbit ADDR1=P11;sbit ADDR2=P12;sbit ADDR3=P13;sbit ENLED=P14;void main()ENLED=0;/使能U3,选择数码管DS1ADDR3=1;ADDR2=0;ADDR1=0;ADDR0=0;P0=0 xF9;/点亮数码管段b和cwhile(1);把上面这个程序编译一下,并下载到单片机中,就可以看到程序运行的结果是在最右侧的数码管上
47、显示了一个数字1。数码管基础数码管基础3.1.3 3.1.3 数码管的静态显示数码管的静态显示LED数码管显示器的工作方式:静态静态和动态动态两种显示方式。静态显示方式各数码管在显示过程中持续得到送显信号,与各数码管接口的I/O口线是专用的。其特点是显示稳定,无闪烁,用元器件多,占I/O线多,无须扫描。系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,节省CPU时间,提高CPU的工作效率,编程简单。动态显示方式是指一位一位地轮流点亮每位显示器,与各数码管接口的I/O口线是共用的。其特点是有闪烁,用元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂。STC89C52P0
48、.0P0.7P1.0P1.7P2.0P2.7静态显示方式电路静态显示方式电路动态显示方式驱动电路动态显示方式驱动电路数码管基础数码管基础静态显示如同74HC138在同一时刻只能让一个输出口为低电平,也就是说在一个时刻内,我们只能使能一个数码管,并根据我们给出的P0的值来改变这个数码管的显示字符,我们可以将此理解为数码管的静态显示。数码管静态显示是对应动态显示而言的,静态显示对于一两个数码管还行,多个数码管,静态显示实现的意义就没有了。下面我们编程实现数码管静态循环显示字符0F。数码管基础数码管基础先介绍一个51单片机的关键字code。前面定义变量时,一般用到unsigned char或者uns
49、igned int这两个关键字,这样定义的变量都是放在单片机的RAM中,我们在程序中可以随意去改变这些变量的值。但是还有一种数据,在程序中要使用,但是却不会改变它的值,定义这种数据时可以加一个codecode关关键字键字修饰一下,这个数据就会存储到程序空间Flash中,这样可以大大节省单片机的RAM的使用量,毕竟单片机RAM空间比较小,而程序空间则大的多。那么现在要使用的数码管真值表,我们只会使用它们的值,而不需要改变它们,就可以用code关键字把它放入Flash中了。数码管基础数码管基础#include sbit ADDR0=P10;sbit ADDR1=P11;sbit ADDR2=P12
50、;sbit ADDR3=P13;sbit ENLED=P14;/用数组来存储数码管的真值表unsigned char code LedChar=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90,0 x88,0 x83,0 xC6,0 xA1,0 x86,0 x8E;void delay()/软件延时子程序unsigned int i,k;for(i=200;i0;i-)for(k=250;k0;k-);数码管基础数码管基础void main()unsigned cnt=0;/定义变量,用于控制循环显示ENLED=0;/使能U