资源描述
,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,信息电子 工程学院,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Click to edit Master title style,*,微控制器系统设计与应用,刘燎原,徐州建筑职业技术学院,1,实验,1.Keil,步骤,-,编程,产生,.hex,文件,2.Proteus,步骤,-,画图,加载,.hex,文件,仿真,3.,思考题:通过按键控制灯闪烁快慢,带形参的延时程序,#include /,包含,AT89X52.H,头文件,sbit LED=P10;/,定义,LED,是,P1.0,引脚对应的变量名,sbit sw=P30;,void Delay(unsigned int t),unsigned int i,j;,for(i=0;it;i+),for(j=0;j255;j+);,void main(void),while(1),LED=LED;,if(sw=0)Delay(100);,else Delay(500);,项目二,流水灯,知识目标,:,1.,掌握单片机的内部硬件资源,2.,理解并运用相关指令,3.,掌握微控制器的输出接口的电路形式与作用,技能目标:,1.,掌握流水灯电路的制作,2.,掌握延时程序的计算和编写,3.,掌握,LED,与单片机之间的连接,任务,4,:,控制八只发光二极管按一定的规律循环点亮 八个,LED,如何和单片机连接?,P1,口接发光二极管(,LED,)的阴极,,P1,口的管脚输出低电平时对应的发光二极管点亮。,问题:,如何控制灯按顺序一个一个点亮?,通过程序,按一定的规律向,P1,口的管脚输出低电平和高电平,控制八只发光二极管循环点亮。,问题:,程序怎么使,P1,口的管脚循环输出低电平和高电平?,首先要了解单片机的并行,I/O,口。,单片机经常要和外设之间传输数据(输入,输出),,P0,,,P1,,,P2,,,P3,就是可以和外设完成并行数据传输的接口。,一、,P1,口,1.,结构,其,1,位的结构原理如图所示。,P1,由,8,个这样的电路组成,锁存器起输出锁存作用,场效应管(,FET,),V,组成输出驱动器,以增大带负载能力,;,三态门,1,是用于读锁存器端口,;,三态门,2,是引脚输入缓冲器,;,2.,功能,(,1,)输出(外接发光二极管),P1=0Xdata,内部总线输出“,0”,,则,D=0,,,Q=1,,,V,导通,则输出点,=0,(,2,)输入(外接开关),a.,读引脚,A=P1,读引脚脉冲有效,为高电平,把该三态缓冲器打开,这样端口引脚上的数据经过三态门缓冲器读入到内部总线。,如果输入数据走该通道,那么,V,是否对引脚有影响?有的。,如果锁存器原来寄存的数据,Q=0,,那么则,V,导通,引脚始终被嵌位在低电平,不可能输入外接电路的高电平。所以在输入前,必须用输出指令,向锁存器写入“,1”,,使,V,截止,(,断开,),,保证单片机输入的电平与外接电路电平相同。所以,P0,口被称为一个,准双向口,。,P1=0XFFH,ACC=P1,复位时?,b.,读锁存器,如:,ANL P0,,,A,称为“读,-,改,-,写”,二、,P0,口,1.,结构,与,P1,不同:,多路选择开关,(选择它的两种功能),V1,:输出驱动器,2,功能,(,1,)输出,开关连接,B,点,,V1,截止(其它同,P1,口),因为输出驱动器漏极开路,所以外接上拉电阻,(,2,)输入(准双向口,先写入“,1”,),外接上拉电阻(其它同,P1,口),(,3,)地址,/,数据线,开关接在,A,点,输出地址信号(低,8,位)或输出,/,输入数据信号,不需接上拉电阻,三、,P2,口,1.,结构,多路选择开关(接在,Q,上),反相器、,Q0,输出驱动,2.,功能,(,1,)输出(同,P1,口),(,2,)输入(同,P1,口),(,3,)地址总线(高,8,位),与,P0,口构成,16,位地址,四、,P3,口,1.,结构,2.,功能,(,1,)输出(同,P1,口),(,2,)输入(同,P1,口),(,3,)第二功能,第二功能输入:,缓冲器,2,关闭,,P3,口的口线状态通过缓冲器,0,送入“第二功能输入端”,第二功能输出:,Q,端为高电平时,P3,口的口线状态就取决于第,2,功能输出线的状态。,P3,第二功能各引脚功能定义:,P3.0,:,RXD,串行,口输入,P3.1,:,TXD,串行,口输出,P3.2,:,INT0,外部中断,0,输入,P3.3,:,INT1,外部中断,1,输入,P3.4,:,T0,定时器,0,外部输入,P3.5,:,T1,定时器,1,外部输入,P3.6,:,WR,外部写,控制,P3.7,:,RD,外部读,控制,总结:,准双向口,通用,I/O,口,上拉电阻(,I/O,口),其它用途,P0,口,数据线,/,低,8,位地址线,P1,口,P2,口,高,8,位地址线,P3,口,第二功能,五、带负载能力(驱动能力),负载能力就是说能够在一定的电压(,0-5V),下面能够灌入或拉出的最大电流。,拉电流和灌电流是衡量电路输出驱动能力的参数,这种说法一般用在数字电路中。,1.,灌电流,(输出,低,电平),当负载的另一端接,VCC/VDD,,输出端口输出低电平时,就会产生灌电流。,就是从负载流向输出端口,“灌进去”的电流,一般是要吸收负载的电流,其吸收电流的数值叫,“,灌电流,”,。,2.,拉电流,(输出,高,电平),当负载的另一端接地,输出端口输出高电平时,就会产生拉电流;,就是从输出端口流向负载,“拉出来”的电流,,一般是对负载提供电流,其提供电流的数值叫,“,拉电流,”,.,一般地,,LSTTL,即低功耗肖特基晶体管。,1,个,LSTTL,:拉电流(高电平),0.20uA,灌电流(低电平),0.35mA,。,所以,灌电流一般它比拉电流要大得多。,3.I/O,口驱动能力,P0:,灌入,驱动,8,个(没有高电平能力,必须上拉电阻),2.88,mA,P1-3,:灌入、拉,驱动,4,个,1.44,mA,51,系列的芯片低电平的驱动能力比较大一点。举例说明流水灯,4,个引脚,每个引脚灌电流,10mA,每个端口,8,个引脚灌电流之和,:P0,26,mA,P1,、,P2,、,P3,15,mA,任务,4,:,控制八只发光二极管按一定的规律循环点亮,向右循环点亮:,第一次:,D1,亮,,P1.7,输出低电平,其他都输出高电平,P1=FEH,第二次:,D2,亮,,P1.6,输出低电平,其他都输出高电平,P1=FDH,第八次:,D8,亮,,P1.0,输出低电平,其他都输出高电平,P1=7FH,如何编程?,方法一:,#include /,包含,AT89X52.H,头文件,sbit LED=P10;/,定义,LED,是,P1.0,引脚对应的变量名,void Delay(unsigned int t),unsigned int i,j;,for(i=0;it;i+),for(j=0;j255;j+);,void main(void),P1=0XFF;,while(1),P1=0XFE;Delay(200);,P1=0XFD;Delay(200);,P1=0XFB;Delay(200);,P1=0XF7;Delay(200);,P1=0XEF;Delay(200);,P1=0XDF;Delay(200);,P1=0XBF;Delay(200);,P1=0X7F;Delay(200);,方法二,:(看数是否有规律?),#include /,包含,AT89X52.H,头文件,#include /intrins.H,中有循环左移函数,void Delay(unsigned int t),unsigned int i,j;,for(i=0;it;i+),for(j=0;j255;j+);,void main(void),unsigned char m;,P1=0XFF;,while(1),P1=0 xfe;Delay(200);,for(m=0;m8;m+),P1=_crol_(P1,1);,Delay(200);,方法三,:(数没有任何规律),#include /,包含,AT89X52.H,头文件,sbit LED=P10;/,定义,LED,是,P1.0,引脚对应的变量名,unsigned char code sz1=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;,void Delay(unsigned int t),unsigned int i,j;,for(i=0;it;i+),for(j=0;j255;j+);,void main(void),unsigned char m;,while(1),for(m=0;m8;m+),P1=sz1m;,Delay(200);,Code:,表示数组的存储类型,存储在程序存储器,任务,5,:,8,个流水灯从先从上到下逐个点亮,然后再从下到上逐个点亮,然后依次循环,实验,3,:,,K1,按下,,8,个流水灯从上到下逐个点亮,若,K1,断开,,8,个流水灯从下到上逐个点亮,然后依次循环,#include /,包含,AT89X52.H,头文件,sbit k1=p30;,unsigned char code sz1=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;,void Delay(unsigned int t),unsigned int i,j;,for(i=0;it;i+),for(j=0;j255;j+);,void main(void),unsigned char m;,while(1),if(k1=0),for(m=0;m0;m-),P1=sz1m-1;,Delay(200);,关于,LED,的例子,1.,要求,P1.0,所接的灯闪烁,#include,sbit LED=P10;,void Delay(unsigned int a),unsigned char i;,while(-a!=0),for(i=0;i125;i+);,void main(),while(1),LED=0;,Delay(1000);,LED=1;,Delay(1000);,红色段可改写为:,LED=LED;DELAY(1000);,2,、八个灯循环点亮,#include,void delay(unsigned int a),unsigned char i;,while(-a!=0),for(i=0;i125;i+);,void main(),unsigned char k,i;,while(1),k=0 xfe;,for(i=0;i8;i+),P1=k;,delay(1000);,k=k1;,k=k|0 x01,;,3,、左右来回循环流水,#include,#include,void delay(unsigned int a),unsigned char i;,while(-a!=0),for(i=0;i125;i+);,void main(),unsigned char i,j;,P1=0 x7f;,while(1),for(i=0;i8;i+),P1=_crol_(P1,1);,delay(1000);,for(j=0;j7;j+),P1=_cror_(P1,1);,delay(1000);,4,、花样流水灯(无规律),#include,unsigned char code sz1=0 x7e,0 xbd,0 xdb,0 xe7,0 xdb,0 xbd,0 x7e,0 x00,0 xff;,void delay(unsigned int a),unsigned char i;,while(-a!=0),for(i=0;i125;i+);,void main(),unsigned char i;,while(1),for(i=0;i9;i+),P1=sz1i;,delay(1000);,5.,交通灯,6.,蜂鸣器,学生分组讨论以下问题,:,1.,带负载能力小,会怎样?(数码管,发光二极管),2.,增加负载能力的方法,提出问题:画出流水灯电路,总结,布置作业,实验,3,:编程、仿真,8,个流水灯从上到下逐个点亮,实验,4,:熟悉开发板,学会使用开发板,K1,按下,,8,个流水灯从上到下逐个点亮,若,K1,断开,,8,个 流水灯从下到上逐个点亮,然后依次循环。,
展开阅读全文