单片机应用技术项目教程(C语言版)课件02.项目二 LED循环点亮_第1页
单片机应用技术项目教程(C语言版)课件02.项目二 LED循环点亮_第2页
单片机应用技术项目教程(C语言版)课件02.项目二 LED循环点亮_第3页
单片机应用技术项目教程(C语言版)课件02.项目二 LED循环点亮_第4页
单片机应用技术项目教程(C语言版)课件02.项目二 LED循环点亮_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目二

LED循环点亮教学目的掌握P0、P1、P2和P3功能及应用技能;掌握内部数据存储器的地址分配及特殊功能寄存器;掌握C语言数据类型、常量和变量;会利用单片机I/O口实现开关控制LED循环点亮和步进电机控制。

LED控制电路控制八只发光二极管按一定的规律循环点亮工作过程P1口接发光二极管(LED)的阴极,P1口的管脚输出低电平时对应的发光二极管点亮。问题:

LED采用的是共阴极接法还是共阳极接法?为什么P1口的管脚输出低电平,对应的发光二极管点亮?通过程序按一定的规律向P1口的管脚输出低电平和高电平,控制八只发光二极管循环点亮。问题:程序怎么使P1口的管脚循环输出低电平和高电平?LED循环点亮功能实现分析

由于LED循环点亮电路的LED是采用共阳极接法,这样我们就可以通过“0”和“1”来控制LED的亮和灭。例如:在P1口输出十六进制数0xfe(二进制11111110B),D1被点亮。LED循环点亮功能实现过程如下:8个LED全灭,控制码为0xff;D1点亮,P1口输出0xfe,取反为0x01(二进制00000001B),初始控制码为0x01;D2点亮,P1口输出0xfd,取反为0x02(二进制00000010B),控制码为0x02;D3点亮,P1口输出0xfb,取反为0x04(二进制00000100B),控制码为0x04;……D8点亮,P1口输出0x7f,取反为0x80(二进制10000000B),控制码为0x80;重复第二步,这样就可以实现LED循环点亮。LED控制程序(C语言)Voidmain(){unsignedchari;unsignedchartemp;P1=0xff;//十六进制全1,熄灭所有LEDwhile(1){temp=0x01;//第一位为1for(i=0;i<8;i++){P1=~temp;//temp值取反送P1口

Delay();temp=temp<<1;//temp值左移一位

}}思考

如何改变循环点亮的方向?并行I/O端口电路

单片机有4组8位并行I/O端口,称为P0口、P1口、P2口和P3口;每个端口都各有8条I/O口线,每条I/O口线都能独立地用作输入或输出;P0口负载能力为8个TTL门电路,P1口、P2口和P3口负载能力为4个TTL门电路;归入特殊功能寄存器之列,具有字节寻址和位寻址功能。P0口的结构由1个数据输出锁存器(D触发器)、2个三态数据输入缓冲器、1个输出控制电路和1个输出驱动电路组成。输出控制电路由1个转换开关MUX、1个与门及1个非门组成;输出驱动电路由一对场效应管(V1和V2)组成,其工作状态受输出控制端的控制。P0口有两种功能通用I/O口地址/数据分时复用总线

P0口作通用I/O口使用作为通用的I/O口使用时,内部的控制信号为低电平,封锁与门,将输出驱动电路的上拉场效应管(V1)截止,同时使多路转接电路MUX接通锁存器Q端的输出通路。注意

当P0口进行一般的I/O输出时,由于输出电路是漏极开路电路,因此必须外接上拉电阻才能有高电平输出;当P0口进行一般的I/O输入时,必须先向电路中的锁存器写入“1”,使场效应管(V2)截止,以避免锁存器为“0”状态时对引脚读入的干扰,因为如果V2管是导通的,不论P0.X引脚上的状态如何,输入都会是低电平,将导致输入错误。P0口作地址/数据分时复用总线使用

