第3章 MCS-51单片机接口技术与C语言编程.ppt

上传人:qwe****56 文档编号:80596808 上传时间:2023-03-23 格式:PPT 页数:120 大小:3.36MB
返回 下载 相关 举报
第3章 MCS-51单片机接口技术与C语言编程.ppt_第1页
第1页 / 共120页
第3章 MCS-51单片机接口技术与C语言编程.ppt_第2页
第2页 / 共120页
点击查看更多>>
资源描述

《第3章 MCS-51单片机接口技术与C语言编程.ppt》由会员分享,可在线阅读,更多相关《第3章 MCS-51单片机接口技术与C语言编程.ppt(120页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第三章第三章 MCS-51单片机的单片机的接口技术与接口技术与C语言编程语言编程华强2009-2010(2)单片机与应用单片机与应用8051单片机支持的编程语言:l 汇编语言l PL/M语言l BASIC语言l C语言l C+语言一、MCS-51单片机的C语言编程n n对单片机的指令系统不要求了解,仅要求对对单片机的指令系统不要求了解,仅要求对80518051的存的存储器结构有一定了解;储器结构有一定了解;n n 寄存器分配、不同存储器的寻址及数据类型等细节可寄存器分配、不同存储器的寻址及数据类型等细节可寄存器分配、不同存储器的寻址及数据类型等细节可寄存器分配、不同存储器的寻址及数据类型等细节

2、可由编译器管理;由编译器管理;由编译器管理;由编译器管理;n n 程序有规范的结构,可分成不同的函数,这种方式可程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;使程序结构化;n n 具有将可变的选择与特殊操作组合在一起的能力,改具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;善了程序的可读性;n n 提供的库包含许多标准子程序,具有较强的数据处理提供的库包含许多标准子程序,具有较强的数据处理能力;能力;n n 由于具有方便的模块化编程技术,使已编好程序可容由于具有方便的模块化编程技术,使已编好程序可容易地移植;易地移植;1-1、C语言与汇编语言相比,有如下优点:1-

3、2、编译器、开发套件和 IDE(1 1)编译器)编译器:由源代码文件生成目标文件由源代码文件生成目标文件(2 2)开发套件)开发套件:包含了编译器、链接器等开发工具的组合包包含了编译器、链接器等开发工具的组合包(3 3)IDEIDE(Integrated Development Environment Integrated Development Environment 集成开发环境)集成开发环境)集成开发环境)集成开发环境)将项目管理、源代码编辑和程序编译、链接、调试等各种工具组合在一将项目管理、源代码编辑和程序编译、链接、调试等各种工具组合在一个功能强大的环境中,具有良好人机界面。个功能强

4、大的环境中,具有良好人机界面。8051单片机所使用的单片机所使用的C语言编译器简称为语言编译器简称为 Cx51例如包含例如包含Cx51、Ax51、BL51、LIB51、OH51、RTX51等等KEIL C51 KeilKeil Vision3 IDEVision3 IDEKeilKeil Vision3 IDEVision3 IDECx51.exeKeilKeil C51 C51开发套件开发套件 v7.50v7.50n C51的程序结构#include#include void delay()void delay();void void main main()()delay();delay()

5、;P0=0 x33 P0=0 x33;例:文件例:文件例:文件例:文件led.cled.c内的代码如下:内的代码如下:内的代码如下:内的代码如下:头文件头文件头文件头文件(一个或若干个)(一个或若干个)主函数主函数主函数主函数n 程序的入口程序的入口 函数名固定,且与书写的位置无关函数名固定,且与书写的位置无关n 有且仅有一个有且仅有一个 函数声明或定义函数声明或定义函数声明或定义函数声明或定义n 库函数或用户自定义的函数库函数或用户自定义的函数n 可以有若干个可以有若干个C51程序大体上是若干函数的集合C语言编程的三大要素l 数据 数据类型、数据结构、存储类型l 运算 算术运算、关系运算、逻

