单片基础技术 7_第1页
单片基础技术 7_第2页
单片基础技术 7_第3页
单片基础技术 7_第4页
单片基础技术 7_第5页
已阅读5页,还剩35页未读, 继续免费阅读

下载本文档

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

文档简介

《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作LED又名发光二极管,是仪器、仪表常用指示元件。在本项目中,主要讲解单片机I/O的基本使用方法,通过编程控制LED的亮灭顺序和时间,以实现不同的显示效果。

任务一

实现LED闪烁效果在日常生活中,有各种各样的闪烁灯,有起警示作用的,如汽车转向灯、十字路口交通信号灯,也有有起装饰或娱乐作用的,如宾馆、商店门口的装饰灯、儿童玩具等,图1-1所示为生活中的各种闪烁灯。图1-1各种闪烁灯《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1一、任务描述利用单片机的P0口作为输出口,完成LED驱动电路的设计,同时编写程序,实现LED闪烁效果。二、相关知识1.LED发光二极管LED发光二极管是几乎所有的单片机系统都要用到的显示器件,常见的LED发光二极管主要有红色、绿色、蓝色等单色发光二极管,另外还有能发红色和绿色光的双色二极管,能发红、绿、蓝三种光的三基色真彩二极管,常见的发光二极管如图1-2所示,其中左图绿色发光二极管,右图为双色发光二极管。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果12.单片机P0口结构MCS-51单片机P0口的内部结构如图1-3所示,主要由一个数据输出锁存器、两个三态缓冲器,一个多路转换开关MUX,一个输出驱动电路(两个场效应晶体管FET)组成。(1)作为输出口当P0用作输出口时,因输出级处于开漏状态,必须外接上拉电阻,当“写锁存器”信号加在锁存器的时钟端CLK上,此时D触发器将“内部总线”上的信号反相后输出到/Q端,若D端信号为0,/Q=1,T2导通,P0.X引脚输出“0”;若D端信号为1,/Q=0,T2截止,虽然T1截止,因P0.X引脚已外接上拉电阻,P0.X引脚输出“1”。(2)作为输入口当P0用作输入时,必须保证T2截止。因为若T2导通,则从P0口引脚上输入的信号被T2短路。为使T2截止,必须先向该端口锁存器写入“1”,/Q=0,T2截止。输入信号从P0.X引脚输入后,先进入输入缓冲器。CPU执行端口输入指令后,“读引脚”信号使缓冲器开通,输入信号进入内部数据总线。图1-3

P0口内部结构《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果13.电阻排

在单片机实训板中,我们使用了电阻排。在图1-8中一共有8个发光二极管,每个管子上串连一个电阻,然后电阻的另一端接电源,因为8个管子的接法相同,所以我们把8个电阻的另一端全部连接在一起,这样一来,便共有9个引脚,其中一个称为公共端,如图2-4所示。

电阻排在公共端附近会有一个白色的圆点做为标记,同时在排阻上都标有阻值号,比如681表示其阻值大小为68*101Ω,即680Ω,102表示其阻值大小为10*102Ω,即1KΩ。有时也会看到标号为1002,1001等,1002表示100*102Ω,即10

KΩ,1001表示100*101Ω,即1KΩ。标号位数不同,其电阻的精度也不同,一般地,3位数表示5%精度,4位数表示1%精度。图1-4直插式电阻排《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果14.单片机C语言编程知识C语言是美国贝尔实验室于20世纪70年代初研制出来的,后来又被多次改进,并出现多种版本,如MicrosoftC、TurboC、BorlandC等。人们在进行单片机开发时,为了提高编程效率也开始使用针对单片机的C语言,一般称为C51语言。(1)文件包含及头文件的作用

1)文件包含

文件包含是指一个源文件将另外一个源文件的全部内容包含进来。常用于函数的声明、宏定义、全局变量的定义、外部变量的声明等。如图1-5所示。

文件包含有两种形式:#include<>和#include“”

#include<>是指调用的文件在系统目录中,即编译软件的安装目录中。#include“”是指调用的文件在自己编写的源文件目录中,如果这个地方没有,则再从系统目录中去寻找。#include“”可以完全取代#include<>,反之则不行。但是为了编译速度最快,通常使用#include<>,也使读者一目了然头文件的来源。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果12)头文件

在代码中引用头文件,其实际意义就是将这个头文件中的全部内容放到引用头文件的位置处,免去我们每次编写同类程序都要将头文件中的语句重复编写。

要想打开头文件reg51.h查看其内容,可以在Keil软件的安装路径/C51/INC目录下找到并以记事本打开,也可以在将鼠标移到#include<reg51.h>上,单击右健,选择“Opendocument<reg51.h>”。reg51.h文件的部分内容如下:从reg51.h文件可以看到,该头文件中定义了51系列单片机内部所有的功能寄存器用到了两个关键字:sfr和sbit。sfr:特殊功能寄存器的声明,声明一个8位的寄存器。Sbit:位声明声明一个可寻址位。

