资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单片机原理及应用项目化教程(,C,语言版),项目结构,项目一:单片机介绍,项目二:输入,/,输出功能,项目三:数码管基础与矩阵键盘扫描,项目四:定时器与数码管动态显示,项目五:外部中断与串行通信,项目六:,LCD1602,显示原理及实现,项目七:,I,2,C,总线与,EEPROM,项目八:,DS18B20,与,蜂鸣器,项目九:,A/D,与,D/A,转换,项目十:,实时时钟,DS1302,项目十一:,红外通信与步进电机,项目一:单片机介绍,单片机最小系统,单片机开发系统软件介绍,Proteus,仿真软件的使用,单片机介绍,1.1.1,单片机的基本概念,单片微型计算机,(Single-Chip Microcomputer),,,简称单片机,是将,微处理器,(CPU),、,存储器,(,存放程,序或数据的,ROM,和,RAM),、,总线,、,定时器,/,计数器,、,输,入,/,输出接口,(I/O,口,),和其他多种功能器件集成在一,块芯片上的微型计算机。由于单片机的重要应用领域,为智能化电子产品,一般需要嵌入仪器设备内,故又,称为,嵌入式微控制器,(,Embedded Microcontroller,),。,单片机介绍,单片机的主要特点如下:,(,1,)可靠性高;,(,2,)便于扩展;,(,3,)控制功能强;,(,4,)低功耗、低电压;,(,5,)易于嵌入、发展迅速、应用广泛,单片机介绍,1.1.2,单片机的应用领域,(,1,),工业控制与检测,(,2,),智能仪器仪表,(,3,),消费类电子产品,(,4,),网络和通信,(,5,),设备领域,(,6,),武器装备,(,7,),汽车电子,此外,,单片机,在工商、金融、科研、教育、电力、通,信、物流和国防航空航天等领域都有着十分广泛的用途。,单片机介绍,1.1.3,单片机有哪些系列,单片机,种类繁多,一般常用的有以下几种:,(,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,引脚数量,,AD,或,DA,通道数量及转换样精度等;,(2),单片机的,增强功能,,例如看门狗,,RTC,,,EEPROM,,扩展,RAM,,,CAN,总线接口,,I,2,C,接口,,SPI,接口等。,(3)Flash,和,OTP(,一次性可编程,),相比较,最好是,Flash,。,(4),封装,,一般来说贴片的比直插的体积小,抗干扰性强,但是价格要贵一些。,单片机介绍,(5),工作温度范围,工业级还是商业级,如果设计户外产品,必须选用,工业级,。,(6),工作电压范围,,例如设计电视机遥控器,,2,节干电池供电,至少应该能在,1.8,3.6V,电压范围内工作。,(7),功耗,,能够满足设计要求的前提下功耗越低越好。,(8),性价比高,。,(9),供货渠道畅通,,尽量选用市场上容易购买到的单片机。,(10),有服务商,,像,Microchip,公司推,PIC,,周立功公司推,Philips,,双龙公司推,AVR,,都提供了很多有用的技术资料,起码烧写器有地方买。,单片机介绍,1.1.5 MCS-51,单片机识读,1,、,MCS-51,单片机内部结构,MCS-51,单片机由,中央处理器,(CPU),、,程序存储器,(,ROM/EPROM,)、,数据存储器,(,RAM,)、,定时,/,计数器,、,I/O,接口,、,中断系统,等组成。,内部中断,外部中断,CPU,振荡器,基准时钟源,4KB ROM,256B RAM,总线控制扩展,I/O,串行口,2,个,16,位的,TC,控制,并行,I/O,串行输入,串行输出,计数器,8051,的结构框图,内部结构如下,:,运算器,控制器,CPU,128,字节的,RAM,,作用是存放运算的中间结果以及数据暂存。,00H7FH,4K,程序存储区,地址从,0000H,开始,用于存放程序代码和表格数据,2,个,16,位的定时计数器,4,个,IO,(,P0,P1,P2,P3,共,32,线,),口与外界交换信息,1.2MHz12MHz,一个全双工的串口,UART,5,个中断源,三个内部,二个外部,单片机介绍,2,、引脚功能说明,DIP,引脚图 逻辑符号,单片机介绍,电源引脚,(2,根,),V,CC,(40,脚,),:电源端,接,+5V,电源。,V,SS,(20,脚,),:接地端。,I/O,引脚,(4,8=32,根,),控制引脚,(,6,根,),时钟电路引脚,XTAL1,(,19,脚),和,XTAL2,(,18,脚),XTAL1,:接外部晶振和微调电容的一端,在片内它是振荡器倒,相放大器的输入,若使用外部,TTL,时钟时,该引脚必须接地。,XTAL2,:接外部晶振和微调电容的另一端,在片内它是振荡器,倒相放大器的输出,若使用外部,TTL,时钟时,该引脚为外部时,钟的输入端。,单片机介绍,ALE/PROG,(30,脚,),:地址锁存允许信号输出当,CPU,访问片外存,储器时,,ALE,输出信号,控制锁存,P0,口输出的低,8,位地址,,从而,实现,P0,口数据与低位地址的分时复用。,EA/V,PP,(31,脚,),:外部程序存储器地址允许输入端。,当为高电,平时,,CPU,执行片内程序存储器指令,但当,PC,中的值超过,0FFFH,时,将自动转向执行片外程序存储器指令。当为低,电平时,,CPU,只执行片外程序存储器指令。,PSEN,(32脚):外部程序存储器读选通信号。是读外部程序,存储器的选通信号,低电平有效。,RST,(,9,脚):复位信号输入端。该信号高电平有效,在输入,端保持,两个机器周期的高电平后,,就可以完成复位操作。,单片机介绍,1.1.6,单片机最小系统的组成,所谓单片机最小系统,是指用最少的元件能使单片机工作,起来的一个最基本的组成电路。对,51,系列单片机来说,最小,系统一般应该包括:,电源,、,晶振电路,、,复位电路,等。同时单,片机要正常运行,还必须具备,电源正常,、,时钟正常,、,复位正,常,三个基本条件。,单片机介绍,(,1,),电源,电源是单片机工作的动力源泉。我们所选用的,STC89C52,,,它需要,5V,的供电系统,我们的开发板是使用,USB,口输出的,5V,直流直接供电的。供电电路在,40,脚和,20,脚的位置上,,40,脚,接的是,+5V,,通常也称为,VCC,或,VDD,,代表的是电源正极,,20,脚接的是,GND,,代表的是电源的负极。,(,2,),时钟电路,时钟电路为单片机产生时序脉冲,单片机所有运算与控制过,程都是在统一的时序脉冲的驱动下进行的。,STC89C52,单片,机的,18,脚和,19,脚是晶振引脚,我们接一个,11.0592MHz,的晶,振,(,它每秒振荡,11059200,次,),,外加两个,20pF,的电容,电容的,作用是帮助晶振起振,并维持振荡信号的稳定。,单片机介绍,(,3,),复位电路,在复位引脚(,9,脚)脚持续出现,24,个振荡器脉冲周期,(即,2,个机器周期)的,高电平,信号将使单片机复位,此时,一些专,用寄存器的状态值将恢复为初始值。单片机复位一般是,3,种,情况:上电复位、手动复位、程序自动复位。,(,a,)上电复位电路,(,b,)按键复位电路,单片机介绍,复位后,各特殊功能寄存器初始状态,寄存器,状态,寄存器,状态,PC,0000H,TCON,00H,ACC,00H,TL0,00H,PSW,00H,TH0,00H,SP,07H,TL1,00H,DPTR,0000H,TH1,00H,P0-P3,FFH,SCON,00H,IP,xxx00000H,SBUF,不确定,IE,0 xx00000H,PCON,0 xxx0000H,TMOD,00H,单片机开发系统软件介绍,单片机开发,首要的两个软件一个是编程软件,一个是下,载软件。编程软件我们用,Keil uVision,的,51,版本,也叫,Keil,C51,,,Keil C51,集编辑,编译,仿真于一体,,支持汇编、,PLM,语言和,C,语言的程序设计,界面友好,易学易用。在,51,系列单片机的学习与开发过程中,,keil C51,软件的使用为,程序设计开发提供了一个高效率的平台。,单片机开发系统软件介绍,单片机开发系统软件介绍,用,keil C51,软件编辑编译一段,C,程序,实现打印的,Keil 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),保存工程项目,单片机开发系统软件介绍,(3),为工程项目选择单片机型号,单片机开发系统软件介绍,(4),新建源程序文件,单片机开发系统软件介绍,(5),保存源程序文件,单片机开发系统软件介绍,(6),为工程项目添加源程序文件,单片机开发系统软件介绍,(7),输入源程序文件,单片机开发系统软件介绍,(8),编译源程序,单片机开发系统软件介绍,(9),调试源程序,单片机开发系统软件介绍,(10),查看分析结果,单片机开发系统软件介绍,(,11,)生成,Hex,代码文件,Protues,仿真软件的使用,Proteus ISIS,是英国,Labcenter,公司开发的电路分析与实,物仿真软件。它运行于,Windows,操作系统上,,可以仿真、,分析,(SPICE),各种模拟器件和集成电路,。在,51,系列单片机,的学习与开发过程中,,keil C51,软件是程序设计开发的平台,,不能直接的进行单片机的硬件仿真。如果将,keil C51,软件,和,Proteus,软件有机结合起来,那么,51,系列单片机的设计与,开发将在软硬件仿真上得到完美的结合。,主页,ISIS,ARES,3D,浏览,Proteus 8.0 Professional,的,主页界面,元件清单,关于,Proteus 8.0,帮助,信息,简介,PCB,设计,模拟,入门指导,新版本,等,打开设计图,/,新建设计图,最近,的,设计图,主页,文件,(F),编辑,(E),浏览,(V),工具,(T),设计,(D),绘图,(G),除错,(D),库,(L),模板,(T),系统,(S),帮助,(H),Proteus,中,ISIS,的,主窗口示意图,ISIS,通用工具菜单,专用工具,菜单,电路编辑窗口,坐标原点,浏览窗口,器件工具列表窗口,ARES,电气,规则,检查,主菜单,交互仿真按键,元件清单,点击鼠标,:,点击此键可取消左键的放置功能,但可编辑对象。,选择元器件,:,在元件表选中器件,在编辑窗中移动鼠标,点击左键放置,标注联接点,:,当两条连线交叉时,放个接点表示连通。,标志网络线标号,:,电路联线可用网络标号代替,相同标号的线是相同的。,放置文本说明,:,是对电路的说明,与电路仿真无关,!,放置总线,:,当多线并行简化联线,用总线标示。,放置器件引脚,:,有普通,.,反相,.,正时钟,.,反时钟,.,短引脚,.,总线。,放置图纸内部终端,:,有普通,.,输入,.,输出,.,双向,.,电源,.,接地,.,总线。,放置子电路,:,可将部分电路以子电路形式画在另一图纸上。,编,辑,工,具,放置分析图,:,有模拟,.,数字,.,混合,.,频率特性,.,传输特,性,.,噪声分析等。,放置录放音设置,:,放置电源,.,信号源,:,有直流电源,正弦信号源,脉冲,信号源等。,放置电压电流探针,:,显示网络线上的电压或串联,在指定的网络线上显示电流值。,放置虚拟仪器,:,有示波器,.,计数器,.RS232,终端,.SPI,调,试器,.I2C,调试器,.,信号发生器,.,图形发生器,.,直流,电压表,.,直流电流表,交流电压表,.,交流电流表。,调,试,工,具,放置各种线,:,有器件,.,引脚,.,端口,.,图形线,.,总线等。,放置矩形框,:,移动鼠标到框的一角,按下左键拖动,释放后完成。,放置圆形框,:,移动鼠标到圆心,按左键拖动,释放后完成。,放置圆弧线,:,鼠标移到起点,按下左键拖动,释放后调整弧长,点击鼠,标完成。,画闭合多边形,:,鼠标移到起点,点击产生折点,闭合后完成。,放置文字标签,:,在编辑框放置说明文本标签。,放置特殊图形,:,可在库中选择各种图形。,放置特殊节点,:,可有原点,.,节点,.,标签引脚名,.,引脚号。,图形正,/,反旋转,。,图形垂直,/,水平翻转,。,图,形,工,具,Protues,仿真软件的使用,用,Proteus,仿真软件,实现单片机最小系统的简单应用。要,求:,P1,口控制,8,个发光二极管,LED,循环点亮。电路原理图如,下,图所示。,Protues,仿真软件的使用,(,1,),建立一个新的设计项目,Protues,仿真软件的使用,(,2,),保存设计项目,Protues,仿真软件的使用,(,3,),为设计项目选择电路元器件,Protues,仿真软件的使用,(,4,),设计电路元器件的布局与连线,Protues,仿真软件的使用,(,5,),编辑电路原理图元件,Protues,仿真软件的使用,(,6,),编辑设计原理图界面,Protues,仿真软件的使用,(,7,),保存设计的原理图电路文件,单击,保存按钮,,保存原理图电路文件。,到此,一个完整的单片机最小系统电路原理图就设计完成,了。接下来需要做的就是将在,Keil C51,软件中编译生成的,.Hex,文件添加到原理图的单片机中就可以了。,Protues,仿真软件的使用,(,8,),为单片机添加,.Hex,程序文件,在原理图中右键选中单片机,单击左键,在弹出的对话框,中选中,Program File,选项,再单击“,打开,”,按钮,,添加,.Hex,文件。保存后就可以进行电路仿真了,仿真电路如,下,图所,示。然后根据仿真现象,不断进行源程序调试,完善设计。,项目二 输入,/,输出功能,项目描述,我们所熟悉的电脑的输入设备有键盘、鼠标、麦克风等,,输出设备有显示器、音响等。如同电脑,输入,/,输出是单片,机最基本的功能,单片机最常用的输入设备为按键,最常,用的输出设备为发光二极管,LED,、数码管以及液晶显示器,LCD,。本项目基于,KST-51,开发板,通过编程实现独立按,键检测与,LED,灯点亮功能。,输出功能点亮,LED,灯,2.1.1 LED,灯介绍,LED(light-emitting diode),,即发光二极管,俗称,LED,小,灯,我们板子上用的是普通的贴片发光二极管,,其,正向导,通电压是,1.8V,到,2.2V,之间,,工作电流一般在,1mA,20mA,之,间,。当电流在,1mA,5mA,之间变化时,随着通过,LED,的电,流越来越大,我们的肉眼会明显感觉到这个小灯越来越亮,,而当电流从,5mA,20mA,之间变化时,我们看到的发光二,极管的亮度变化就不是太明显了。当电流超过,20mA,时,,LED,就会有烧坏的危险了,电流越大,烧坏的也就越快。,输出功能点亮,LED,灯,LED,驱动电路如,下,图所示。若接入的,VCC,电压是,5V,,发,光二极管自身压降大概是,2V,,,电阻两端电压,U=3V,,当电流,是,1mA,的时候,电阻值是,3K,;当电流是,20mA,的时候,电阻,值是,150,欧,也就是,R34,的取值范围是,1503K,欧姆。这个电,阻我们通常称之为,“,限流电阻,”,。,图中,R,用的是,1K,,可以计算,出流过,LED,的电流大约为,3mA,。,输出功能点亮,LED,灯,将,上页图,变换一下,用一个单片机的,IO,口来驱动,LED,,,有两种方式,输出功能点亮,LED,灯,2.1.2,源程序编写,1,、特殊功能寄存器和位定义,sfr P0=0 x80,;,sfr,这个关键字,是,51,单片机特有的,他的作用是定义一个,单片机特殊功能寄存器,SFR(special function register),。,51,单片机,内部有很多寄存器,如果我们想使用的话必须提前进行,sfr,声,明。不过,Keil,软件已经把所有这些声明都预先写好并保存到,一个专门的文件中去了,我们要用的话只要文件开头添加一,行,#include,即可。,输出功能点亮,LED,灯,sbit LED=P00;,这个,sbit,用来定义寄存器或者变量中的某一位,。经过上边,语句后,以后只要在程序里写,LED,,就代表了,P0.0,口,注,意这个,P,必须大写,也就是说我们给,P0.0,又取了一个更形,象的名字叫做,LED,。,输出功能点亮,LED,灯,2,、程序编写,(,用,C,语言编写程序点亮,LED,灯,),#include /,包含特殊功能寄存器定义的头文件,sbit LED=P10;/,位地址声明,注意:,sbit,必须小写、,P,大写!,void main()/,任何一个,C,程序都必须有且仅有一个,main,函数,/,是成对存在的,在这里表示函数的起始和结束,LED=0;/,分号表示一条语句结束,逻辑上来看,程序这样写就可以了,但是在实际单片机应用,中,存在一个问题。比如我们的程序空间可以容纳,100,行代,码,但是我们实际上的程序只用了,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,等并没亮,为什么呢?,输出功能点亮,LED,灯,我们做单片,机编程,实际,上算是硬件底,层驱动程序开,发,这种程序,的开发,是离,不开电路图的,,,必须根据,硬,件,电路图来进,行程序的编写,。,输出功能点亮,LED,灯,分析,电路,可知:若要点亮,LED2,,必须使得,DB0,端口,(,通过,锁存器,74HC245,连接至单片机,P0.0,端口,),输出低电平,同时,Q16,三极管,9012,导通,即,LEDS6,端口输出低电平,而,LEDS6,接,至,74HC138,的,Y6,端,,Y6,端输出低电平的条件是,74HC138,正常工,作,(E1,、,E2,端为低电平,,E3,端为高电平,),且,A2A1A0,端口电平分,别为,1,、,1,、,0,,因此,程序初始化时应将,ENLED,置,0,,,ADDR3,置,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,、程序下载,首先,我们要把硬件连接好,把板子插到电脑上,打开设,备管理器查看所使用的是哪个,COM,口,如,左,图所示,找到,“,USB-SERIAL CH340(COM3),”,这一项,这里最后的数字就,是开发板目前所使用的,COM,端口号。注意要先在电脑上安装,USB,转串口的驱动程序以后才能看到相应的,COM,端口,否则,如,右,图所示,将无法下载程序。,输出功能点亮,LED,灯,打开,STC,系列单片的下载软件,STC-ISP,输出功能点亮,LED,灯,下载软件列出了,5,个步骤:,选择单片机型号,我们现在用的单片机型号是,STC89C52RC,点击,“,打开程序文件,”,,找到我们刚才建立工程文件夹,,找到步骤二编译所生成的,hex,文件,LED.hex,,点击打开;,选择刚才查到的,COM,口,波特率使用默认的就行;,这里的所有选项都使用默认设置,不要随便更改,有的选,项改错了以后可能会产生麻烦。,因为,STC,单片机要冷启动下载,就是先点下载,然后再给,单片机上电,所以我们先关闭板子上的电源开关,然后点击,“,Download/,下载,”,按钮,等待软件提示你请上电后,然后再,按下板子的电源开关,就可以将程序下载到单片机里边了。,当软件显示,“,已加密,”,就表示程序下载成功了。,输入功能,按键检测,2.2.1,键盘介绍,在单片机应用系统中,键盘主要用于向计算机输入数据、,传送命令等,是人工干预计算机的主要手段。键盘要通过接,口与单片机相连,分为,编码键盘,和,非编码键盘,两类。,键盘上闭合键的识别由专用的硬件编码器实现,并产生键,编码号或键值的称为编码键盘,如计算机键盘。而靠软件编,程来识别的称为非编码键盘,在单片机组成的各种系统中,,使用最广泛的是非编码键盘。当然,也有用到编码键盘的。,非编码键盘有分为:独立键盘和行列式(又称为矩阵式),键盘。,输入功能,按键检测,独立键盘每个键相互独立,各自与一条,I/O,线相连,,,CPU,可直接读取该,I/O,线的高,/,低电平状态。其优点是硬件、软件,结构简单,判键速度快,使用方便;缺点是占,I/O,口线多。多,用于设置控制键、功能键。适用于键数少的场合。,输入功能,按键检测,矩阵键盘的键按矩阵排列,各键处于行,/,列的结点处,,CPU,通过对连在行,(,列,),的,I/O,线送已知电平的信号,然后读取,列,(,行,),线的状态信息。逐线扫描,得出键码。其特点是键多时,占用,I/O,口线少,硬件资源利用合理,但判键速度慢。多用于,设置数字键,适用于键数多的场合。,输入功能,按键检测,在,2.1,节,中,,IO,口作为输出口时,只需要在程序,中将,P0.0,端口设为低电平即可点亮,LED,灯,将,P0.0,端,口设为高电平即可熄灭,LED,灯。,STC89C52,单片机的,输入功能比输出功能稍微复杂一些,在使用之前需,进行一些设置,否则有可能无法准确识别输入端口,电平!,(1)P0,口,P0,口为双向三态输入,/,输出口,,P0,口既可作为地址,/,数据总线口,又可作为通用,I/O,口,,作通用,I/O,口时,,P0,口只是一个准双向口,,需要在外部引脚处外接上拉电阻,。,VCC,作输入口使用时必须先给锁存器置,1,!,Q,(2)P2,口,P2,口常用做外部存储器的高,8,位地址口,。当不用做地址口时,,P2,口也可作为通用,I/O,口,,这时它也是一个准双向,I/O,口,,,即作输入口使用时必须先给锁存器置,1,。,不必外接上拉电阻就可以驱动任何,MOS,驱动电路。,(3)P1,口,P1,口常用做通用,I/O,口,,它也是一个标准的准双向,I/O,口,不必外接上拉电阻就可以驱动任何,MOS,驱动电路。,P1,口的位结构如下图所示。,(4)P3,口,P3,口,是一个双功能口,第一功能与,P1,口一样可用做通用,I/O,口,也是一个,准双向,I/O,口,。另外还,具有第二功能,。,P3,口工作在第二功能时各管脚定义如下表所示。,P3,口的位结构图如右图所示。,引脚,功能,引脚,信号名称,P3.0,串行数据接收口,(RXD),P3.4,定时器,/,计数器,0,的外部输入口,(T0),P3.1,串行数据发送口,(TXD),P3.5,定时器,/,计数器,1,的外部输入口,(T1),P3.2,外部中断,0(INT0),P3.6,外部,RAM,写选通信号,(WR),P3.3,外部中断,1(INT1),P3.7,外部,RAM,读选通信号,(RD),输入功能,按键检测,分析,IO,口电路,就可以得出一个结论,这种具有上,拉的准双向,IO,口,如果要正常读取外部信号的状态,,必须首先得保证自己内部输出的是,1,,如果内部,输出,0,,则无论外部信号是,1,还是,0,,这个引脚读进来,的都是,0,。因此,,输入数据时,应先向,端,口写,1,,使,场效应管截止,然后方可作为输入。,(,注:,P0,口作为,通用,IO,口使用时需加上拉电阻,,其他,IO,口内部有上,拉电阻,不需外接上拉电阻,),输入功能,按键检测,2.2.2,独立按键扫描,单独的按键扫描程序执行后看不到任何现象,为了有个直,观的效果,我们可以将之前的点亮,LED,灯的程序加进来,当,K1,键按下时点亮一个,LED,灯,(,如板子最右侧的,LED2),。,1,、,构建独立按键,若要将,K1,变为独立,按键,只需,KeyOut1,端接地即可,因此,,只要,将单片机的,P2.3,(KeyOut1,接至,P2.3,端,口,),端口输出低电平,,,就可以将,K1,看成是,一个独立按键。,输入功能,按键检测,2,、,独立式按键的软件设计,开 始,初始化,按键是否按下?,延时去抖,点亮,LED,Y,N,输入功能,按键检测,3,、,按键消抖,在键盘的软件设计中还要注意按键的去抖动问题。由于,按键一般是由机械式触点构成的,在按键按下和断开的瞬,间均有一个抖动过程,时间大约为,5ms,10ms,,可能会造,成单片机对按键的误识别。按键消抖一般有两种方法,即,硬件消抖和软件消抖,。软件消抖方式经济实惠,且操作简,单,因此应用广泛。,在软件设计中,当单片机检测到有键,按下时,可以先延时一段时间越过抖动过程再对按键识别。,输入功能,按键检测,实际应用中,一般希望按键一次按,下单片机只处理一次,但由于单片,机执行程序的速度很快,按键一次,按下可能被单片机多次处理。为避,免此问题,可在按键第一次按下时,延时,10ms,之后再次检测按键是否按,下,如果此时按键仍然按下,则确,定有按键输入。这样便可以避免按,键的重复处理。,输入功能,按键检测,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()/,主程序,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),点亮。,项目三 数码管基础与,矩阵键盘扫描,项目描述,单片机项目开发过程中经常要用到,“,09,”,的数,字显示,如:显示实时时钟、显示检测到的温度、,电压等。数码管是实现,“,09,”,的数字显示的最简,单的元件,其结构简单、价格便宜、驱动程序编写,容易,因此得到广泛应用。本项目通过编程扫描,4,4,矩阵键盘,并将键值编号,(0F),显示在数码管,上。,数码管基础,3.1.1,数码管的基本介绍,七段,LED,数码管显示器能够显示十进制或十六进制数字及,某些简单字符。,从,原理,图可以看出数码管共有,a,、,b,、,c,、,d,、,e,、,f,、,g,、,dp,这么,8,个段,而实际上,这,8,个段每一段都是一个,LED,小灯,所以一个数码管就是由,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.,数码管通常是用来,显示数字的,我们板子上有,6,个数码管,习惯上称之,为,6,位,那控制位选择的就是,74HC138,了。而数码管,内部的,8,个,LED,小灯我们称之为数码管的段,那么数,码管的段选择(即该段的亮灭)是通过,P0,口控制,,经过,74HC245,驱动。,数码管基础,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,。,数码管基础,用同样的方法,我们可以把其他的数字字符,列出来,如下,表所示,称为数码管真值表。,思考:如果是共阴数码管,其真值表应如何列?,?,数码管基础,#include,sbit ADDR0=P10;,sbit ADDR1=P11;,sbit ADDR2=P12;,sbit ADDR3=P13;,sbit ENLED=P14;,void main(),ENLED=0;/,使能,U3,,选择数码管,DS1,ADDR3=1;,ADDR2=0;,ADDR1=0;,ADDR0=0;,P0=0 xF9;/,点亮数码管段,b,和,c,while(1);,把上面这个程序编译一下,并下载到单片机中,就可以看,到程序运行的结果是在最右侧的数码管上显示了一个数字,1,。,数码管基础,3.1.3,数码管的静态显示,LED,数码管显示器的工作方式:,静态,和,动态,两种显示方式。,静态显示方式各数码管在显示过程中持续得到送显信号,,与各数码管接口的,I/O,口线是专用的。其特点是显示稳定,,无闪烁,用元器件多,占,I/O,线多,无须扫描。系统运行过,程中,在需要更新显示内容时,,CPU,才去执行显示更新子程,序,节省,CPU,时间,提高,CPU,的工作效率,编程简单。,动态显示方式是指一位一位地轮流点亮每位显示器,与各,数码管接口的,I/O,口线是共用的。其特点是有闪烁,用元器,件少,占,I/O,线少,必须扫描,花费,CPU,时间,编程复杂。,STC89C52,P0.0 P0.7,P1.0 P1.7,P2.0 P2.7,静态显示方式电路,动态显示方式驱动电路,数码管基础,静态显示如同,74HC138,在同一时刻只能让一个输,出口为低电平,也就是说在一个时刻内,我们只能,使能一个数码管,并根据我们给出的,P0,的值来改变,这个数码管的显示字符,我们可以将此理解为数码,管的静态显示。数码管静态显示是对应动态显示而,言的,静态显示对于一两个数码管还行,多个数码,管,静态显示实现的意义就没有了。,下面,我们,编程,实现,数码管静态,循环,显示,字符,0F,。,数码管基础,先介绍一个,51,单片机的关键字,code,。前面定义变量时,一,般用到,unsigned char,或者,unsigned int,这两个关键字,这样定义,的变量都是放在单片机的,RAM,中,我们在程序中可以随意去,改变这些变量的值。但是还有一种数据,在程序中要使用,,但是却不会改变它的值,定义这种数据时可以加一个,code,关,键字,修饰一下,这个数据就会存储到程序空间,Flash,中,这样,可以大大节省单片机的,RA
展开阅读全文