6、辑运算、位操作l 控制 顺序结构、选择结构、循环结构、函数数据类型数据类型长度长度值域值域 bit1 bit0,1 unsigned char8 bit0 255 (signed)char8 bit-128 127 unsigned int16 bit0 65535 (signed)int16 bit-32768 32767 unsigned long32 bit0 4294967295 (signed)long32 bit-21474836482147483647 float32 bit1.7e-38 3.40e+38 (6位)double64 bit1.7e-38 3.40e+38 (10

7、位)*(一般指针)13字节存储空间地址n C51的数据类型的数据类型q 位变量的使用n 不能定义成一个指针,不能定义成一个指针,如不能定义:如不能定义:bit*pointer;bit*pointer;n 不存在位数组不存在位数组如不能定义:如不能定义:bit bit b_arrayb_array n 位变量定义时,存储类型只允许为位变量定义时,存储类型只允许为datadata、bdatabdata或者或者idataidata,如果将位变量的存储类型,如果将位变量的存储类型定义成其它类型都将导致编译出错。定义成其它类型都将导致编译出错。q char 数据类型单片机应用中单片机应用中ASCIIAS

8、CII字符和字符串的使用比较少(因字符和字符串的使用比较少(因为很少需要大量的文本信息),因此在单片机应用中定为很少需要大量的文本信息),因此在单片机应用中定义为义为 unsigned char unsigned char 和和 char char 的变量常用来表示数值。的变量常用来表示数值。q 数据类型的使用单片机系统总存储空间往往比较有限,因此在实际单片机系统总存储空间往往比较有限,因此在实际使用中应注意节约存储空间;使用中应注意节约存储空间;对于对于8 8位单片机,位单片机,8 8位的数据类型是运算最快的;而位的数据类型是运算最快的;而对于对于1616位单片机,位单片机,8 8位的数据和

9、位的数据和1616位的数据可能运算速位的数据可能运算速度是一样的。度是一样的。l l常量常量常量常量 又称为标量,常量的值在程序执行过程中不能改变。又称为标量,常量的值在程序执行过程中不能改变。符号常量(不是严格意义上的常量,只是一个宏)符号常量(不是严格意义上的常量,只是一个宏)使用使用#define#define 语句定义语句定义 定义在定义在ROMROM里的常量里的常量使用使用“codecode”关键字定义的数据关键字定义的数据 定义在定义在RAMRAM里的常量里的常量使用使用“constconst”关键字定义的数据关键字定义的数据在在C51C51中常量的定义有中常量的定义有3 3种方式

10、:种方式:q 常量和变量q 常量和变量在在C51C51中常量的使用:中常量的使用:9:P0=constA;C:0 x008F758014MOVP0(0 x80),#0 x14 10:P1=constB;C:0 x00929000A2MOVDPTR,#constB(0 x00A2)C:0 x0095E4CLRAC:0 x009693MOVCA,A+DPTRC:0 x0097F590MOVP1(0 x90),A 11:P2=constC;C:0 x00998508A0MOVP2(0 xA0),constC(0 x08)#include#define#define constA 20 unsigne

11、d char codecode constB =20;unsigned char constconst constC=20;q 常量和变量在在C51C51中常量的使用:中常量的使用:1 1、符号常量、符号常量(常用)(常用)(常用)(常用)是一个宏,在编译时常被当作指令的立即数。2 2、定义在、定义在ROMROM中的常量中的常量(常用)(常用)存放在ROM中,掉电不丢失,访问需要MOVC指令,和16位地址,访问速度较慢。3 3、定义在、定义在RAMRAM中的常量中的常量存放在RAM中,访问较快,但占用RAM资源,掉电丢失,需要在单片机上电时进行初始化。#include#define#defin

12、e constA 20 unsigned char codecode constB =20;unsigned char constconst constC=20;l l变量变量 在程序执行过程中,其值可以改变的量称为变量。变量只能存放在RAMRAM中。n 数据类型数据类型数据类型数据类型 存储器类型存储器类型存储器类型存储器类型 变量名变量名变量名变量名 =初值初值初值初值 例:例:例:例:unsigned charunsigned charunsigned charunsigned char xdataxdataxdataxdata FlagFlagFlagFlag =0 x0F=0 x0F

