版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务一单片机AT89S51基本结构尊道贵德笃学尚行51单片机理实一体工作页
学习目标01掌握AT89S51单片机内部部件名称目录02掌握AT89S51单片机内部部件各自的作用什么是单片机适合初学者的单片机AT89S51AT89S51各引脚功能介绍学习活动AT89S51程序下载的方法学习内容单片机(Single-ChipMicrocomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,叫做单片机。什么是单片机适合初学者的单片机AT89S51AT89S51是一个低功耗,高性能CMOS-8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。适合初学者的单片机AT89S511、8位微处理器(CPU)。2、数据存储器(128B
RAM)。3、程序存储器(4KBFLASH
ROM)。4、4个8位可编程并行I/O口(PO口、Pl口、P2口和P3口)。5、1个通用的全双工的异步收发串行口(UART)。6、2个可编程的16位定时器/计数器。7、1个看门狗定时器。8、中断系统具有5个中断源、5个中断向量。9、特殊功能寄存器(SFR)26个。10、0低功耗节电模式有空闲模式和掉电模式,且具有掉电模式下的中断恢复模式。11、3个程序加密锁定位。单片机片内各功能部件40只引脚按功能可分为如下3类:1类:电源及时钟控制引脚:VCC、VSS;XTAL1、XTAL2;2类:控制引脚:PSEN、ALE/PROG、EA/VPP、RST(即RESET);3类:I/O引脚:P0、P1、P2与P3,为4个8位并行I/O口的外部引脚。AT89S51各引脚功能P3口可作为通用的I/O口使用。P3口还提供第二功能,其第二功能定义如上表所示AT89S51的P3口提供第二功能
AT89S51可以通过串口下载程序,只需要三个引脚P1.5(MOSI)、P1.6(MISO)、P1.7(CLK)即可下载。DB9是电脑的串口,然后经过一个MAX232芯片转接到P1.5、P1.6、P1.7引脚。另外,在程序下载时,RST引脚要一直接高电平。通过电脑端的下载软件即可下载。AT89S51程序下载的方法绘制AT89S51内部各个模块,并说明它们的作用。通过前面的学习,把AT89S51各个模块全部都绘制出来,得到一个内部结构示意图。并且要了解各个模块的作用。把作用也写出来。学习活动AT89S51单片机基本硬件结构的巩固AT89S51单片机四个端口有什么异同。通过前面的学习,把AT89S51单片机的四个端口各自的特点是什么,它们有什么异同。单片机(Single-ChipMicrocomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,叫做单片机。CPU、定时计数器、IO端口等单片机AT89S51基本结构内部模块引脚定义下载电路什么是单片机小结40脚封装,电源引脚、控制引脚地址引脚、数据引脚、IO端口常用的下载电路,可以看电路图联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行任务二AT89S51单片机的存储系统尊道贵德笃学尚行51单片机理实一体工作页
学习目标01掌握单片机存储系统的分类目录02掌握单片机存储系统的作用02能够理解单片机的控制过程学习活动程序存储器(ROM)数据存储器(RAM)特殊功能寄存器单片机的运行过程学习内容AT89S51单片机的片内ROM为4KB的Flash存储器,地址范围为0x0000~0x0FFF。编程和擦除完全是通过电气实现的,且速度快。我们可使用编程器对其编程,也可在线编程。在使用AT89S51单片机时,先使用计算机端软件(一般用KeilμVision3以上版本的软件)编写好程序,并将程序编译成.hex文件,然后通过下载软件将.hex文件下载到AT89S51单片机的ROM中。当EA=1,程序计数器(PC)值≤0xFFF(为片内4KBFlash存储器的最大地址)时,CPU只读取片内的Flash存储器中的程序代码;当程序计数器(PC)值>0x0FFF时,CPU会自动转向读取片外ROM空间0x1000~0xFFFF内的程序代码。当EA=0时,CPU会读取片外ROM(地址范围为0x0000~0xFFFF)中的程序代码。CPU不理会片内4KB(地址范围为0x0000~0x0FFF)的Flash存储器。程序存储器(ROM)ROM通常这5个中断入口地址都放一条跳转指令跳向对应的中断服务子程序,而不是直接存放中断服务子程序。每段中断入口地址有8个字节,在汇编语言编程中,放不了中断服务函数,这里会放一条跳转指令,跳去执行中断服务函数。在C语言编程中,则不需要处理中断入口地址的跳转问题,编译软件会自动完成。中断源入口地址ROM中断源入口地址外部中断00x0003定时器T00x000B外部中断10x0013定时器T10x001B串行口0x0023数据存储器(RAM)RAM地址范围分配区域0x30~0x7F用户RAM区(堆栈区、数据缓冲区)0x20~0x2F可位寻址区0x18~0x1F第3组工作寄存器区0x10~0x17第2组工作寄存器区0x08~0x0F第1组工作寄存器区0x00~0x07第0组工作寄存器区RAM总共有256字节,分为低128字节与高128字节,同时,根据RAM的位置还可以将RAM分为片内和片外两部分。片内RAM(低128字节)数据存储器(RAM)RAM地址为0x00~0x1F的32个单元是4组通用工作寄存器区,每个区包含8字节的工作寄存器,编号为R7~R0。0x20~0x2F的16个单元的128位可进行位寻址,也可进行字节寻址。0x30~0x7F的单元只能进行字节寻址,用作存储数据及作为堆栈区。注:在汇编语言中,十六进制数的后缀为H;在C语言中,十六进制数的前缀为0x。在上述表示地址时,比如20H与0x20是同一个十六进制数。片内RAM(低128字节)数据存储器(RAM)SFR片内RAM(特殊功能寄存器SFR)(高128字节)序号特殊功能寄存器符号名称字节地址位地址复位值1P0P0口80H87H~80HFFH2SP堆栈指针81H-07H3DPOL数据指针DPTR0低字节82H-00H4DPOH数据指针DPTR0高字节83H-00H5DP1L数据指针DPTR1低字节84H-00H6DP1H数据指针DPTR1高字节85H-00H7PCON电源控制寄存器87H-0×××0000B8TCON定时器/计数器控制寄存器88H8FH~88H00H9TMOD定时器/计数器方式控制89H-00H10TL0定时器/计数器0(低字节)8AH-00H11TL1定时器/计数器1(低字节)8BH-00H12TH0定时器/计数器0(高字节)8CH-00H13TH1定时器/计数器1(高字节)8DH-00H14AUXR辅助寄存器8EH-×××00××0B15P1P1口寄存器90H97H~90HFFH16SCON串行控制寄存器98H9FH~98H00H17SBUF串行发送数据缓冲器99H-××××××××B18P2P2口寄存器A0HA7H~A0HFFH19AUXR1辅助寄存器A2H-×××××××0B20WDTRST看门狗复位寄存器A6H-××××××××B21IE中断允许控制寄存器A8HAFH~A8H0××00000B22P3P3口寄存器B0HB7H~B0HFFH23IP中断优先级控制寄存器B8HBFH~B8H××000000B24PSW程序状态字寄存器D0HD7H~D0H00H25A(或Acc)累加器E0HE7H~E0H00H26BB寄存器F0HF7H~F0H00HAT89S51单片机片内共有26个特殊功能寄存器SFR(SpecialFunctionRegister)。SFR实际上是各外围部件的控制寄存器及状态寄存器,综合反映了整个单片机系统内部实际的工作状态及工作方式,即通过操作以上的SFR来实现程序的运行从而控制外部元件的工作,实现自动控制。与AT89C51单片机相比,AT89S51单片机新增加了5个SFR:DP1L、DP1H、AUXR、AUXR1和WDTRST。从表中可以发现,凡是可进行位寻址的SFR,其字节地址的末位只能是0x0或0x8,即能够被8整除的地址是可进行位寻址的,其他的不可以单片机如何运行?1.单片机要有一个位置存储程序,这个位置就是ROM。程序指令都是逐条存储在ROM中的。2.程序是顺序执行的,即程序指令逐条执行,每执行一条指令都需要计数(做好标记),这个计数的部件就是程序计数器(PC),它的内容就是当前执行的指令地址。程序开始执行时,都是从地址0开始执行的。单片机复位后就从地址0开始执行程序。3.在程序运行过程中,有各种运算,运算中产生的数据即临时数据,临时数据被存放在数据存储器中。数据存储器可以随机存取,因此也称随机存储器。4.在程序运行过程中,通过设置SFR来控制内部或外部的元件,从而实现自动控制。单片机运行的过程学习活动二。特殊功能寄存器把AT89S51单片机的特殊功能寄存器全部抄写一遍。明确每个特殊功能寄存器的作用。三。工作过程描述AT89S51单片机的工作过程。明确ROM、RAM、中断、串口、IO端口、定时计数等部件相互协同工作的原理一。ROM内部结构把ROM内容结构图绘制出来学习活动ROM用于存放程序和表格之类的固定常数。单片机能够按照一定的次序工作,是由于ROM中存放了经调试正确的程序。ROM可以分为片内和片外两部分。AT89S51单片机的片内ROM为4KB的Flash存储器,地址范围为0x0000~0x0FFF。AT89S51单片机的存储系统RAM总共有256字节,分为低128字节与高128字节,同时,根据RAM的位置还可以将RAM分为片内和片外两部分。AT89S51单片机片内共有26个SFR。SFR实际上是各外围部件的控制寄存器及状态寄存器,综合反映了整个单片机系统内部实际的工作状态及工作方式,即通过操作以上的SFR来实现程序的运行,从而控制外部元件的工作,实现自动控制。CPU通过PC地址从ROM中读取指令,并运行,在运行过程中产生的中间数据暂时放在RAM中,运行过程中,需要对SFR进行设置,从而控制单片机内部各个部件,实现自动控制。ROMRAM运行过程SFR小结联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行尊道贵德笃学尚行51单片机理实一体工作页
任务三AT89S51单片机的并行I/O端口学习目标01掌握51单片机IO端口的性能指示目录02掌握51单片机IO端口的驱动原理03能够简单应用单片机的8位IO端口学习任务IO口的结构IO口的驱动IO口概述IO口的性能指标输出状态IO口寄存器设置IO口的操作学习内容IO口概述1.可以将“0”与“1”转换为电压信号的端口。2.单片机中最常用的TTL电平:OV代表“O”,+5V代表“1”。3.AT89S51单片机有4个8位I/0口:PO,P1,P2,P3。P0、P1、P2、P3四组端口每个端口有8个引脚,这是单片机控制外围电路的通道IO口的性能指标1.灌电流能力:能够流入I/0口的最大电流(AT89S51为10mA)。即电流从外围电路流入到单片机I/O引脚。2.拉电流能力:能够从I/0口流出的最大电流(AT89S51为<10uA)。每个引脚输出高电平时的拉电流非常小,通常只有几百微安甚至更小,难以驱动需要较大电流的负载。比如想要点亮一个普通的LED(一般点亮LED至少需要1mA左右的电流),仅靠AT89S51单片机I/O引脚输出高电平时的拉电流是无法正常点亮的。3.AT89S51单片机有4组I/0口:PO,P1,P2,P3。其中P0口内部没有上拉电阻,在应用时,需要外接10KΩ电阻到电源。其他三组端口都有内部上拉电阻,但是弱上拉。4.I/O端口的最大输入电压,与电源电压有关,电源电压在4.0~5.5V,输入的电压不要超过电源电压。否则会烧坏单片机。每组端口在RAM中都有对应的特殊功能寄存器(SFR)名字也叫P0、P1、P2、P3这四个SFR都可以进行位寻址,即可单独访问每个SFR中对应的二进制位。这样的位用Px来表示,Px某一位置1或0,对应I/O口位的电平为高或低(1对应高,0对应低)输出状态IO口寄存器设置特殊功能寄存器(SFR)IO端口在读取Px某一位之前,要向该位写入1(汇编语言需进行此步操作,C语言编译器会自动完成此步,C语言编程可省略此步骤),然后读回数据真实反映该位I/O口的输入状态。)1.将某一位置1,可以采用以下方法:相应位与1进行按位或运算或者
直接赋值为1(二进制的1)I/O口的操作如把P0.0位置1:P0=P0|0x01;(十六进制数0x01对应的二进制数为0b00000001)也可以P0^0=1;(P0^0在C语言中表示P0寄存器的第0位)2.将某一位置0,可以采用以下方法:相应位与0进行按位与运算或者
直接赋值为0(二进制的0)如把P0.0位置0:P0=P0&0xfe;(十六进制数0xfe对应的二进制数为0b11111110)也可以P0^0=0;(P0^0在C语言中表示P0寄存器的第0位)3.将某一位取反,可以采用以下方法:相应位与1进行按位异或运算或者
直接取反如把P0.0位取反:P0=P0^0x01;(十六进制数0x01对应的二进制数为0b00000001)也可以P0^0=~P0^0;(P0^0在C语言中表示P0寄存器的第0位)4.特有的位操作关键字:sbit用来重新定义一些引脚的名称。
比如:在P0.0引脚外接一个蜂鸣器,为了更好理解,可以把P0.0重新定义为一个新的名称sbitBEE=P0^0;在后续的程序中,都可以用BEE来代替P0^0引脚。输出驱动AT89S51四个端口分别是P0、P1、P2、P3,特殊功能寄存器也有四个寄存器叫P0、P1、P2、P3,它们有什么联系吗?是的,它们确实有联系。它们是一一对应的关系。I/O端口的驱动
内部的寄存器与输入输出端口是一一对应的。每个寄存器是一个字节,有8个二进制位,而每一个IO端口也有8个引脚,这些引脚与二进制位是一一对应的。
每个二进制位只有两个值0或1。对应的输出就是低电平与高电平。因AT89S51单片机使用的电源是5V电源,所以对应的低电平是0V,高电平是5V。内部的寄存器的值与输出的关系如右图所示。二进制位是0,对应的引脚输出0V(低电平),二进制位是1,对应的引脚输出5V(高电平),根据这个规律,我们要在单片机的引脚输出高电平还是低电平,只要在对应的寄存器的对应位写入0或1即可。输出驱动I/O端口的驱动对于寄存器P0、P1、P2、P3的操作可以是以字节的方式操作,也可以以位进行操作,非常方便。例如:P1=0xB4;或P1^7=1;P1^7对应单片机的P1.7引脚。LED的驱动I/O端口的驱动这里的电阻用于分压。当LED发光时,它两端电压约为1.5V,剩下的3.5V电压就由串联的电阻承担。如果LED发光时电流约为10mA,则可以算得串联的电阻为350欧。如何来控制LED的亮与灭呢?我们只要往寄存器P1^0这个二进制位写入0或1,则对应的P1.0这个引脚输出0V(低电平)或5V(高电平),当输出0V时,LED点亮,当输出1V时,LED不亮。从而实现了对LED的控制。在C语言中则是这样写的:P1^0=0;(亮)或P1^0=1;(灭)。流水灯的实现
I/O端口的驱动在写流水灯程序时,只要不断地改变P0寄存器的值即可实现LED的亮灭变化。当然,这里要注意一个问题,单片机的运行速度对人眼来说是很快的,如果P0寄存器值的变化速度太快,超出了人眼的反应速度,则我们看不出LED亮灭的变化,由此,必须在P0寄存器的值变化后要延时一段时间才能再次变值。这段延时的时间必须能够让人眼分辨出来。输入驱动
I/O端口的驱动AT89S51单片机读入端口的数据时,需要先往端口写1然后再读入。这是由单片机的端口结构决定的。假如读入P1端口的数据,如使用C语言编程时,可以使用以下语句:P1=0XFF;//全部写入1,此功能在编译的时候,编译器自动加入,不需要再写。READ=P1;//这里的READ是一个变量,通过这一条语句就可以把P1端口的数据读入到READ变量中来。IO端口P0端口P3端口P2端口P1端口扩展阅读IO端口的结构及工作原理没有上拉电阻特别注意各个端口的不同点。点亮一个LED实验电路电路结构LED特性曲线学习活动一使用端口实现点亮一个LED#include<reg51.h>sbitLED=P2^0;//位操作把P2.0定义为LED//主函数voidmain(void){while(1){LED=0;//使P2.0为低电平0}}AT89S51单片机的并行I/O端口端口特性端口性能驱动原理端口操作小结联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行任务四51单片机最小系统尊道贵德笃学尚行51单片机理实一体工作页
学习目标01掌握时钟电路的时序目录02掌握复位操作与复位电路03掌握51单片机的最小应用系统几乎所有的用电器都需要电源,单片机也不例外。对AT89S51单片机来说,它工作的电源是+5V。有些单片机采用贴片封装的会使用+3.3V电源。由此在电路设计时,根据单片机的使用手册,提供+5V或+3.3V电源。对于AT89S51单片机,它要能够正常工作,有三个必要条件:1、电源:+5V2、复位信号3、晶振信号这三个条件缺一不可。51单片机最小系统时钟电路复位操作复位电路学习任务电源学习内容三个必备条件之一:电源这个条件比较容易理解,几乎所有的用电器都需要电源,单片机也不例外。对AT89S51单片机来说,它工作的电源是+5V。有些单片机采用贴片封装的会使用+3.3V电源。由此在电路设计时,根据单片机的使用手册,提供+5V或+3.3V电源。条件之一:电源三个必备条件之一:时钟电路时钟电路用于产生AT89S51单片机工作时所必需的稳定时钟信号,AT89S51单片机的内部电路正是在时钟信号的控制下,严格地按时序执行指令进行工作。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。AT89S51单片机的最高时钟频率为33MHz。条件之二:时钟电路内部时钟方式AT89S51单片机内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚外部跨接石英晶体振荡器和瓷片电容,构成一个稳定的自激振荡器,如右图所示。三个必备条件之一:时钟电路时钟电路用于产生AT89S51单片机工作时所必需的稳定时钟信号,AT89S51单片机的内部电路正是在时钟信号的控制下,严格地按时序执行指令进行工作。常用的时钟电路有两种方式,一种是内部时钟方式,另一种是外部时钟方式。AT89S51单片机的最高时钟频率为33MHz。条件之二:时钟电路外部时钟方式外部时钟方式使用现成的外部振荡器产生时钟脉冲信号,常用于多片AT89S51单片机同时工作,以便于多片AT89S51单片机之间的同步。外部时钟源直接接到XTAL1端,XTAL2端悬空,其电路如右图所示时钟周期:条件之二:时钟电路时钟周期、机器周期、指令周期它是时钟控制信号的基本时间单位。若晶振频率为fOSC,则时钟周期TOSC
=1/fOSC。如fOSC
=6MHz,TOSC
=166.7ns。机器周期:CPU完成一个基本操作所需时间为机器周期。执行一条指令分为一个或几个机器周期。每个机器周期完成一个基本操作,如取指令、读或写数据等。1个机器周期=12个时钟周期.1个机器周期包括12个时钟周期,分6个状态:S1~S6。每个状态又分两拍:P1和P2。因此,一个机器周期中的12个时钟周期表示为S1P1、S1P2、S2P1、S2P2、....S6P2指令周期:条件之二:时钟电路时钟周期、机器周期、指令周期指令周期执行一条指令所需的时间。AT89S51单片机中指令按字节来分,可分为单字节、双字节与三字节指令。因此执行一条指令的时间也不同。简单的单字节指令,取出指令立即执行,只需一个机器周期的时间。而有些复杂的指令,如转移、乘、除指令则需两个或多个机器周期。这里的指令是指汇编指令。从指令执行时间看:单字节和双字节指令一般为单机器周期和双机器周期;三字节指令都是双机器周期;乘、除指令占用4个机器周期。条件之三:复位电路复位操作寄存器复位状态寄存器复位状态PC0000HTMOD00HAcc00HTCON00HPSW00HTH000HB00HTL000HSP07HTH100HDPTR0000HTL100HP0~P3FFHSCON00HIP×××00000BSBUF××××××××BIE0××00000BPCON0×××0000BDP0L00HAUXR××××0××0BDP0H00HAUXR1×××××××0BDP1L00HWDTRST××××××××BDP1H00H
注:复位状态中的数据是汇编语言中的十六进制数。X表示不定状态。复位是单片机的初始化操作,只需给AT89S51单片机的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可使AT89S51单片机复位。条件之三:复位电路复位电路上电复位上电复位程序复位一般来说,单片机的复位速度比外围I/O接口电路快些。因此在实际应用系统设计中,为保证系统可靠复位,在单片机应用程序的初始化程序段应安排一定的复位延迟时间,以保证单片机与外围I/O接口电路都能可靠地复位。条件之三:复位电路最小系统左边为常见最小系统,已包括三个条件。右边是Proteus7.8中的最小系统,把电源隐藏了。学习任务最小系统把右边的图画出来。最小系统电源电源是电路必须的能量来源。时钟电路没有时钟电路单片机无法正常工作。时钟电路犹如人体的心脏,心脏不跳动,人不能活。复位电路单片机需要复位之后才开始工作,不复位程序无法从头执行。小结联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行尊道贵德笃学尚行51单片机理实一体工作页
任务五KeilµVision开发环境的搭建学习目标01掌握Keilµvision工程的建立方法目录02学会编写与编译单片机程序添加标题ADDTITLEKeilC51单片机工程文件结构编写C程序及编译成HEX文件学习任务KeilC51常见错误排除
学习内容学习任务
使用KeilC51建立工程,学会编译程序Keilµvision工程的建立Keiluvision4集成开发环境它是一种软件,专门用于单片机开发。可以进行编程、编译、调试、下载等工作。实现单片机开发一体化。KeilC51单片机工程文件结构Keiluvision4工程示例上图是一个Keil工程的结构示意图。为了开发移植的方便,一般会把各个硬件模块的驱动单独开发成两个文件,一个驱动程序各个函数的C语言文件,一个是包换这些函数的声明的头文件。KeilC51单片机工程文件结构第一步:使用Keilµvision创建工程文件。第二步:创建C语言文件。如果已有C语言文件可以不用创建。第三步:添加C语言文件到工程中。第四步:对工程进行设置,比如设置晶振频率、勾选“产生HEX文件”等。第五步:编写C程序并编译产生HEX文件。第六步:通过仿真软件仿真程序运行效果是否与设计一致,或直接下载HEX文件到硬件电路中的单片机进行硬件实验,观察是否与设计一致。特别注意,软件仿真不能完全代替硬件,在一些时序要求严格的场合,不能用软件仿真,而用硬件直接实验。Keilµvision工程的建立特别注意:工程名字、C语言文件名字要起得有意义,能够见名知功能Keilµvision工程的建立双击桌面图标,打开Keilµvision软件Keilµvision工程的建立建立新工程Keilµvision工程的建立保存新工程名字起得要有意义Keilµvision工程的建立选择单片机Keilµvision工程的建立出现此对话框,选择否,如果选择是,则会在工程中多一个文件,些文件不影响程序的编程。工程已建好Keilµvision工程的建立创建C语言文件点New...新建保存为.c文件Keilµvision工程的建立把C语言文件添加到工程中在导航窗口选择“SourceGroup1”,点击鼠标右键,在弹出的菜单项选“AddFiles...”,菜单选择前面建立的C语言文件
Keilµvision工程的建立设置晶振频率右键点击导航窗口的“Target1”,在弹出的菜单中选择第一个“OptionforTarget’Target1’……”菜单或工具栏魔术棒图标设置Xtal(MHz)为12MHz
编写C程序及编译成HEX文件常用功能按钮编写C程序及编译成HEX文件使用Keil编写程序编写完成后,点击编译按钮并生成hex文件。这样就可以将其烧入单片机进行测试,或者使用Proteus仿真软件,仿真运行程序。学习活动一建立KeilC51工程,并编译建立KeilC51工程,并编译编写完成后,点击编译按钮并生成hex文件。这样就可以将其烧入单片机进行测试,或者使用Proteus仿真软件,仿真运行程序。#include<reg51.h>#define
LED
P2_0voidmain(){LED=0;}其中,“compiling点亮LED.c...”表示正在编译“点亮LED.c”文件“linking...”表示KeilC51软件连接一些系统文件或编译器“ProgramSize:data=9.0xdata=0code=19”表示编译后的程序大小是:内部RAM使用9字节,外部RAM使用0字节,代码大小为19字节。“Creatinghexfilefrom“点亮LED”...”表示从“点亮LED”工程产生十六进制文件。只有看到这一条,才说明KeilC51产生了可下载到单片机中的文件。““点亮LED”--0
Error(s),0Warning(s).”表示“点亮LED”工程,编译过程中有0个错误,0个警告。说明编译成功。学习活动二KeilC51常见错误排除常见错误(一)语法类错误1、缺少“;”出现提示:error
CXXX:syntaxerror
near’某符号’。说明在这个“符号”附近有语法错误。2、出现没有定义的标识符出现提示:error
Cxxx:‘xxx’:undefined
identifier。说明xxx标识符没有定义过。通过查找前文,确认xxx是否定义,很多情况是打字错误造成的。3、运算符搞错出现提示:error
Cxxx:‘某字符’:bad
operand
type。说明是错误的操作数类型,很多情况是把运算符打错了。4、括号(包括圆括号、方括号、大括号)不配对出现提示:error
CXXX:syntaxerror
near’某括号’。说明在这个“某括号”附近有语法错误。注意检查括号是否配对。5、把while(1)中的数字1写成了字母l或i出现提示:error
Cxxx:‘l’:undefined
identifier。说明字母l或i没有定义过。检查一下即可发现问题。6、宏定义时,关键字出错出现提示:error
Cxxx:‘某字符’:undefined
identifier。双击此提示,指示到:uint
i,j;行,经检查发现问题出在宏定义处,#define
uint
unsiqned
int。把g错打成了q。7、大小写没有区分出现提示:errorC202:'p1':undefinedidentifier。说明p1这个寄存器没有定义过,实际是把大写字母P写成了小写字母p。在C语言中,大小写是有区别的,不能乱用。学习活动二KeilC51常见错误排除常见错误(一)语法类错误特别注意,如果把main写成mian则会出现上面的提示。学习活动二KeilC51常见错误排除常见错误(二)环节缺失或多余类1、没有声明子函数出现提示:error
Cxxx:’xxx’:redefinition。
说明xxx重新定义。这一般就是xxx子函数没有进行声明造成。2、定义了两个名称相同的子函数出现提示:error
Cxxx:‘_xxx’:functionalreadyhasabody。说明xxx子函数已经有了一个原型,出现重复定义的错误。3、主函数写错提示的内容比较多,不过我们可以看最后一个警告:***WARNINGL10:CANNOTDETERMINEROOTSEGMENT。该警告的意思是:不能确定启动段。即没有找到主函数,找不到程序的启动位置。4、头文件名称写错出现提示:warningC318:can'topenfile'RaGX51.H'。说明无法打开RaGX51.H文件,因为名称写错,所以找不到相应头文件,打不开。错误提示都会显示在输出窗口,通过鼠标左键双相应的错误提示,在编写编辑区会有下个小箭头指向程序的行号,说明错误在这一行程序中,或这一行的附近。keil中,开发单片机都是依托工程进行的。编写的C语言文件、生成的hex文件都在工程内完成。常见的错误,是在编写程序的时候出现的,主要是原因是:对C语言的语法不够了解造成。加强C语言的语法学习,可以完全解决常见错误。小结常见错误工程建立添加标题CLICKTOADDTITLE联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行任务六Proteus仿真环境的建立尊道贵德笃学尚行51单片机理实一体工作页
学习目标01掌握Proteus仿真方法目录02掌握Proteus的电路搭建Proteus仿真电路的搭建Proteus电路仿真学习任务
绘制“点亮一个LED”的电路并仿真学习任务
绘制ADC0832模数转换与显示电路
学习内容Proteus仿真电路的搭建Proteus窗口界面预览窗口元件选择按钮元件列表模型选择工具栏元件编辑工具栏仿真调试菜单栏菜单栏图标编辑窗口Proteus仿真电路的搭建添加元件选择元件,把元件添加到元件列表中,单击元件选择按钮[P](Pick)如左图所示右图中“关键字”栏,用于查找我们需要的元件,在此打上元件名称的关键字部分,在“结果”栏,显示包括关键字的元件,我们从中选择想要的元件即可。Proteus仿真电路的搭建元件的类别列表含义序号“类别”英文名称中文含义备注1AnalogICs模拟集成芯片2Capacitor电容器3CMOS4000series场效应管4000系列4Connector各种接头插座属于电路的连接器5DataConverters数据转换芯片6DebuggingTools调试工具仿真的器件7Diodes二极管8ECL10000Series各种常用集成电路9Electromechanical各种电机交直流都有10Inductors各种电感器与变压器11LaplacePrimitives拉普拉斯变换12Mechanics电机星形、三角形连接13MemoryICs存储芯片14MicroprocessorICs各种单片机Proteus仿真电路的搭建元件的类别列表含义序号“类别”英文名称中文含义备注15Miscellaneous各种常用分立器件16ModellingPrimitives各种仿真器件17OperationalAmplifiers运算放大器18Optoelectronics各种发光器件19PICAXEPicaxe系列单片机20PLD&FPGAs可编程逻辑器件21Resistors电阻器22SimulatorPrimitives各种逻辑及信号仿真23Speakers&sounders扩音器类24Switchs&Relays开关继电器类25Switchingdevices晶闸管类26Thermionicvalve电子管类27Transducers传感器类28Transistors晶体管类29TTL74xxxTTL74系列逻辑芯片“子类别”是属于“类别”下的各种器件。“制造商”是指器件的生产器,同一种功能的芯片,可能会有很多的生产厂家,在一些应用特性上有一定区别。Proteus仿真电路的搭建元件的查找系统中有很多的元件,如果不熟悉元件,查找起来很困难,怎么办呢?在左上角的对话框“关键字”中输入我们需要的元件名称,单片机AT89S51因为与AT89C51相同,因此可以用C51代替S51。再输入晶振(Crystal)、电容(Capacitor)、电阻(Resistors)、发光二极管(Led)等。输入的名称是元件的英文名称,不一定要输入全部的名称,输入相应关键字能找到对应的元件即可。例如需要晶振,输入“CRY”,得到下图所示的结果在出现的搜索结果中双击需要的元件,该元件便会添加到主窗口左侧的元件列表区Proteus仿真电路的搭建放置元件选择需要放置的元件在元件列表区单击选中AT89C51,把鼠标移到右侧编辑窗口中,鼠标变成铅笔形状,单击左键,框中出现一个AT89C51原理图的轮廓图,可以移动。鼠标移到合适的位置后,按下鼠标左键,放好原理图,如下图所示:放置前放置后Proteus仿真电路的搭建元件连线首先把要放置的元件全部放好将鼠标指针靠近元件的一端,当鼠标的铅笔形状变为绿色时,表示可以连线了。单击该点,再将鼠标移至另一个元件的一端单击,两点间的线路就连好了。如在连线时要控制导线的走向,可以在需要经过的地方单击鼠标左键,若要退回则按下退格键即可。如下图所示。靠近连线后,双击右键可删除连线。Proteus仿真电路的搭建添加电源及接地选择工具栏中的图标分别选择“POWER”(电源)“GROUND”(接地)添加到绘图区,并连接好线路。见下图6-13。因为Proteus中单片机已默认提供电源,所以不用给单片机加电源。Proteus仿真电路的搭建编辑元件设置参数双击元件,会弹出各元件参数Proteus电路仿真电路仿真1、载入HEX文件双击画面中单片机图像,打开编辑元件窗口,单击,找到在Keil软件中工程存放的文件夹,选择编译好的HEX格式文件,导入该文件。Proteus电路仿真电路仿真2、仿真调试在界面左下角有仿真控制按钮,这四个按钮分别代表运行、单步运行、暂停和停止。如果正确导入了HEX格式文件后,单击运行按钮就可以运行程序了。运行效果见右图。在运行时,电路中输出的高电平是红色表示,低电平是蓝色表示。学习活动学习活动一
绘制“点亮一个LED”的电路绘制电路图如右图所示,特别注意:总线怎么画?这里需要特别注意一个问题:每个元件的名称都必须是唯一的,不能相同,而且相同类型的元件应该从1开始编号。学习活动学习活动二绘制ADC0832模数转换与显示电路在仿真时,通过点击电位器RV1的上下箭头来调节电阻大小,从而调节电压的大小,从电压表中可以看出。然后再看液晶屏1602显示的内容,两者基本无差别,仿真成功。电路绘制时,能够学会元件的查找,能够连接电路,学会使用总线、网络标号、能够绘制简单电路。仿真的时候,一定要把电路连接好,不能出现断路、短路的情况。还要把hex文件加载到单片机中,才能进行仿真。仿真电路搭建电路仿真电路绘制小结联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行任务七流水灯的制作尊道贵德笃学尚行51单片机理实一体工作页
学习目标01掌握C语言中基本语句的应用目录02掌握流水灯电路的搭建方法流水灯的概念流水灯电路搭建及驱动方法学习活动一
顺序型流水灯的制作学习活动二
循环型流水灯的制作学习内容流水灯的概念如上图,发光二极管按照某种逻辑顺序依次点亮,实现某种炫丽的效果,这种炫丽的效果在城建美化、广告制作等方面都有大量的应用。流水灯流水灯的控制采用字节控制的方式:流水灯P2=0xfe;delay();P2=0xfd;delay();...采用位控制的方式:P2^0=0;P2^1=1;P2^2=1;P2^3=1;P2^4=1;P2^5=1;P2^6=1;P2^7=1;//等于0,LED亮delay();P2^0=1;P2^1=0;P2^2=1;P2^3=1;P2^4=1;P2^5=1;P2^6=1;P2^7=1;//等于0,LED亮delay();P2^0=1;P2^1=1;P2^2=0;P2^3=1;P2^4=1;P2^5=1;P2^6=1;P2^7=1;//等于0,LED亮delay();P2^0=1;P2^1=1;P2^2=1;P2^3=0;P2^4=1;P2^5=1;P2^6=1;P2^7=1;//等于0,LED亮delay();...循环加左移右移方式:for(x=0;x<8;x++)//循环8次{P2=~(0x01<<x);//首先使0x01左移x位,然后再按位取反,再送到P2口。}扩展阅读一、数据类型C语言的数据类型有:整数型,实数型,字符型,布尔型,如下表:类型符号关键字所占位数数的表示范围整数型有(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~2147483647无unsignedint160~65535unsignedlongint160~65535unsignedshortint320~4294967295实型有float323.4e-38~3.4e38有double641.7e-308~1.7e308字符型有char8-128~127无unsignedchar80~255注意图中红色字体部分的数据类型,这些都是常用的数据类型。扩展阅读二、运算符C语言的运算符能够实现数据之间的运算1.赋值运算符:=2.算术运算符:+,-,*,/,%(加,减,剩,除,取余)3.关系运算符:>,>=,<=,<,==,!=(大于,大于等于,小于等于,小于,等不等于,不等于)4.逻辑运算符:&&,||,
!(与,或,非)5.位运算符:&,^,|,~,>>,<<(按位与,按位异或,按位或,按位取反,右移,左移)扩展阅读三、基本语句1、选择语句:
(1)if语句:if(条件){语句1;}//如果条件成立,就执行语句1else{语句2;} //否则之意,条件不成立就执行语句2,不需要else时可省略(2)switch语句:switch(表达式)//根据“表达式”的值,选择执行第几case后的语句{case表达式1://“表达式”的值等于“表达式1”的值,执行语句1,再执行break跳出整个语句语句1;break;
case表达式2://“表达式”的值等于“表达式2”的值,执行语句2,再执行break跳出整个语句语句2;break;case表达式n://“表达式”的值等于“表达式n”的值,执行语句n,再执行break跳出整个语句语句n;break;default:语句;//“表达式”的值都不等于上述的“表达式123...n”的值,则执行这个分支里的语句。即默认执行的语句。}扩展阅读三、基本语句循环语句:(1)for语句:for(表达式1;表达式2;表达式3){//表达式1用于变量声明并赋数值,表达式2用于条件判断,表达式3用于改变条件
语句;
//表达式1只执行一次,表达式3是在表达式2判断成立为真并且执行语句后时才执行}(2)while语句:while(条件){//当条件成立为真,将会一直执行语句,直到条件不成立
语句;}(3)do...while语句:do{//先执行语句,再判断条件是否成立为真,为真则一直循环,为假则跳出
语句;}while(条件);
扩展阅读三、基本语句3、跳出语句:
(1)break;
前面已介绍过用break语句可以跳出switch结构,使程序继续执行switch结构后面的一个语句。使用break语句还可以从循环体中跳出循环,提前结束循环而接着执行循环结构后面的语句。它不能用在除了循环语句和switch语句之外的任何其它语句中。(2)continue;continue语句用在循环结构中,用于结束本次循环,跳过循环体中continue下面尚未执行的语句,直接进行下一次是否执行循环的判定。continue语句和break语句的区别在于:continue语句只是结束本次循环而不是终止整个循环;break语句则是结束循环,不再进行条件判断。4、返回语句:return;return语句一般放在函数的最后位置,用于终止函数的执行,并控制程序返回调用该函数时所处的位置。返回时还可以通过return语句带回返回值。return语句格式有两种:(1)return;(2)return(表达式);如果return语句后面带有表达式,则要计算表达式的值,并将表达式的值作为函数的返回值。若不带表达式,则函数返回时将返回一个不确定的值。通常我们用return语句把调用函数取得的值返回给主调用函数。
扩展阅读四、函数函数的定义:函数定义的一般格式如下:函数类型
函数名(形式参数表){局部变量定义函数体}前面部件称为函数的首部,后面称为函数的尾部,格式说明:1、函数类型函数类型说明了函数返回值的类型(即数据类型)。2、函数名函数名是用户为自定义函数取的名字以便调用函数时使用。3、形式参数表形式参数表用于列录在主调函数与被调用函数之间进行数据传递的形式参数。学习活动一顺序型流水灯的制作#include<reg52.h>//导入头文件voiddelay()/*延时函数
将循环50×1000次空白语句,达到延时效果*/{ inti,j;//声明两个变量i和j,用于for语句的循环变量 for(i=0;i<50;i++)//循环50次 { for(j=0;j<1000;j++);//循环1000次 }}voidmain(void)//主函数
每个程序有并且只有一个{ while(1)//一直循环 {/*位操作,16进制会自动转成二进制,二进制里的每一位对应PX(X为0、1、2、3)I/O口的每一位其中PX.0为低位,PX.7为高位*/ P2=0xFE;//11111110除P2.0外,其余全部为1(高电平) delay(); P2=0xFD;//11111101 除P2.1外,其余全部为1(高电平) delay(); P2=0xFB;//11111011除P2.2外,其余全部为1(高电平) delay(); P2=0xF7;//11110111 delay(); P2=0xEF;//11101111 delay(); P2=0xDF;//11011111 delay(); P2=0xBF;//10111111 delay(); P2=0x7F;//01111111 delay(); }}电路与例程:采用字节控制方式
学习活动二循环型流水灯的制作电路与例程:采用循环加左移控制方式
参考主程序如下:voidmain(){intX;
//声明变量X,用于for循环
while(1){for(X=0;X<8;X++)//因为LED有8个,因此要循环8次{P2=~(0x01<<X);
delay();
}
}
}/*0x01左移X位,当X循环到1时,即00000001左移1位等于00000010,当X循环到2时,即00000010左移1位等于00000100。后面以此类推。因为LED要低电平才能亮,所以需要增加~取反符号,使得00000001变成11111110*/小结流水灯的概念发光二极管按照某种逻辑顺序依次点亮,实现某种炫丽的效果,这种炫丽的效果在城建美化、广告制作等方面都有大量的应用。C语言基本语句掌握C语言的基本数据类型,掌握基本语句,掌握函数的编写流水灯的驱动可以采用多种控制方式控制流水灯的运行,产生炫丽的效果。有字节驱动、位驱动、循环左右移驱动方式等。小结联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行任务八51单片机输入设备尊道贵德笃学尚行51单片机理实一体工作页
学习目标01掌握独立键盘的工作原理目录02掌握矩阵键盘的工作原理
03学会两种键盘的检测方法独立键盘矩阵键盘学习活动一
独立按键的应用学习活动二
矩阵键盘的运用学习内容按键描述按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,单片机系统中最常见的是触点式开关按键。独立键盘也叫独立按键。独立键盘
在单片机应用系统中,除了复位按键有专门的复位电路及专门的复位功能外,其他按键都是以开关状态来设置控制功能或输入数据的。在按键未被按下时,由于上拉电阻(P0没有上拉电阻,如使用P0需加接一个上拉电阻)的存在使端口检测为高电平,按键按下时,对应的端口会变为低电平,程序通过循环检测端口的高低电平变化即可检测哪个按键被按下。程序一旦检测到I/O口变为低电平则说明按键被按下,然后执行相应的指令。在AT89S51单片机中,只有P0端口没有内部的上拉电阻,P1、P2、P3都有内部上拉电阻。独立键盘按键输入原理
单片机键盘通常使用机械触点式按键,其主要功能是把机械上的通断转换为电气上的逻辑关系。也就是说,它能提供标准的TTL逻辑电平,以便于同通用数字系统的逻辑电平相容。机械式按键在按下或释放时,由于机械弹性作用,通常伴随有一定的时间触点机械抖动,然后其触点才稳定下来。其抖动过程如左图所示的实际波形,抖动时间的长短与按键的机械特性有关,一般为5~10ms。在触点抖动期间检测按键的通与断,可能导致判断出错,即按键一次按下或释放,错误的被认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取消抖措施。按键较少时,可采用硬件消抖;按键较多时,采用软件消抖。独立键盘按键结构与特点
硬件消抖一般会在按键两端并联电容,通过电容的充放电作用将按键按下时的高频振荡吸收掉。单纯的硬件消抖是不够的,虽然这能够消除大部分的抖动信号,在软件设计上仍然需要对抖动进行去除。独立键盘硬件消抖的方式
软件消抖的程序控制思路比较简单,一般是通过延时来解决消抖的问题。当检测到按键被按下时,不会立即触发对应功能的控制,而是经过短暂的延时后,再去判断当前端口的电平信号,如果仍然检测到为按键按下时的电平,才会认为当前按键被按下。延时的这段时间,正好是按键抖动发生的时间,再次检测时,按键已经稳定按下了。
流程图如左图所示。独立键盘软件消抖的方式参考代码:if(KEY==0)//按键KEY按下{delay1ms(10);//延时10ms去抖if(KEY==0)//再次判断按键KEY按下{
//加入处理代码
}while(KEY==0);//等待按键松开
}
单片机系统中,若使用按键较多时如电子密码锁、电话机键盘等一般都至少有12到16个按键,通常采用矩阵键盘。
矩阵键盘又称行列式键盘,它是用多条I/O线作为行线,多条I/O线作为列线组成的键盘。常用的矩阵键盘是4x4的16键键盘。行线、列线各4条。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4x4=16个。这种行列式键盘结构能有效地提高单片机系统中I/0口的利用率。矩阵键盘矩阵键盘介绍手工焊接的矩阵键盘
当无按键闭合时,P2.0~P2.3与P2.4~P2.7之间开路。当有键闭合时,与闭合键相连的两条I/O口线之间短路。判断有无按键按下的方法是:
第一步,置列线P2.4~P2.7为输入状态(高电平),从行线P2.0~P2.3输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。
第二步,置行线P2.0~P2.3为输入状态(高电平),从列线P2.4~P2.7输出低电平,读入行线数据,若某一行线为低电平,则该行线上有键闭合。
综合一二两步的结果,可确定按键编号。矩阵键盘矩阵键盘检测方法
消抖可以在矩阵按键判断键值之前进行,比如:先使行线全部输出低电平,使列线全部输出高电平,直接检测列线是否有低电平输出,若有则说明有可能有按键被按下,然后延时约10ms,再次重复上述检测,此时还是检测到有按键被按下,则说明确实有按键被按下,最后进行按键键值判断。矩阵键盘矩阵键盘检测时如何消抖?延时是否有键按下?独立键盘与矩阵键盘的比较
独立按键相对矩阵按键要简单,检测程序也简单。不过每个按键要占用一个I/O端口。
矩阵按键相对复杂,检测程序也复杂,不过占用的I/O端口要少很多。
使用时可以根据单片机的电路复杂程度选用合适的按键类型,原则是:简单、高效、稳定。VS扩展阅读
将一个A/D转换接口作为按键检测的I/O端口,此I/O端口外接若干相同阻值的电阻,每个电阻的下端连接一个按键到地。当某个按键被按下时,通过检测该I/O端口的电压大小即可判断是哪个按键被按下。这种电路理论上可以连接很多个按键,只要A/D转换能够稳定地区分每一个按键即可。当使用A/D转换进行按键检测时,只使用一个I/O端口,却可以实现检测多个按键的功能,相比上面的独立按键与矩阵按键,A/D转换的优势非常明显。不过A/D转换也有一个缺点,即按键有优先权的区别。如上图所示,当最上面的按键被按下时,下面的所有按键都失效,说明最上面的按键优先权最高,然后到第二个,以此类推,优先权最低的是最下面的一个按键。用A/D转换进行按键检测学习目标掌握独立按键消抖的方法。能够理解独立按键的工作原理。能够正确检测独立按键。学习活动一
独立按键的应用实例操作学习活动一
独立按键的应用参考程序如下:#include<reg51.h>sbitLED1=P2^0;sbitK1=P1^0;voiddelay_ms(unsignedintms){
unsignedinti; unsignedintj; for(i=0;i<ms;i++)
for(j=0;j<300;j++);}voidmain(){while(1) {
if(K1==0) {
delay_ms(10); if(K1==0){LED1=0;} } else { LED1=1; } }}按下独立按键K1,LED灯D1亮,断开K1,灯灭。学习目标能正确识别矩阵按键。理解矩阵按键的工作原理。学习活动二
矩阵按键的应用实例操作学习活动二
矩阵按键的应用运用矩阵键盘控制LED灯的亮灭例程学习活动二
矩阵按键的应用参考例程:#include<reg51.h>sbitLED=P3^0;unsignedcharkey_scan(){ unsignedcharkey; P2=0xf0; //列输出1,行输出0 switch(P2) { case0xe0:key=0;break; //确定第一列有按下
case0xd0:key=1;break; //确定第二列有按下
case0xb0:key=2;break; //确定第三列有按下
case0x70:key=3;break; //确定第四列有按下
default:return16;
//如果都没有按下返回16,说明没有按键按下
} P2=0x0f;
//列输出0,行输出1 switch(P2) {case0x0e:returnkey;/*确定按键在第一行。如果是1行1列,按键位置在0。如果是1行2列,按键位置在1。*/ case0x0d:returnkey+4;/*确定按键在第二行。如果是2行1列,按键位置在4。如果是2行2列,按键位置在5。*/case0x0b:returnkey+8;/*确定按键在第三行。如果是3行1列,按键位置在8。如果是3行2列,按键位置在9。*/case0x07:returnkey+12;/*确定按键在第四行。如果是4行1列,按键位置在12。如果是4行2列,按键位置在13。*/default:return16;
//如果都没有按下返回16,说明没有按键按下
}
/*按键位置布局0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15*/}voidmain(){ while(1) { if(key_scan()==0)//如果按键0被按下
{ LED=0; } if(key_scan()==15)//如果按键15被按下
{ LED=1; } }}例程学习活动二
矩阵按键的应用参考例程:#include<reg51.h>sbitLED=P3^0;unsignedcharkey_scan(){ unsignedcharkey; P2=0xf0; //列输出1,行输出0 switch(P2) { case0xe0:key=0;break; //确定第一列有按下
case0xd0:key=1;break; //确定第二列有按下
case0xb0:key=2;break; //确定第三列有按下
case0x70:key=3;break; //确定第四列有按下
default:return16;
//如果都没有按下返回16,说明没有按键按下
} P2=0x0f;
//列输出0,行输出1 switch(P2) {case0x0e:returnkey;/*确定按键在第一行。如果是1行1列,按键位置在0。如果是1行2列,按键位置在1。*/ case0x0d:returnkey+4;/*确定按键在第二行。如果是2行1列,按键位置在4。如果是2行2列,按键位置在5。*/case0x0b:returnkey+8;/*确定按键在第三行。如果是3行1列,按键位置在8。如果是3行2列,按键位置在9。*/case0x07:returnkey+12;/*确定按键在第四行。如果是4行1列,按键位置在12。如果是4行2列,按键位置在13。*/default:return16;
//如果都没有按下返回16,说明没有按键按下
}
/*按键位置布局0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15*/}小结独立键盘掌握独立键盘的检测方法。矩阵键盘掌握矩阵键盘的检测逻辑,以及键盘的编码方法。两种键盘的比较与消抖独立键盘占用IO口多,但检测方法简单,矩阵键盘占用IO口少,但检测方法较复杂。特别注意两种键盘的消抖处理。小结联系我们ContactusTHANKYOU51单片机理实一体工作页
尊道贵德笃学尚行任务九
数码管的使用尊道贵德笃学尚行51单片机理实一体工作页
学习目标01掌握共阴共阳极数码管的原理及使用方法目录02掌握数码管显示数字的编码方法03掌握4段数码管的原理及使用方法学习活动二4位数码管显示1000以内自加数码管的结构数组的学习数码管的应用学习活动一
单个数码管的应用学习内容数码管的结构
数码管是一种非常常见的显示设备,在很多需要显示数字的地方都会用它。它结构简单稳定性好,容易驱动,价格便宜。
数码管由8个发光二极管封装在一起组成“8”字型的器件,引线已在内部
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 镇痛泵使用中的经济性分析
- 北京师大附中市级名校2026届初三8月开学联考数学试题理试题含解析
- 福建省郊尾、枫亭五校教研小片区2026年初三第一次联合模拟考试数学试题含解析
- 浙江省上杭县2026年初三二模冲刺(三)数学试题含解析
- 2026年陕西省西安市五校初三下学期第四次模拟(4月)考试物理试题含解析
- 江西省樟树市2025-2026学年初三调研试题(二)数学试题含解析
- 贵州省遵义市桐梓县2026年第二学期初三年级一模考试物理试题试卷含解析
- 湖北省咸宁二中学2026届初三中考模拟冲刺卷(提优卷)(三)物理试题文试题含解析
- 江西省吉安市吉州区市级名校2026年中考预测卷(全国Ⅱ卷)化学试题试卷含解析
- 广西市级名校2026年教学质量检测试题数学试题含解析
- 预毕业证明模板 (2025年)
- 2025年辽宁卷历史高考试卷(原卷+答案)
- 2025年大兴机场准入考试题库
- 2025年税务局上海面试题及答案
- 二方审核管理办法
- 工厂能耗管理办法
- 2025年城市燃气项目立项申请报告模板
- 北京政务云管理办法
- 残疾等级评定培训课件
- 瑜伽康复墙培训课件
- 学堂在线 雨课堂 学堂云 工程伦理2.0 章节测试答案
评论
0/150
提交评论