“sfrP0=0x80”语句的意义是,把单片机内部地址0x80这个寄存器重新起名叫P0,以后我们在程序中可直接使用名字P0来操作地址0x80这个寄存器。sbit和sfr功能基本相同,只不过sbit声明的是位名称。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1(2)主程序main函数int表示main函数的返回值是int(即整数)型,int可以省略。如果在main函数中不加返回语句的话,默认返回0。

小括号中的内容表示函数的参数,void表示无参数,无参数表示该函数不带任何参数,也可以只写“()”。

main函数后面的花括号中的内容就是这个函数的所有代码。每条独立语句的末尾都要加上分号,一行可以写多条语句。

任何一个单片机C程序有且只有一个main函数,它是整个程序开始执行的入口,不论main放在程序中的哪个位置,总是先被执行。main函数可以调用别的功能函数,但其他功能函数不允许调用main函数。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果15.流程图

对于简单的程序,可以直接编写源程序,而对于复杂的程序,往往不能直接完成源程序的编写,为了把复杂的工作变得条理化、直观化,通常在编写程序之前先设计流程图。

所谓流程图,就是用带箭头的线把矩形框、菱形框和圆角矩形框等连接起来,以表示实现这些步骤或过程的顺序。

流程图中常用的符号如图1-6所示。图1-6

流程图常用符号《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1三、任务实施1.LED驱动电路设计要使LED二极管能够正常发光,必须满足两个条件:(1)二极管应正向偏置,即正极接高电位,负极接低电位。(2)二是二极管要流过足够大的工作电流。不同的LED二极管工作电流是不一样的,普通二极管工作电流10mA,超亮二极管工作电流20mA左右,不同颜色的发光二极管压降也不一样,比如红色:2.0V-2.2V、黄色:1.8V-2.0V、白色:3.0V-4V、蓝色:3.0V-4V、绿色:2.0V-2.2V等。限流电阻的计算公式为:

限流电阻阻值=(电源电压-二极管压降)/二极管工作电流LED驱动分为低电平点亮和高电平点亮两种。由于MCS-51单片机中Pl--P3口内部上拉电阻较大,引脚输出高电平电流IOH很小(为30—60uA)。而输出低电平时,端口内部下拉MOS管导通,可吸收1.6--15mA的灌电流,负载能力较强。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1

在图2-7所示的电路中,对led3、led4的高电平驱动是错误的,因为单片机提供不了点亮LED的输出电流。

正确的高电平驱动电路如图1-7中led5所示。

因为高电平驱动时需要另加一NPN型三极管,所以在实际电路设计中,一般采用低电平驱动方式。图1-7

LED驱动电路《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1在本项目中,我们使用单片机实训板来实现LED广告灯的效果,电路原理图如图2-8

所示。其中RP1为9脚电阻排,阻值为1K。图1-8

实训板LED原理图《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果12.程序设计(1)编程思路

要实现LED闪烁的效果,其实就是控制LED的亮灭。

在前面我们讲到,要使LED发光二极管发光,要满足两个条件,一是LED发光二极管两端加合适的电压,二是流过足够的电流。

在单片机实训板中,限流电阻已经是计算好的,已保证电流足够,因此,要使LED发光二极管发光,只需在其两端加上合适的电压即可,即对应的引脚输出低电平。开始P0.0输出低电平延时P0.0输出高电平延时图1-9

LED闪烁效果流程图《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1(2)

参考程序在本任务中,参考程序如下所示。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1(3)闪烁效果调试参考绪论中所讲的内容,在Keil软件中建立“led_shanshuo”项目,输入参考程序并添加程序文件到项目中。完成后,进行Keil软件的编译参数设置。1)编译参数设置在"Target1"上单击右键选择OptionsforTarget'Target1'或选择菜单命令[Project]--