当输出地址或数据时,由内部发出控制信号,打开上面的与门,并使多路转接电路MUX将内部地址/数据线与驱动场效应管(V2)接通。若地址/数据线为1,则V1导通,V2截止,P0口输出为1;反之V1截止,V2导通,P0口输出为0。而当输入数据时,读引脚使三态数据输入缓冲器打开,数据信号则直接从引脚通过数据输入缓冲器进入内部总线。P1口的结构P1口通常作为通用I/O口使用的,在电路结构上与P0口有一些不同之处:首先它不再需要多路转接电路MUX;其次是电路的内部有上拉电阻,与场效应管共同组成输出驱动电路。P1口工作过程当作为输出口时,1写入锁存器,Q(非)=0,场效应管截止,内部上拉电阻将电位拉至“1”,此时该口输出为1,当0写入锁存器,Q(非)=1,场效应管导通,输出则为0。当作为输入口时,必须先向锁存器写1,Q(非)=0,场效应管截止,此时该位既可以把外部电路拉成低电平,也可由内部上拉电阻拉成高电平。P2口的结构它由一个数据输出锁存器(D触发器)、两个三态数据输入缓冲器、一个转换开关MUX、一个数据输出驱动电路和控制电路组成。P3口当作为I/O使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。当输出第二功能信号时,该位的锁存器应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。

【技能训练2-1】P0口外接上拉电阻

本电路设计和模块三LED循环点亮电路基本一样,差别是:使用了排阻、P0口接LED的阴极以及在P0口和LED阴极之间外接了上拉电阻排阻

八个电阻的功能是完全一样的,加工到一个器件里面,这个器件通常称之为排阻。为了在电路板上占很小的地方,方便安装和生产,在电路设计时常常选择排阻。PR1和PR2都是排阻,阻值分别为4.7K*8和220Ω*8。PR1排阻是上拉电阻,其功能是在这个引脚没有信号的时候,起到电位上拉的作用。PR2和普通的电阻用途没有任何不同,在这里面起到限流作用,使通过LED的电流被限制在十几个毫安左右。

AT89C51内存空间

内部程序存储器(FLASH)4K字节外部程序存储器(ROM)64K字节内部数据存储器(RAM)256字节外部数据存储器(RAM)64K字节低128个字节

寄存器区(单元地址为00H~1FH)共有4组寄存器,每组8个寄存单元,各组都以R0~R7作寄存单元编号。位寻址区(单元地址为20H~2FH)既可作为一般RAM单元使用,进行字节操作,也可以对单元中每一位进行位操作。用户区(单元地址为30H~7FH)供用户使用的一般RAM区,没有任何规定或限制,一般应用中常把堆栈开辟在此区中。高128个字节

高128单元是供给专用寄存器使用的,也称为特殊功能寄存器,单元地址为80H~FFH。特殊功能寄存器位地址空间

复位后内部各寄存器的数据值

PSW程序状态字

用于存放程序运行中的各种状态信息。CY(PSW.7):高位进位标志位。常用“C”表示。AC(PSW.6):辅助进位标志位。F0(PSW.5):用户标志位。RS1(PSW.4):寄存器组选择位1。RS0(PSW.3):寄存器组选择位0。OV(PSW.2):溢出标志位。-(PSW.1):保留位,无定义。P(PSW.0):奇偶校验位,若累加器(A)中的“1”的位个数是奇数个则P=1,偶数个则P=0。寄存器组的选择

ACC累加器8位寄存器,是最常用的专用寄存器,功能较多,地位重要。既可用于存放操作数,也可用来存放运算的中间结果。MCS-51单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累加器。。B寄存器B寄存器是一个8位寄存器,主要用于乘除运算。乘法运算时,B存乘数。乘法操作后,乘积的高8位存于B中。除法运算时,B存除数。除法操作后,余数存于B中。此外,B寄存器也可作为一般数据寄存器使用。PC程序计数器作用是控制程序的执行顺序。其内容为将要执行指令的地址,寻址范围达64KB。PC有自动加1功能,从而实现程序的顺序执行。PC没有地址,是不可寻址的,因此用户无法对它进行读写,但可以通过转移、调用、返回等指令改变其内容,以实现程序的转移。地址不在SFR(专用寄存器)之内,一般不计作专用寄存器。DPTR数据指针数据指针为16位寄存器。编程时,DPTR既可以按16位寄存器使用,也可以按两个8位寄存器分开使用,即:

DPH:

DPTR高位字节

DPLDPTR低位字节SP堆栈指针堆栈是一个特殊的存储区,用来暂存数据和地址,它是按“先进后出”的原则存取数据的。堆栈共有两种操作:进栈和出栈。

问题:复位后,SP的值是多少?为什么,堆栈通常设在用户区(30H~7FH)?中断源向量地址

“头文件包含”处理

所谓“头文件”是指一个文件将另外一个文件的内容全部包含进来。头文件一般在C:\KELL\C51\INC下,INC文件夹里面有不少头文件,并且里面还有很多以公司分类的文件夹,里面也都是相关产品的头文件。在单片机中用C语言编程时,往往第一行就是头文件或者其它的自定义头文件。特殊功能寄存器在AT89X52.H中定义

符号P1_0表示P1.0引脚

程序存储器

程序存储器是用于存放用户程序、数据和表格等。它是以程序计数器PC作为地址指针,MCS-51的程序计数器PC是16位的,所以MCS-51具有64KB程序存储器寻址空间。对于内部无ROM的8031单片机,它的程序存储器必须外接,空间地址为64kB,此时单片机的EA端必须接地,强制CPU从外部程序存储器读取程序。对于内部有ROM的单片机,正常运行时,则需接高电平,使CPU先从内部的程序存储中读取程序,当PC值超过内部ROM的容量时,才会转向外部的程序存储器读取程序。MCS-51ROM配置图

当EA=1时,程序从内部ROM开始执行,当PC值超过内部ROM容量时会自动转向外部ROM空间。当EA=0时,程序从外部存储器开始执行。51子系列ROM配置图52子系列ROM配置图

具有特殊功能的地址

启动地址单片机启动复位后,程序计数器的内容为0000H,所以系统必须从0000H单元开始执行程序。因而0000H是启动地址,也称为系统程序的复位入口地址。中断服务程序入口地址是专门用于存放中断服务程序的地址单元,中断响应后,按中断的类型,自动转到各自的入口地址去执行程序。

中断源入口地址外部中断00003H定时/计数器0000BH外部中断10013H定时/计数器1001BH串行中断0023H*定时器2溢出或T2EX(P1.1)端负跳002BH工作模块4开关控制LED循环点亮

用P3.0作输入接开关SW,P1口作输出接8个LED,通过开关SW控制LED循环点亮。开关SW打开,LED循环点亮,开关SW合上,LED停止循环点亮。

开关控制LED循环点亮程序

#include<AT89X52.H>//包含AT89X52.H头文件sbitSW=P3^0;//定义SW是P3.0位对应的变量名voidmain(){unsignedchari;unsignedchartemp;P1=0xff;//十六进制全1,熄灭所有LEDwhile(1){temp=0x01;//第一位为1for(i=0;i<8;i++){while(SW!=0);P1=~temp;//temp值取反送P1口

Delay();temp=temp<<1;//temp值左移一位}}}C51数据类型

C51定义了标准C语言的所有数据类型;同时对标准C语言进行了扩展,更加注意对系统资源的合理利用,如表所示。

数据类型长度数值范围unsignedchar1字节0~255char1字节-128~+127unsignedint2字节0~65535int2字节-32768~+32767unsignedlong4字节0~4294967295long4字节-2147483648~+2147483647float4字节±1.175494E-38~±3.402823E+38*1~3字节对象的地址bit位0或1sfr1字节0~255sfr162字节0~65535sbit位0或1C51基本数据类型

char字符类型长度是一个字节(8位)int整型长度为两个字节(16位)long长整型长度为四个字节(32位)float浮点型长度为四个字节(32位)*指针型指针型本身就是一个变量,在这个变量中存放的是指向另一个数据的地址。这个指针变量要占据一定的内存单元,在C51中它的长度一般为1~3个字节。