13、=0 x0F=0 x0F;C51C51的变量的定义:的变量的定义:的变量的定义:的变量的定义:q 常量和变量存储类型存储类型说明说明datadata直接寻址的片内数据存储器(128B),访问速度最快bdatabdata可位寻址的片内数据存储器(16B),允许位和字节混合访问idataidata间接访问的片内数据存储器(256B),全部片内RAM空间pdatapdata分页访问的片外数据存储器(256B)xdataxdata片外数据存储器(64KB),访问速度相对比较慢codecode程序存储器(64KB),只读n C51数据的存储类型数据的存储类型 在讨论在讨论C51的数据类型的时候,必须理解

14、数据的的数据类型的时候,必须理解数据的存储类型存储类型和它与和它与8051单片机单片机存储器结构存储器结构的关系的关系.l定义变量时如果省略定义变量时如果省略“存储器类型存储器类型”选项,则按编译时使用选项,则按编译时使用的存储器模式的存储器模式SMALLSMALL、COMPACTCOMPACT、或、或、或、或LARGELARGE来使用默认来使用默认的存储器类型。的存储器类型。SMALL SMALL:默认存储类型为默认存储类型为data,访问速度最快,容量小,访问速度最快,容量小COMPACT COMPACT:默认存储类型为默认存储类型为pdataLARGE LARGE:默认存储类型为默认存储

15、类型为xdata,访问效率最低,代码长,访问效率最低,代码长,容量大容量大 一般使用一般使用一般使用一般使用SMALLSMALL模式,对部分容量大的变量,手动指定存储模式,对部分容量大的变量,手动指定存储模式,对部分容量大的变量,手动指定存储模式,对部分容量大的变量,手动指定存储器类型(如定义为器类型(如定义为器类型(如定义为器类型(如定义为xdataxdata类型)。类型)。类型)。类型)。n C51数据的存储模式数据的存储模式n C51的运算符的运算符1、算术运算2、关系运算3、逻辑运算4、位操作运算q 循环移位指令?#include#include extern unsigned cha

16、r extern unsigned char_ _crorcror_ _(unsigned char,unsigned char);(unsigned char,unsigned char);extern unsigned char extern unsigned char _ _crolcrol_ _(unsigned char,unsigned char);(unsigned char,unsigned char);extern unsigned extern unsigned intint _ _iroriror_ _ (unsigned(unsigned intint,unsigned

17、 char);,unsigned char);extern unsigned extern unsigned intint _ _irolirol_ _ (unsigned(unsigned intint,unsigned char);,unsigned char);extern unsigned long extern unsigned long _ _lrorlror_ _ (unsigned long,unsigned char);(unsigned long,unsigned char);extern unsigned long extern unsigned long _ _lrol

18、lrol_ _ (unsigned long,unsigned (unsigned long,unsigned char);char);n C51的流程控制的流程控制(略)二、MCS-51单片机接口技术例:用单片机设计一台数控方波发生器二、MCS-51单片机接口技术n 2-0 2-0 并行并行IOIO的基本应用的基本应用n 2-1 2-1 键盘控制接口键盘控制接口n 2-2 2-2 显示器控制接口显示器控制接口n 2-3 2-3 定时定时/计数器的使用计数器的使用n 2-4 2-4 串行通信接口串行通信接口n 2-5 2-5 外部总线接口外部总线接口n 2-6 2-6 外部总线接口的应用外部总

19、线接口的应用n单片机的IO功能分为两大类:数字量IO模拟量IO由并行由并行由并行由并行IOIO实现实现实现实现由由AD和和DA模块实模块实现现2-0 并行IO的基本应用基本应用:基本应用:基本应用:基本应用:n 开关量输出控制(继电器、模拟开关、灯泡、发光二极管等)开关量输出控制(继电器、模拟开关、灯泡、发光二极管等)n 开关量输入(开关、按键、开关型传感器(限位开关)等)开关量输入(开关、按键、开关型传感器(限位开关)等)n 波形输出(矩形波、波形输出(矩形波、PWM等)等)复杂控制:复杂控制:复杂控制:复杂控制:n 并行数据并行数据IO控制(数码管、液晶、键盘等)控制(数码管、液晶、键盘等

20、)n 串行数据串行数据IO控制(控制(IIC总线模拟、总线模拟、SPI总线模拟等)总线模拟等)n 第二功能的使用(通用数据总线、外部中断输入等)第二功能的使用(通用数据总线、外部中断输入等)1、并行IO的应用概述注意事项:注意事项:注意事项:注意事项:n 并行并行IO主要用于数字量(开关量)的输入输出,逻辑电平主要用于数字量(开关量)的输入输出,逻辑电平为为CMOS电平,即电平,即1接近于电源电压,接近于电源电压,0接近于接近于0V。n n 使用并行使用并行使用并行使用并行IOIO时应当注意时应当注意时应当注意时应当注意IOIO口的驱动能力!口的驱动能力!口的驱动能力!口的驱动能力!1、IO口

