版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中职基于Proteus仿真的单片机技能应用(双色)proteus项目2教学课件高教版项目二简单并行I/O接口的应用技能应用一LED控制电路的设计
LED发光二极管是几乎所有的单片机系统都要用到的显示器件,常见的LED发光二极管主要有红色、绿色、蓝色等单色发光二极管,另外还有一种能发红色和绿色光的双色二极管。一、点亮LED1.技能要求
单片机P1口分别接8只LED,程序控制相应LED点亮或熄灭,进而控制其闪烁。2.仿真电路图
欲控制LED发光二极管的亮灭,只需使与其相连的口线输出相应的高低电平即可。LED控制电路共有7种元件,见表2-1所示:表2-1
流水灯电路用到的元件名称及所在的库元件名称代号所在库名称单片机AT89C51MicroprocessorICs晶振CRYSTALMiscellaneous瓷介电容CAPCapacitors电解电容CAP-ELECCapacitors电阻RESResistors按键BUTTONSwitches&Relays发光二极管LED-GREENOptoelectronicsLED控制电路如图2-2所示。图2-2LED控制电路3.程序设计与调试方法一(字节操作):#include<reg51.h> //MCS-51系列单片机头文件intmain(void) //主程序main函数{ while(1) //在主程序中设置死循环程序
{ P1=0x55; //把十六进制数0x55(即二进制数01010101)赋给P1 }}
P1=0x55是指把十六进制数0x55赋给P1口,0x55对应的二进制数是01010101,这样,在P1口的8个脚就会输出二进制数01010101,其对应电平为:低高低高低高低高,高位在前,即P1.7输出低电平,P1.0输出高电平,由于电路设计为低电平驱动方式,因此对应的LED由左至右依次为:亮灭亮灭亮灭亮灭。方法二(位操作):#include<reg51.h> //MCS-51系列单片机头文件sbitled7= P1^7;
//定义P2.7名字为led7sbitled5= P1^5;sbitled3= P1^3;sbitled1= P1^1;intmain(void) //主程序main函数{ P2=0xff;
//全灭。此语句可省略,因复位后P2即为0xffwhile(1) //在主程序中设置死循环程序
{ led7=0; //点亮第1只
led5=0; //点亮第3只
led3=0; //点亮第5只
led1=0; //点亮第7只
}}使某位二极管闪烁,可先点亮该位,再熄灭,然后循环。程序如下:#include<reg51.h> //MCS-51系列单片机头文件sbitled7= P1^7;intmain(void) //主程序main函数{ while(1) //在主程序中设置死循环程序
{ led7=0; //点亮第1只
led7=1; //熄灭第1只
}}
但实际运行这个程序发现接在P1.7口线一直在亮,只是亮度稍暗,原因是单片机执行一条指令速度很快,大约1μm(具体时间和时钟与具体指令的指令周期有关)。也就是说二极管确实在闪烁,只不过速度太快,由于人的视觉暂留现象,主观感觉一直在亮。解决的办法是在点亮和熄灭后都要加入延时,使亮的时间和灭的时间足够长。所谓延时,实际上是让单片机反复不停的执行指令,虽然执行1条指令时间很短,但执行上万条指令时间就很可观了。由于i为无符号整型变量,取值范围为0~65535。改变循环次数(即i值)可改变延时时间,从而改变闪烁频率。二、流水灯的设计1.技能要求单片机P2口分别接8只LED,程序控制8只LED从左到右或者从右到左循环滚动点亮,产生流水灯的效果。2.仿真电路图流水灯电路所需要的元件和LED控制电路的元件相同。流水灯电路如图2-3所示。图2-3流水灯电路 3.程序设计与调试
只要将发光二极管D1~D8轮流点亮和熄灭,8只LED便会一亮一灭地形成流水灯的效果了。使P2口的8只LED实现流水灯的功能,其程序流程图如图2-4所示。根据流程图,按字节操作的程序如下:#include<reg51.h> delay() //延时子函数{ unsignedinti;for(i=0;i<30000;i++); }intmain(void) { while(1) {
P2=0xfe; //P2口赋值0xfe,点亮第1位LED delay(); //调用延时子函数
P2=0xfd; //P2口赋值0xfd,点亮第2位LED delay(); //调用延时子函数
P2=0xfb; //P2口赋值0xfb,点亮第3位LED delay(); //调用延时子函数
P2=0xf7; //P2口赋值0xf7,点亮第4位LED delay(); //调用延时子函数
P2=0xef; //P2口赋值0xef,点亮第5位LED delay(); //调用延时子函数
P2=0xdf; //P2口赋值0xdf,点亮第6位LED delay(); //调用延时子函数
P2=0xbf; //P2口赋值0xbf,点亮第7位LED delay(); //调用延时子函数
P2=0x7f; //P2口赋值0x7f,点亮第8位LED delay(); //调用延时子函数
}}
下面我们使用左移运算符“<<”和右移运算符“>>”以及循环移位函数来实现同样的效果。使用左移运算符“<<”实现流水灯效果的程序流程图如图2-5所示。图2-5使用左移运算符“<<”实现流水灯效果的程序流程图#include<reg51.h> //MCS-51系列单片机头文件delay() //延时子函数{ unsignedinti; for(i=0;i<30000;i++); //用for语句实现30000次循环}intmain(void) //主程序main函数{ P2=0xfe; //P2口赋初始值,点亮第1位LED while(1) //在主程序中设置死循环程序
{ delay(); //调用延时子函数
P2=P2<<1|0x01; //P2口的值左移1位后再和0x01作或运算(末位补“1”)
if(P2==0xff) //如果左移8次,则等0xff { P2=0xfe; //P2口重新赋初值0xfe } }}根据流程图,编写程序如下:使用循环左移函数实现流水灯效果的程序流程图如图2-6所示图2-6使用循环左移函数实现流水灯效果的程序流程图#include<reg51.h> //MCS-51系列单片机头文件#include<intrins.h> //MCS-51系列单片机内部函数头文件delay() //延时子函数{ unsignedinti; for(i=0;i<30000;i++); //用for语句实现30000次循环}intmain(void) //主程序main函数{ P2=0xfe; //P2口赋初始值,点亮第1位LED while(1) //在主程序中设置死循环程序
{ delay(); //调用延时子函数
P2=_crol_(P2,1); //P2口的值循环左移1位
}}根据流程图编写程序如下: 三、花样彩灯控制器的设计1.技能要求单片机P2口分别接8只LED,程序控制8只LED实现复杂多变的花样显示效果。2.仿真电路图花样彩灯控制器和流水灯电路的原理图完全相同,只是控制程序不同,花样彩灯控制电路如图2-7所示。图2-7花样彩灯控制电路 3.程序设计与调试#include<reg51.h> //MCS-51系列单片机头文件unsignedchartab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff}; //声明数组tab并赋值(共25个元素)delay() //延时子函数{unsignedinti;for(i=0;i<30000;i++); //用for语句实现30000次循环}intmain(void) //主程序main函数{ unsignedcharj; while(1) //在主程序中设置死循环程序
{for(j=0;j<25;j++) //25次循环语句
{P2=tab[j]; //数组tab中下标为j的元素赋给P2口
delay(); //调用延时子函数
} }} 四、呼吸灯的设计1.技能要求所谓呼吸灯,是指LED在单片机的控制下逐渐的由暗到亮、再由亮到暗的周期性变化,看起来就好像是在呼吸。单片机P3.0引脚接LED,程序控制其产生呼吸灯的效果。2.仿真电路图用单片机来制作呼吸灯,电路很简单,就是在单片机的引脚上,连接一个LED和一个限流电阻,如图2-8所示。图2-8呼吸灯电路原理图那么怎样才能使LED产生不同亮度呢?这就需要用PWM波形来驱动,编程时,稍稍麻烦一点。PWM,即脉冲宽度调制,采用调整脉冲占空比达到调整电压、电流、功率的方法。如图2-9所示为占空比分别是10%、50%和90%的三种PWM波形。图2-9三种占空比不同的PWM波形当PWM波形去控制LED时,因为PWM波的频率较高,由于人的眼睛具有视觉暂留现象,我们看到的LED并不是闪烁的,而是亮度较暗,占空比不同的PWM波控制LED时,LED的亮度是不同的,占空比越小,亮度越低,占空比越大,亮度越高。呼吸灯实际上就是不停的改变PWM波形的占空比,使占空比循环变大再变小,LED的亮度也就循环变亮再变暗,实现呼吸灯的效果。3.程序设计与调试根据上述分析,呼吸灯程序的编程思路如下:首先使用一个变量loop计主程序的循环次数,主程序每循环一次,loop值加1,当loop等于10时,再重新从0开始计数,这样,loop从0到10的过程为PWM波的一个完整周期;然后再用一个变量pwm来控制占空比的大小;在主程序循环过程中,用loop和pwm的值进行比较,如果loop小于pwm,则点亮LED,否则熄灭LED。在整个周期中,一段时间点亮LED,另一段时间熄灭LED,LED被点亮的时间长短取决于pwm的大小,pwm越小,LED被点亮的时间越短,pwm越大,LED被点亮的时间越长。所以,只要使pwm的值逐渐增大,再逐渐减小,LED就会逐渐变亮,然后逐渐变暗,如此循环,产生呼吸灯的效果。下面的程序是使接在P3.0的LED产生固定亮度的程序:#include<reg51.h>sbitled=P3^0; unsignedcharloop,pwm; //loop从0到10循环变化unsignedinti;intmain(){ loop=0;pwm=6; //PWM的值决定LED的亮度
while(1) { if(loop<pwm) //当loop小于pwm时,点亮LED { led=0; } else //当loop不小于pwm时,熄灭LED { led=1; } loop++; if(loop>10) { loop=0; } }}#include<reg51.h>sbitled=P3^0; unsignedcharloop,pwm; //loop从0到10循环变化unsignedinti;bitf;intmain(){ loop=0; pwm=4; f=0; while(1) { if(loop<pwm) //当loop小于pwm时,点亮LED { led=0; } else //当loop不小于pwm时,熄灭LED { led=1;
呼吸灯效果的参考程序如下:} loop++; if(loop>10) {loop=0; i++; if(i==500)
//i的大小决定呼吸灯的节奏快慢{ i=0; if(!f)//使用pwm不停的从4增加到10,再减到4。 {pwm++; if(pwm==10) {f=1;} } else{pwm--; if(pwm==4){f=0;} } } } }技能应用二继电器控制电路的设计 一、继电器接口电路继电器通常用于驱动大功率电器并起到隔离作用。
为了实现和单片机系统彻底隔离,常使用光电耦合器,如图2-11所示。当P3.0输出低电平时,光电耦合器中的发光二极管导通发光,光敏三极管受光照后导通,VT1的基极得到高电平导通,继电器吸合。反之,继电器则不吸合。图2-11
光电隔离继电器驱动电路 二、继电器控制照明设备1.技能要求单片机I/O口通过控制继电器的吸合和释放控制照明设备的亮和灭。2.仿真电路图本实例以继电器的常开触点作为电灯的开关,控制接在交流220V上的电灯,电路图如图2-12所示。图2-12继电器控制照明设备电路图
其中灯泡使用元件库中的Lamp元件,220V交流电可以通过添加元件库中的Vsin元件获得,其参数设置如图2-13所示。图2-13Vsin元件参数设置3.程序设计与调试本实例主要为了说明单片机控制灯泡等强电、大功率设备的方法,程序比较简单,只需要相应的I/O口线输出高、低电平,使对应的继电器释放、吸合即可。灯泡循环亮、灭的程序如下:#include<reg51.h>sbitlamp=P3^0;delay(unsignedinti){ while(i--);} intmain(){ lamp=0; while(1) { delay(65000); lamp=1; delay(65000); lamp=0; }}
在本例中,由于频率太高,系统显示不出来灯泡的点亮情况,我们用示波器可以观察到电压电流的正弦波形。如果要直观的看到灯泡亮,把电压源频率改为1Hz或0.5Hz,就能看到灯泡的闪烁。技能应用三电机控制电路的设计一、直流电机的控制1.技能要求单片机I/O口控制直流电机转动和停止,正、反转以及停止。2.仿真电路图如果控制直流电动机作单方向转动可停止,只需一个继电器。直流电动机可以在元件库中搜索关键字“Motor”找到,注意选择“Motor-DC”。继电器吸合,电动机开始转动,继电器释放,电动机则停止转动。图2-14
单片机控制直流电动机原理图如果要控制直流电动机作正转和反转,则需要使用两个继电器,原理图如图2-15所示。直流电动机的两端分别接于两个单刀双掷开关的两个公共端,两个开关的常开触点连在一起接在24V电源的正极,两个开关的常闭触点连在一起接在24V的地端。图2-15单片机控制直流电动机正反转原理图 3.程序设计与调试控制直流电动机交替正反转(模拟洗衣机洗衣过程)的程序流程图图2-16控制直流电动机交替正反转的程序流程图根据程序流程图编写程序如下:#include<reg51.h> //MCS-51系列单片机头文件sbitctrl0= P2^0;sbitctrl1= P2^1;delay(){ unsignedinti; //定义无符号整型变量i for(i=0;i<50000;i++);}zheng() //电机正转{ ctrl0=0; ctrl1=1;}fan()
{ ctrl0=1;//电机反转
ctrl1=0;}stop()
{ctrl0=1;//电机停转ctrl1=1;}intmain(void) //主程序main函数{ while(1) //在主程序中设置死循环程序 { zheng(); delay(); stop(); delay(); fan(); delay(); stop(); delay(); }}电动机在由正转突然变为反转时,将会产生较大的感生电动势,使电流突然增大,因此一般应先停止,再反转。此程序仅作为一个正反转控制的练习,实际应用中往往是通过按键、定时器或一定的条件来控制电机正反转的。 二、直流电机PWM调速1.技能要求通过单片机的I/O控制直流电机的转速。2.仿真电路图PWM调光的原理前面已经讲过,PWM调速和调光原理完全一样,但是由于继电器吸合和释放的速度很慢,不适合做电机PWM调速的驱动电路,所以我们采用开关速度快的大功率晶体管作为直流电动机的驱动电路,电路如图2-17所示。其中场效应管可以在元件库“晶体管”分类的“金属氧化物场效应管”子类中找到,或者搜索“IRF530”。图2-17PWM调速电路原理图 3.程序设计与调试#include<reg51.h>sbitmotor=P3^0; unsignedcharloop,pwm; //loop从0到10循环变化unsignedinti;intmain(){ loop=0; pwm=80; //PWM的值决定电机的转速
while(1) { if(loop<pwm) { motor=0; } else { motor=1;
} loop++; if(loop>100) { loop=0; } }}技能应用四叮咚门铃的设计
声音是由物体的振动产生的,单片机通过I/O口输出适当的频率的波形可以演奏音乐。一、扬声器接口电路
声音是由物体的振动产生,正在发声的物体叫声源,声音是以波的形式传播的,即声波。人耳只能对20Hz~20000Hz的振动产生听觉,20Hz以下的声波称为次声波,20000Hz以上称为超声波。单片机要想发出声音,需要借助于扬声器这个声源。扬声器接口电路如图2-18所示。图中的示波器用于观察扬声器发声时P3.0脚的波形。扬声器可通过搜索“speaker”找到。图2-18扬声器接口电路 二、控制扬声器发音使扬声器发出单音频声音的程序如下:#include<reg51.h>sbitSPK=P3^0;unsignedcharj;intmain(){ while(1) { SPK=~SPK; //不停的取反,产生方波信号
for(j=0;j<100;j++); }}程序中改变延时时间(循环次数)即可改变声音的频率。 三、叮咚门铃的设计1.技能要求单片机P3.0脚接扬声器,P1.7脚接一按键,编程实现当按下按键时,扬声器发出“叮咚”声。2.仿真电路图叮咚门铃电路图如图2-19所示。图2-19叮咚门铃电路 3.程序设计与调试#include<reg51.h>sbitSPK=P3^0;sbitkey=P1^7;bitflag; //响铃标志位voidAlarm(unsignedchart){ unsignedinti; unsignedcharj; for(i=0;i<800;i++) { SPK=~SPK; //不停的取反,产生方波信号
for(j=0;j<t;j++); }}voidbutton(){ key=1; if(key==0) { flag=1;
}}intmain(){ flag=0; //初始不响铃while(1) { button(); if(flag) //如果报警标志位为1则响铃
{ Alarm(80); Alarm(120); flag=0; //响铃一次后停止响铃
} }}项目基本知识
知识链接一MCS-51单片机并行I/O接口P0口:在P0口的内部有一个多路开关,在控制信号的控制下,可以分别接通锁存器输出(作为通用I/O口进行数据的输入输出)或接通地址/数据线(作为系统的数据总线和低8位地址总线);在作输出口使用时,当输出“1”,两只场效应管均截止,引脚处于悬浮态,必须外接上拉电阻才能有高电平输出;在作系统的数据总线和数据总路线时,两只场效应管互相相互配合,可输出高电平和低电平,无须再接上拉电阻。P0口一位口线内部结构图P1口P1口的一位口线内部结构图。因为P1口通常只能作为通用I/O口使用,其内部没有多路开关,输出驱动电路中有上拉电阻,外接电路无需再接上拉电阻P1口一位口线内部结构图P2口
P2口既能作为通用I/O使用,又为系统提供高8位地址总线,因此同P0口一样,其内部也有一个多路开关;当作为通用I/0口使用时,多路开关倒向锁存器输出端,当作为系统高8位地址线使用时,多路开关倒向“地址”端。P2口一位口线内部结构图P3口
P3口可以作为通用I/O口使用,但在实际应用中它的第二功能更为重要,为适应引脚第二功能的需要,在口线电路中增加了“第二功能输出”信号线和“第二功能输入”缓冲器;当作第二功能使用时,相应的口线锁存器必须为“1”状态,与非门输出第二功能信号。在P3口的引脚信号输入通道中有两个三态缓冲器,第二功能的输入信号取自第一个缓冲器(第二功能输入缓冲器)的输出端。而作为通用I/O口线使用(第一功能)的数据输入,取自三态门的输出端。P3口一位口线内部结构图 知识链接二C51语言基础一、C51程序的基本结构1.文件包含及头文件的作用(1)文件包含
文件包含是指一个源文件将另外一个源文件的全部内容包含进来。常用在函数的声明,宏定义,全局变量的定义,外部变量的声明等。#include“a.h”a.h文件b.c文件图2-21
文件包含示意图(2)头文件在代码中引用头文件,其实际意义就是将这个头文件中的全部内容放到引用头文件的位置处,免去我们每次编写同类程序都要将头文件的中的语句重复编写。 2.主程序main函数main函数的基本格式:intmain(void){ //单片机复位后总是从这里执行 语句1; ……}int表示main函数的返回值是int(即整数)型,int可以省略。如果在main函数中不加返回语句的话,默认返回0。很多人使用voidmain()的写法,其实是错误的,可能在某些编译器中无法通过。后面我们会讲到有返回值的函数。任何一个单片机C程序有且只有一个main函数,它是整个程序开始执行的入口,不论main放在程序中的那个位置,总是先被执行。main函数可以调用别的功能函数,但其它功能函数不允许调用main函数。 3.子函数(1)子函数的声明子函数可以先声明,也可以不预先声明。如果子函数的位置在调用语句之前,则不需要专门声明;如果子函数的位置在调用语句之后,则需要对这个子函数进行声明。声明的方法如下:voiddelay(void); //声明一个无返回值、无参数的延时子函数(2)子函数的编写子函数的编写和主函数的编写差不多,只是函数名称不同。如下是延时子函数的编写:voiddelay(void){ /*函数体*/}(3)子函数的调用子函数的调用就是指一个函数体中引用另一个已定义的函数来实现所需要的功能,这个时候函数体称为主调用函数,函数体中所引用的函数称为被调用函数。如延时子函数的调用:delay(); //调用延时子函数 4.while循环语句
while循环语句是常用的条件循环语句,可用来做固定次数的循环程序和不定次数的循环程序,其常见语法格式如下:while(循环条件){ 语句; //循环体}其执行过程是:先判断循环条件是否满足,如果满足则执行循环体的内容,执行完之后自动返回继续判断循环条件,如果满足则继续执行。如果条件不满足,则跳出while语句,执行后面的语句。在主程序中使用while(1){语句},是让while(1)所包含的花括号中语句永远循环执行,称为死循环。单片机程序的主程序都是一个死循环程序,以便能不停地输出控制信号、接收输入信号和更新一些变量的值,保证程序的正常运行。 5.程序初始化
所谓程序初始化是指单片机复位后根据需要对某些寄存器或变量进行初始设置或赋初值,并且这些操作仅执行一次,之后就进入到while(1)的死循环。6.“=”运算符
控制单片机I/O口输出,在C语言中非常简单,只需要使用“=”运算符就可以了。“=”运算符是赋值运算符,它的作用是把
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 46984.1-2025光伏电池第1部分:晶体硅光伏电池光致衰减试验方法
- 货物安全检查制度
- 财产保险代位求偿制度
- 行政复议制度本质上是司法审查制度
- 《归去来兮辞》练习
- 2026河南郑州市区公立医院招聘护理岗参考考试试题附答案解析
- 执法培训考试试题及答案
- 中医招聘考试试题及答案
- 2026广东深圳大学深圳医疗保障研究院诚聘研究助理1名备考考试题库附答案解析
- 2026云南昆明市晋宁区人民政府办公室招聘编外人员2人参考考试题库附答案解析
- 2026中国电信四川公用信息产业有限责任公司社会成熟人才招聘备考题库及答案详解参考
- 邮政服务操作流程与规范(标准版)
- 2025年年轻人生活方式洞察报告-海惟智库
- 2026昆山钞票纸业有限公司校园招聘15人备考题库及1套完整答案详解
- 南瑞9622型6kV变压器差动保护原理及现场校验实例培训课件
- 2026年重庆市江津区社区专职人员招聘(642人)考试参考题库及答案解析
- 统编版(2024)七年级上册道德与法治期末复习必背知识点考点清单
- 新华资产招聘笔试题库2026
- 造口常用护理用品介绍
- 小米销售新人培训
- (新教材)2025年秋期部编人教版二年级上册语文第七单元复习课件
评论
0/150
提交评论