C51扩展的数据类型

bit位变量sfr特殊功能寄存器sfr1616位特殊功能寄存器sbit可寻址位bit位变量

bit位变量可以将与MCS-51硬件特性操作有关的定义成位变量。位变量必须定位在MCS-51单片机内部RAM的位寻址空间中。但不能定义位指针,也不能定义位数组。bit位变量的值就是一个二进制位,不是0就是1,类似True和False。例如:bitflag;//flag为bit位变量,其值是0或1sfr特殊功能寄存器这种定义方法与标准C语言不兼容,只适用于对MCS-51系列单片机进行C语言编程。Sfr占用一个字节,数值范围为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。特殊功能寄存器C51定义的一般语法格式如下:sfr

特殊功能寄存器名=特殊功能寄存器的字节地址;例如:

sfrP1=0x90;这一句定义了P1为P1端口在内部的寄存器。又如:

sfr

SCON=0x98;

//串口控制寄存器,地址为0x98

sfr

TMOD=0x89;

//定时器/计数器方式控制寄存器sfr1616位特殊功能寄存器sfr16占用两个字节。在许多新的MCS-51系列单片机中,有时会使用两个连续地址的特殊功能寄存器来指定一个16位的值。如52子系列的定时器/计数器2。为了有效地访问这类SFR,可使用关键字“sfr16”来定义,16位SFR定义语句的语法格式与8位SFR相同,只是“=”后面的地址必须用16位SFR的低字节地址,即低字节地址作为“sfr16”的定义地址。例如:

sfr16

T2=0xCC

//定时器/计数器2:T2低8位地址为0xCC,T2高8位地址为0xCD注意:这种定义适用于所有新的16位SFR,不能用于定时器/计数器0和1。sbit可寻址位C51的扩充功能支持特殊位的定义,与SFR定义一样,关键字“sbit”用于定义某些特殊位,利用它可以访问芯内部部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。如先前我们定义:

sfrP1=0x90;因P1端口的寄存器是可位寻址的,所以我们可以定义:

sbitP1_1=P1^1;

//P1_1为P1中的P1.1引脚这样我们在以后的程序语句中就可以用P1_1来对P1.1引脚进行读写操作了。在C语言里,由于P1.1不是一个合法的C语言变量名,得给它另起一个名字,这里起的名为P1_1,所以必须给它们建立联系,这里使用了C51的关键字sbit来定义sbit的用法有三种格式第一种格式sbit

bit-name=sfr-name^intconstant;其中“bit-name”是一个寻址位符号名,该位符号名必须是MCS-51单片机中规定的位名称;“sfr-name”必须是已定义过的SFR的名字;“^”后的整常数是寻址位在特殊功能寄存器“sfr-name”中的位号,必须是0~7范围中的数。例如:sfr

PSW=0xD0;

//定义PSW寄存器地址为0xD0sbit

OV=PSW^2;

//定义OV位为PSW.2,地址为0xD2sbit

CY=PSW^7;

//定义CY位为PSW.7,地址为0xD7sbit的用法有三种格式第二种格式:sbit

bit-name=intconstant^intconstant;其中“=”后的intconstant为寻址地址位所在的特殊功能寄存器的字节地址;“^”符号后的intconstant为寻址位在特殊功能寄存器中的位号。例如:sbit

OV=0xD0^2;

//定义OV位地址是0xD0字节中的第2位sbit

CY=0xD0^7;

//定义CY位地址是0xD0字节中的第7位sbit的用法有三种格式第三种格式:sbit

bit-name=intconstant;其中“=”后的intconstant为寻址位的绝对位地址。例如:sbit

OV=0xD2;

//定义OV位地址为0xD2sbit

CY=0xD7;

//定义CY位地址为0xD7

C语言常量与变量常量是在程序运行过程中不能改变的,而变量是可以在程序运行过程中不断变化的。变量的定义可以使用所有C51编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位变量。