21、的允许电压最大为电源电压,一般为口的允许电压最大为电源电压,一般为5V;2、每个、每个IO口的输出驱动电流,一般不能超过口的输出驱动电流,一般不能超过15mA;3、当被控制的设备(如灯泡,继电器等)需要更大的电、当被控制的设备(如灯泡,继电器等)需要更大的电压或电流时,需要外接驱动电路或者驱动芯片;压或电流时,需要外接驱动电路或者驱动芯片;当输入数字量信号的高电平超过或当输入数字量信号的高电平超过或 低于低于5V时(如工业时(如工业常用常用12V、24V传感器),需使用适当的电平转换电路。传感器),需使用适当的电平转换电路。1、并行IO的应用概述1、并行IO的应用概述驱动驱动电路电路电平转电平

22、转换电路换电路外部数字量输入外部执行机构单片机IO常用简单驱动和转换电路:负载负载 ,例如:灯泡、继电器、,例如:灯泡、继电器、电磁阀、电动机电磁阀、电动机 增大驱动电流(几十增大驱动电流(几十mA 几几A)光耦的功能:光耦的功能:n n 电平转换电平转换电平转换电平转换 输入输出端的逻辑电平大小可以任意转换;n n 电气隔离电气隔离电气隔离电气隔离 输入端和输出端可以使用不同的电源,从而使输入端和输出端隔离,提高抗干扰能力,并为单片机提供一定的保护功能。常用简单驱动电路:使用光耦进行连接使用光耦进行连接2、LED的控制的控制q sbit的使用n 分析电路:1、由图,D3由IO引脚P2.2控制

23、;2、由硬件电路可知,当IO口输出逻辑电平0时对应的LED点亮,当IO口输出逻辑电平1时LED熄灭。例:如上图所示电路图,要求编程控制发光二极管D3点亮。普通发光二极管只需要几个mA的电流就可以点亮#include sbit D3=P22;void main()D3=0;/点亮LED while(1)/循环,挂起 ;n 按要求编程:按要求编程:_ _ _ 引用含有引用含有SFRSFR符号定义的头文件符号定义的头文件 定义符号定义符号D3D3为为P2P2口的第口的第2 2位位 D3D3可以换为其他自定义符号,作可以换为其他自定义符号,作用相同,如:用相同,如:sbitsbit P2_2=P22;

24、P2_2=P22;点亮发光二极管的功能语句点亮发光二极管的功能语句 while(1)while(1)无限循环,用于程序的无限循环,用于程序的反复执行或者程序挂起,很重要!反复执行或者程序挂起,很重要!使用使用tabtab或者空格,使程序结构或者空格,使程序结构清晰,便于阅读清晰,便于阅读 适当加入注释,使编程思路清晰,适当加入注释,使编程思路清晰,便于阅读和后期的修改便于阅读和后期的修改q sbit的使用q while(1)循环#include sbit D3=P22;void main()D3=0;/点亮LED while(1)/循环,挂起 ;while(1)D3=0;可以实现相同的功能q

25、while(1)循环n 如果主函数中没有如果主函数中没有while(1)循环会出现怎么样的情况?循环会出现怎么样的情况?0000H 0200H0201H 02FFH0300H0301H 0FFFH#include ;void main();用用户户代代码码区区域域空闲区域,可能存在随机代码没有while(1)有while(1)q while(1)循环读取按读取按键代码键代码根据按键代码执行相应操作根据按键代码执行相应操作 例:使用单片机作为控制器,设计一个数学计算器。空代码?空代码?无键按无键按下,不下,不执行任执行任何操作何操作数字键?数字键?运算键?运算键?数字数字输入输入 例:使用单片机

26、作为控制器,设计一个数学计算器。void main();while(1);q while(1)循环读取按读取按键代码键代码根据按键代码执行相应操作根据按键代码执行相应操作 获取传感器获取传感器信号信号根据传感器状态执行根据传感器状态执行相应操作相应操作计算器、或其它基于按键操作的设备自动测量仪器、工业自动化控制等设备q while(1)循环while(1);do ;While(1)q while(1)循环 例:如题设所示电路图,要求编程控制发光例:如题设所示电路图,要求编程控制发光二极管二极管D1实现闪烁变化。实现闪烁变化。n 分析电路:1、由图,D1由IO引脚P2.0控制;2、由硬件电路可知

27、,当IO口输出逻辑电平0时对应的LED点亮,当IO口输出逻辑电平1时LED熄灭。q while(1)循环n 按要求编程:按要求编程:#include sbit D1=P20;void main()while(1)/无限循环 D1=0;/点亮 D1=1;/熄灭 问题:n 闪烁频率有多快?人眼能分辨出来吗?n 如何降低频率?比如说使闪烁频率变为每秒闪烁1次。加入延时加入延时加入延时加入延时q while(1)循环q 延时的设计 要求要求:实现发光二极管每秒钟闪烁:实现发光二极管每秒钟闪烁1次次。n 分析设计要求:分析设计要求:1、每秒钟闪烁、每秒钟闪烁1次,即亮次,即亮0.5秒,灭秒,灭0.5秒,

28、如此循环;秒,如此循环;2、设计难点:如何实现、设计难点:如何实现0.5秒的计时(延迟、延时)?秒的计时(延迟、延时)?l 思路之一:思路之一:单片机执行语句需要时间;单片机每条语句执行所需的时间是确定的(指令周期);通过编程使单片机执行一些指令,可以实现延时;晶振为晶振为12MHz12MHz时,时,1 1个机器周期为个机器周期为1us1us,单周期指令的指令周期为单周期指令的指令周期为1us1us双周期指令的指令周期为双周期指令的指令周期为2us2us,依此类推,依此类推设计目标:设计目标:0.5s=500ms=500000us0.5s=500ms=500000us,考虑使用循环语句,考虑使

29、用循环语句unsigned char i,j;for(i=20;i0;i-)for(j=248;j0;j-);MOVR6,#20D1:MOVR7,#248 DJNZR7,$DJNZR6,D1q 延时的设计 MOVR6,#20D1:MOVR7,#248 DJNZR7,$DJNZR6,D1单周期指令,1us单周期指令,1us双周期指令,2us双周期指令,2us设晶振设晶振12MHz12MHz延迟时间计算:延迟时间计算:T =1+20 x(1+248x2)+2)T =1+20 x(1+248x2)+2)=9981 =9981 个机器周期个机器周期 =9.981 ms=9.981 msq 延时的设计n

30、 10ms延迟的编程实现延迟的编程实现unsigned char i,j;for(i=20;i0;i-)for(j=248;j0;j-);设晶振设晶振12MHz12MHzunsigned char i,j;for(i=10;i0;i-)for(j=248;j0;j-);设晶振设晶振6MHz6MHzq 延时的设计n 500ms延迟的编程实现延迟的编程实现设晶振设晶振12MHz12MHzuchar i,j,k;for(k=50;k0;k-)for(i=20;i0;i-)for(j=248;j0;j-);MOVR5,#50D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6

31、,D2DJNZR5,D1q 延时的设计延迟时间计算:延迟时间计算:T =50 x(20 x(248x2+1)+2)+1+2)+1T =50 x(20 x(248x2+1)+2)+1+2)+1 =499151 =499151 个机器周期个机器周期 =499.151=499.151 毫秒毫秒延迟时间计算:延迟时间计算:T 50 x 9.981T 50 x 9.981 0.5 0.5秒秒n 500ms延迟的编程实现延迟的编程实现设晶振设晶振12MHz12MHzuchar i,j,k;for(k=50;k0;k-)for(i=20;i0;i-)for(j=248;j0;j-);应用于延时精度要求一般的