[OptionsforTarget'Target1],弹出“OptionsforTarget‘Target1’”对话框。如图1-10

所示。图1-10打开“OptionsforTarget'Target1”'对话框《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1使用OptionsforTarget'Target1'对话框设定目标的硬件环境。如图1-11所示。图1-11“OptionsforTarget'Target1”'对话框《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1OptionsforTarget“Target

1”对话框有多个选项页,一般情况下按缺省设置,下面介绍几个需用户自己设置的选项。设置在编译、连接程序时自动生成机器代码文件(.HEX),因为默认是不输出HEX代码的,所以需用户设置。单击“Output”中选项,在弹出的“Output对话框”中勾选“CreateHEXFile”选项(如下图所示),使程序编译后产生HEX代码文件(默认文件名为项目文件名,也可以在“NameofExecutable”信息框中输入HEX文件的文件名),点击“确定”按钮。为便于文件管理,可选择“SelectFolderforObjects”设置输出文件的存放路径,本项目存放路径为“E:\单片机教材\教材资料\工程项目\led_shanshuo\outfile\”,单击“OK”按钮,结束设置。如图1-12

所示。图1-12输出代码路径设置《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果12)生成目标程序文件在设置好工程,输入程序后,即可进行编译、连接。选择菜单[project]--[buildtarget],对当前工程进行连接,如果当的文件已修改,软件会先对该文件进行编译,然后再连接以产生目标代码;如果选择“RebuildAlltargetfiles”将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,

编译过程中的信息将出现在输出窗口中的Build页中,如果源程序中有语法错误,会有错误报告出现,双击该行,可以定位到出错的位置,可对源程序修改。编译成功后会自动生成名为led_shanshuo.hex的文件,如图1-13

所示。图1-13

程序编译《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果13)下载调试程序运行“STC-ISP.exe”软件,将编译好的程序通过串行口下载到单片机实训板中,观查LED闪烁效果。改变delay()延时函数的参数值,即可改变LED闪烁的快慢。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务一实现LED闪烁效果1任务二实现LED流水效果当夜幕降临时,在许多城市的道路上,到处都是光彩夺目、变幻无穷的霓虹灯,产生着各种各样的效果,非常好看,如图1-14所示。其中有一种效果,灯管一个一个地轮流点亮,到头后全部熄灭;然后再从第一个重新显示,这称之为流水灯。在本任务中,我们将单片机实训板中实现流水灯的效果。图1-14变幻无穷的霓虹灯《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2一、任务描述在本任务中单片机的P0作输出口,接8个LED发光二极管,通过向P0口不停的赋值、延时来实现流水的效果。

二、相关知识1.while循环语句

while循环语句是常用的条件循环语句,可用来做固定次数的循环程序和不定次数的循环程序,其常见语法格式如下:其执行过程是:先判断循环条件是否满足,如果满足则执行循环体的内容,执行完之后自动返回继续判断循环条件,如果满足则继续执行。如果条件不满足,则跳出while语句,执行后面的语句。在主程序序中使用while(1){语句1},是让while(1)所包含的花括号中语句永远循环执行称为死循环。单片机程序的主程序都是一个死循环程序,以便能不停地输出控制信号、接收输入信号和更新一些变量的值,保证程序的正常运行。《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果22.“=”运算符

控制单片机I/O口输出,在C语言中非常简单,只需要使用“=”运算符就可以了。

“=”运算符是赋值运算符,它的作用是把“=”右边的值赋给“=”左边的变量。

例如,如果想让单片机的P0口的P0.0口线输出高电平,另外七个口线输出低电平,写做:P0=0x01;但是如果只想让P0.0口线输出低电平,而另外七个口线不受影响,可以使用位操作:P0^0=0;。

C语言中,关键字和变量在书写时是要区分大小写的,由于在reg51.h头文件中,定义P0的语句sfrP0=0x80;其中字母P是大写,书写P0时的字母P一定要大写,否则,编译器将无法识别而出现错误。

《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果23.注释

为了增加程序的可读性,往往给程序添加必要的文字说明,这就是注释。注释是方便人们读程序而写的,是给人看的,对编译和运行不起作用。注释可以在程序的任何位置。C语言中,注释分为行注释和段注释两方式:1)行注释以“//”符号开始,符号之后的语句都被视为注释,直到有回车换行。2)段注释是指在“/*”和“*/”符号之内的为注释。例如:《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果24.移位运算符和循环移位函数(1)移位运算符移位运算符能够对变量中的数进行移位运算,包括左移位运算符“<<”和右移位运算符“>>”,其格式如下:a=a>>1;

//将变量a中的数右移l位后赋给aa=a<<2;

//将变量a中的数左移2位后赋给a

移位运算示意图如图1-15所示(注意移位后末位补“0”)。

a)左移位运算

b)右移位运算

图1-15移位运算示意图《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2

(2)循环移位函数

循环移位函数能够对变量中的数进行循环移位,属于MCS-51单片机内部函数,需要包含头文件“INTRINS.H”。下面以字符型变量的循环移位函数为例来说明循环移位函数的使用,其格式如下:a=_crol_(a,1);//将变量a中的数循环左移1位后赋给aa=_crar_(a,2);//将变量a中的数循环右移2位后赋给a循环移位函数执行过程示意图如图1-16所示。

(a)循环左移运算

(b)循环右移运算

图1-16循环移位运算示意图《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果23.子函数