常量

常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有几种,下面来加以说明。#difineFalse0x0;//用预定义语句可以定义常量#difineTrue0x1;//这里定义False为0,True为1程序中用到False和True,在编译时,False替换为0,True替换为1。unsignedintcodea=100;//用code把a定义在程序存储器中并赋值constunsignedintc=100;//用const定义c为无符号int常量并赋值以上两句它们的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的,所以如果在这两句后面用了类似a=110,a++这样的赋值语句,编译时将会出错。变量

变量就是一种在程序执行过程中其值能不断变化的。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:[存储种类]数据类型[存储器类型]变量名表在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类存储种类有四种自动(auto),缺省类型为自动(auto)外部(extern)静态(static)寄存器(register)

存储器类型

存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。存储器类型说明data直接访问内部数据存储器(128字节),访问速度最快bdata可位寻址内部数据存储器(16字节),允许位与字节混合访问idata间接访问内部数据存储器(256字节),允许访问全部内部地址pdata分页访问外部数据存储器(256字节),用MOVX@Ri指令访问xdata外部数据存储器(64KB),用MOVX@DPTR指令访问code程序存储器(64KB),用MOVC@A+DPTR指令访问存储模式

SMALL存储模式把所有函数变量和局部数据段放在8051系统的内部数据存储区,这使访问数据非常快。在写小型的应用程序时,变量和数据放在data内部数据存储器中是很好的,因为访问速度快;但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区,最多可有256字节。LARGE存储模式所有函数和过程的变量和局部数据段都定位在8051系统的外部数据区,最多可有64KB。工作模块5步进电机控制

工作任务

使用AT89S52单片机,由P1口的P1.0、P1.1、P1.2和P1.3四个引脚通过步进电机驱动电路分别接在四相步进电机的四相绕组,步进电机的励磁方式采用四相双四拍,通过程序控制步进电机正转。

认识步进电机

步进电动机是“一步一步”的转动的一种电动机。电源输入的电信号是脉冲信号(脉冲电压),每输入一个电脉冲,电动机就转过一个固定角度。故而,也称为脉冲电动机。步进电机的结构

步进电机是利用输入数字信号转换成机械能量的电气设备。以内部线圈绕线来区分步进电机,有4相和5相两种,使用5V及12V电源控制。一般来说,4相步进电机又称为2相双绕组步进电机,是最常用的一种电机。步进电机的工作过程

每输入一个脉冲信号,步进电机固定旋转一个步进角。例如:若步进角为1.8

的步进电机,如果输入200个脉冲信号,步进电机就会旋转200个步进角,且刚好转一圈(200

1.8

=360

)。由于步进电机旋转角度与输入脉冲数目成正比,只要控制输入的脉冲数目便可控制步进电机转动角度。因此,合适的回路控制常用于精确定位和精确定速。步进电机线圈励磁的方式DC电流通过定子线圈建立磁场,称为励磁。步进电机励磁顺序:1相励磁顺序;2相励磁顺序;1-2相励磁顺序。2相励磁顺序4相:表示电动机有四相绕组,分别为A、B、/A、/B绕组。2相励磁:表示每一种励磁状态都有两相绕组励磁。2相励磁顺序:四种励磁状态为一个循环。只要改变励磁顺序,就可以改变步进电机旋转方向。

正转:(A、B)→(B,/A)→(/A,/B)→(/B,A)→(A,B)反转:(A、B)→(/B,A)→(/A,/B)→(B,/A)→(A,B)步进电机控制电路设计

步进电机驱动电路由ULN2003A和74LS04构成,其中ULN2003A驱动器是一个高电压、大电流的达灵顿对数组。由于ULN2003A的输入与TTL电平兼容,所以一般能直接连接到驱动组件或是负载上,例如:继电器、电机或是LED显示器等。电机正转功能实现分析

控制状态P1口控制码P1.3P1.2P1.1P1.0D相C相B相A相A相、B相绕组通电03H0011B相、C相绕组通电06H0110C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论