32、场合应用于延时精度要求一般的场合应用于延时精度要求一般的场合应用于延时精度要求一般的场合q 延时的设计l通常设计一个任意通常设计一个任意ms延迟的延迟函数延迟的延迟函数(自定义函数)(自定义函数)void delay(unsigned char ucData)unsigned char i,j,k;for(k=ucData;k0;k-)for(i=20;i0;i-)for(j=248;j0;j-);q 延时的设计 例:如题设所示电路图,要求编程控制发光二极管D1实现闪烁变化,闪烁频率1Hz。n 分析电路分析电路(略)(略)n 按要求编程:按要求编程:#include sbit D1=P20;v

33、oid delay(unsigned char ucData)unsigned char i,j,k;for(k=ucData;k0;k-)for(i=20;i0;i-)for(j=248;j0;j-);void main()while(1)/无限循环无限循环 D1=0;/点亮点亮delay(50);/0.5秒延迟秒延迟 D1=1;/熄灭熄灭delay(50);q 延时的设计q 多个LED的控制,巧用移位指令 n 分析电路:1、由图,D1D8分别由IO引脚P2.0P2.7控制;2、依次循环点亮即:P2.0=P2.1=P2.2=P2.7=P2.0 3、考虑以字节字节字节字节为单位控制IO口状态。