在程序设计过程中,有多个地方用到同一段程序,需要重复书写。为了减少书写以把该段程序设置成子函数,在需要该段程序时,只要调用子函数就可以了。有时虽然某段程序只使用一次,但为了使程序结构简单、清晰和具有易读性,也会把该段程序写成子函数的形式。

(1)子函数的声明子函数可以先声明,也可以不预先声明。如果子函数的位置在调用语句之前,则不需要专门声明;如果子函数的位置在调用语句之后,则需要对这个子函数进行声明。声明的方法如下:void

delay(void);//声明一个无返回值、无参数的延时子函数。(2)子函数的编写子函数的编写和主函数的编写差不多,只是函数名称不同。如下是延时子函数的编写:voiddelay(void){/*函数体*/}

(3)子函数的调用子函数的调用就是指一个函数体中引用另一个已定义的函数来实现所需要的功能,这个时候函数体称为主调用函数,函数体中历引用的函数称为被调用函数。一个函数体中能调用数个其他的函数,这些被调用的函数同样也能调用其他函数,即嵌套调用。调用的方法是在函数中写上子函数的名称,后面跟上括号和“;”号。如延时子函数的调用:delay();//调用延时子函数《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2三、任务实施(一)电路设计实现LED流水效果的硬件电路如图1-8所示。(二)程序设计方式一:按字节操作方式实现LED流水效果(1)编程思路只要将发光二极管ledl~led8轮流点亮和熄灭,8只LED便会一亮一暗地形成流水灯的效果了。使P0口的8个LED实现流水灯的功能,其程序流程图如图1-17

所示。图1-17流水灯程序流程图《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2

(2)参考程序根据流程图,按字节操作的程序如下:《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2方式二:用移位运算符实现LED流水效果(1)编程思路

使用左移运算符“<<”实现流水灯效果的程序要比按字节操作方式编写的程序简短、高效。左移运算符的结果是左移1位,末位自动补“0”,程序中需要指令使末位补“1”。左移8次之后P0口的赋值就会全变为“1”,即0xff,这时需要重新赋初值0xfe。使用左移运算符实现流水灯的程序流程图如图1-18所示。图1-18使用左移运算符实现流水灯的程序流程图《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2(2)参考程序根据流程图,编写程序如下:《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2方式三:用移位函数实现LED流水效果(1)编程思路

使用循环左移函数进行移位时,相当于所有的二进制数首尾相连成一个闭环,其中“0”和“1”的个数保持不变,给P0口赋值的初值也可以是:0xfe、0xf8,这样就可以有2个或3个LED灯在流动。

使用循环左移位函数实现流水灯的程序流程图如图1-19所示。图1-19使用循环左移位函数实现流水灯的程序流程图《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务二实现LED流水效果2(2)参考程序根据流程图,编写程序如下:《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务三

实现LED随机显示效果LED随机显示效果是指LED发光二极管的变化比较比较复杂没有规律可循,可以按自己的想法每次点亮发光二极管中的一个或几个。一、任务描述在本任务中单片机的P0作输出口,接8个LED发光二极管,通过通过向P0口不停的赋值、延时来实现随机显示效果。

二、相关知识

1.if条件语句和for循环语句(1)if条件语句就如学习语文中的条件语句一样,C语言也一样是“如果××就××”或是“如果××就××否则××”。也就是当条件符合时就执行语句。条件语句又被称为分支语句,其关键字是由if构成的。C语言提供了3种形式的条件语句:1)当条件表达式的结果为真时,就执行语句,否则就跳过,语法如下:《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务三实现LED随机显示效果31)当条件表达式的结果为真时,就执行语句,否则就跳过,语法如下:if(条件表达式){

语句;}2)当条件表达式成立时,就执行语句1,否则就执行语句2,语法如下:if(条件表达式){

语句1;}else{语句2;}《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务三实现LED随机显示效果33)由if、else组成的多分支条件语句,语法如下:if(条件表达式1){语句1;}elseif(条件表达式2){语句2;}elseif(条件表达式m){语句m;}else{语句n;}《单片机技术及实训第2版》

机械工业出版社项目一LED广告灯的制作任务三实现LED随机显示效果3(2)

for循环语句在明确循环次数的情况下,for循环语句比前面学的while循环语句要方便简单。它的语法如下:For([初值设定表达式];[循环条件表达式];[条件更新表达式])

中括号中的表达式是可选的,这样for语句的变化就会很多样了。for语句的执行:先代入初值,再判断条件是否为真,条件满足时执行循环体并更新条件,再判断条件是否为真.......,直到条件为假时,退出循环。用for循环语句实现的延时子函数如下:delay(){unsignedinti;for(i=0;i<30000;i++);}《单片机技术及实训第2版》

机械工业

温馨提示

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

评论

0/150

提交评论