34、例:如题设所示电路图,要求编程控制例:如题设所示电路图,要求编程控制8个个发光二极管以发光二极管以1s的间隔依次循环点亮。的间隔依次循环点亮。#include void delay(unsigned char ucData);void main()while(1)P2=0 xfe;/点亮D1delay(100);P2=0 xfd;/点亮D2delay(100);P2=0 xfb;/点亮D3delay(100);P2=0 xf7;/点亮D4delay(100);P2=0 xef;/点亮D5delay(100);P2=0 xdf;/点亮D6delay(100);P2=0 xbf;/点亮D7 del

35、ay(100);P2=0 x7f;/点亮D8 delay(100);void delay(unsigned char ucData)unsigned char i,j,k;for(k=ucData;k0;k-)for(i=20;i0;i-)for(j=248;j0;j-);n 按要求编程:q 多个LED的控制,巧用移位指令1111101111110111111011111101111111111110111111011011111101111111D1点亮点亮D2点亮点亮D3点亮点亮D4点亮点亮D5点亮点亮D6点亮点亮D7点亮点亮D8点亮点亮考虑使用位左移指令q 多个LED的控制,巧用移位指令

36、#include void delay(unsigned char ucData);void main()unsigned char i,ucTemp;while(1)ucTemp=0 x01;for(i=8;i0;i-)P2=ucTemp;delay(100);ucTemp=ucTemp 1;n 使用移位指令和流程控制语句简化编程 赋初值赋初值 P2P2口输出、口输出、延时、移位延时、移位0000 00011111 11100000 00101111 1101q 多个LED的控制,巧用移位指令q 查表法的使用n 如上题,适当使用移位指令可以简化位操作编程,但如上题,适当使用移位指令可以简化位

37、操作编程,但移位指令不是万能的,有些情况下使用移位指令往往力移位指令不是万能的,有些情况下使用移位指令往往力不从心,如:不从心,如:例:如题设所示电路图,要求编程控制例:如题设所示电路图,要求编程控制8个发光二个发光二极管按如下方式实现变换闪烁:左移两次、右移两极管按如下方式实现变换闪烁:左移两次、右移两次、向外扩展两次、向内收缩两次、闪烁两次。次、向外扩展两次、向内收缩两次、闪烁两次。左移左移左移左移右移右移右移右移向外向外向外向外扩展扩展扩展扩展向内向内向内向内收缩收缩收缩收缩闪烁闪烁闪烁闪烁#include void delay(unsigned char ucData);void ma

38、in()while(1)P2=0 xfe;/点亮D1delay(100);P2=0 xfd;/点亮D2delay(100);;方法一:使用移位指令,可以完成左移、右移的控制,但是在完成向外扩展和向内收缩的控制上比较麻烦。方法二:q 查表法的使用unsigned char code ucTable=0 xFF,0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F,/左移两次 0 xFF,0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F,0 xFF,0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0

39、 xFB,0 xFD,0 xFE,/右移两次 0 xFF,0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0 xFB,0 xFD,0 xFE,0 xFF,0 x18,0 x24,0 x42,0 x81,0 x42,0 x24,0 x18,/扩展两次 0 xFF,0 x18,0 x24,0 x42,0 x81,0 x42,0 x24,0 x18,0 x00,0 xFF,/闪烁两次 0 x00,0 xFF,0 x01 /结束码;n n 查表法:查表法:查表法:查表法:预先将预先将预先将预先将复杂而又有规律复杂而又有规律复杂而又有规律复杂而又有规律的控制代码或者数据定义成一个的控制代码或

40、者数据定义成一个的控制代码或者数据定义成一个的控制代码或者数据定义成一个数组,在程序执行过程中依次访问数组中的数据,可以使数组,在程序执行过程中依次访问数组中的数据,可以使数组,在程序执行过程中依次访问数组中的数据,可以使数组,在程序执行过程中依次访问数组中的数据,可以使用简洁的语句实现复杂的控制动作,从而达到节约程序代用简洁的语句实现复杂的控制动作,从而达到节约程序代用简洁的语句实现复杂的控制动作,从而达到节约程序代用简洁的语句实现复杂的控制动作,从而达到节约程序代码空间、增加程序可读性和便于修改的目的。码空间、增加程序可读性和便于修改的目的。码空间、增加程序可读性和便于修改的目的。码空间、

41、增加程序可读性和便于修改的目的。q 查表法的使用#include unsigned char code ucTable ;void delay(unsigned char ucData);void main()unsigned char i;while(1)i=0;/索引值赋初值while(ucTable i !=0 x01)/不是末尾则输出 P2=ucTable i;/输出控制代码 i+;/索引值加一 delay(100);/延迟1秒 n 按要求编程:预先定义的表预先定义的表示结束的数据示结束的数据n 如何判断数组的如何判断数组的末尾?末尾?1、可以预先定义一可以预先定义一个特定数据,用于个

42、特定数据,用于表示数组的末尾。表示数组的末尾。2、如果已知数组如果已知数组长度,则可以直接长度,则可以直接使用索引值判断;使用索引值判断;q 查表法的使用#include unsigned char code ucTable 56;void delay(unsigned char ucData);void main()unsigned char i;while(1)i=0;/索引值赋初值while(i 56)/不是末尾则输出 P2=ucTable i;/输出控制代码 i+;/索引值加一 delay(100);/延迟1秒 n 按要求编程:n 如何判断数组的如何判断数组的末尾?末尾?1、可以预先定

43、义一可以预先定义一个特定数据,用于个特定数据,用于表示数组的末尾。表示数组的末尾。2、如果已知数组如果已知数组长度,则可以直接长度,则可以直接使用索引值判断;使用索引值判断;q 查表法的使用n 查表法应用的要点:查表法应用的要点:1 1、系统的控制要求可以由一系列、系统的控制要求可以由一系列控制数据控制数据控制数据控制数据表示出来;表示出来;2 2、这些控制数据的、这些控制数据的使用使用使用使用具有一定具有一定规律性规律性规律性规律性,如,如“依次逐个依次逐个使用使用”、或者其他可以用特定的算法表示出来的规律性;、或者其他可以用特定的算法表示出来的规律性;3 3、使用查表法的一半步骤:、使用查

44、表法的一半步骤:a.a.根据设计要求建立控制数据数组根据设计要求建立控制数据数组b.b.对数组的索引变量进行编程控制对数组的索引变量进行编程控制c.c.通过索引变量引用控制数据,完成控制功能通过索引变量引用控制数据,完成控制功能(控制向量、控制参数)(控制向量、控制参数)(控制向量、控制参数)(控制向量、控制参数)q 查表法的使用q 宏的使用#define#define 语句的应用语句的应用n n 宏的定义宏的定义 此处使用#define语句定义了一个符号常量PI,它的值是3.1415926。n n 宏的使用宏的使用 定义好符号常量PI后,在编程中使用这个符号,它就等价于3.1415926。如

45、:a=PI+2;a=PI+2;等价于等价于 a=3.1415926+2;a=3.1415926+2;例:#define PI 3.1415926宏的一种宏的一种宏的一种宏的一种n 宏的分类:宏的分类:1 1、固定不变的宏固定不变的宏固定不变的宏固定不变的宏 这一类宏所代表的值或表达式在整个这一类宏所代表的值或表达式在整个C文件中始终保文件中始终保持不变。持不变。如如:#define CONST 20#define uchar unsigned char#define D1_ON P2_1=02 2、带有参数的宏带有参数的宏带有参数的宏带有参数的宏 这一类宏所代表的表达式根据所传递的参数的不同而

46、这一类宏所代表的表达式根据所传递的参数的不同而发生变化。它与函数的形式类似,但有着本质的区别。发生变化。它与函数的形式类似,但有着本质的区别。如如:#define setbit(var,bit)var|=(0 x01(bit)#define#define 语句的应用语句的应用q 宏的使用2 2、带有参数的宏带有参数的宏带有参数的宏带有参数的宏#define setbit(var,bit)var|=(0 x01 i=1;k|=(0 x01(i+1);q 宏的使用n 宏的意义:宏的意义:替换替换n 几个常用的宏几个常用的宏#define uchar unsigned char#define uin

47、t unsigned int#define ulong unsigned long#define 符号常量名 常量(数字或字符等)#define CONST 20a=a+CONST;#define setbit(var,bit)var|=(0 x01(bit)setbit(P2,1);P2P2|=(0 x01 (|=(0 x01 (1 1););a=a+a=a+2020;q 宏的使用小结:并行IO的基本应用1 1、并行、并行IOIO的应用概述的应用概述并行IO的应用领域IO驱动电路和电平转换电路2 2、LEDLED的编程控制的编程控制2-1 sbit的使用2-2 while(1)循环2-3 延

48、时的设计2-4 多个LED的控制,巧用移位指令2-5 查表法的使用2-6 宏的使用二、MCS-51单片机接口技术n 2-0 2-0 并行并行IOIO的基本应用的基本应用n 2-1 2-1 键盘控制接口键盘控制接口n 2-2 2-2 显示器控制接口显示器控制接口n 2-3 2-3 定时定时/计数器的使用计数器的使用n 2-4 2-4 串行通信接口串行通信接口n 2-5 2-5 外部总线接口外部总线接口n 2-6 2-6 外部总线接口的应用外部总线接口的应用2-1 键盘接口1、按键的作用:按键是单片机系统与操作人员之间交互重要组件,用于完成操作人员对单片机系统的输入控制。(开关)(开关)(按键)(

49、按键)2、按键的控制方法、按键的控制方法q 单个按键的控制 当单片机系统所需的按键数量比较少时,往往采用一当单片机系统所需的按键数量比较少时,往往采用一个个IO引脚控制一个按键的接口方式。引脚控制一个按键的接口方式。n 如图:按键按下时,P0.0输入为0按键松开时,P0.0输入为1n 图中,按键和电阻可以交换位置,交换后输入逻辑刚好相反。例:如题设所示电路图,要求编程对按键次数进行计数,按一下键,计数值加一。n 分析电路:1、按键由P2.0控制;2、按键按下时为0,按键松开时为1;因此判断是否按下按键,只要判断P2.0口输入是否为0即可。n 单个按键的控制 11 00未按键按下按键松开 11键

50、按下时键按下时P2.0P2.0口的逻辑电平变化:口的逻辑电平变化:人为按键通常按下时间为几百毫秒。n 单个按键的控制#include#define uchar unsigned charsbit KEY=P20;void delay(uchar ucData);void main()uchar ucCounter;ucCounter=0 x00;/计数初值 KEY=1;KEY=1;/准双向口 while(1)if(KEY=0)ucCounter+;/计数值加一delay(30);delay(30);/延迟300ms 按要求编程:P2P2口是口是准双向口准双向口,所以用,所以用作输入时,应当先向

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