1、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、文件,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);,项目二,流水灯,知
3、识目标,:,1.,掌握单片机的内部硬件资源,2.,理解并运用相关指令,3.,掌握微控制器的输出接口的电路形式与作用,技能目标:,1.,掌握流水灯电路的制作,2.,掌握延时程序的计算和编写,3.,掌握,LED,与单片机之间的连接,任务,4,:,控制八只发光二极管按一定的规律循环点亮 八个,LED,如何和单片机连接?,P1,口接发光二极管(,LED,)的阴极,,P1,口的管脚输出低电平时对应的发光二极管点亮。,问题:,如何控制灯按顺序一个一个点亮?,通过程序,按一定的规律向,P1,口的管脚输出低电平和高电平,控制八只发光二极管循环点亮。,问题:,程序怎么使,P1,口的管脚循环输出低电平和高电平?,
4、首先要了解单片机的并行,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
5、P1,读引脚脉冲有效,为高电平,把该三态缓冲器打开,这样端口引脚上的数据经过三态门缓冲器读入到内部总线。,如果输入数据走该通道,那么,V,是否对引脚有影响?有的。,如果锁存器原来寄存的数据,Q=0,,那么则,V,导通,引脚始终被嵌位在低电平,不可能输入外接电路的高电平。所以在输入前,必须用输出指令,向锁存器写入“,1”,,使,V,截止,(,断开,),,保证单片机输入的电平与外接电路电平相同。所以,P0,口被称为一个,准双向口,。,P1=0XFFH,ACC=P1,复位时?,b.,读锁存器,如:,ANL P0,,,A,称为“读,-,改,-,写”,二、,P0,口,1.,结构,与,P1,不同:,多路
6、选择开关,(选择它的两种功能),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,位地址,四、,P
7、3,口,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,外部写
8、控制,P3.7,:,RD,外部读,控制,总结:,准双向口,通用,I/O,口,上拉电阻(,I/O,口),其它用途,P0,口,数据线,/,低,8,位地址线,P1,口,P2,口,高,8,位地址线,P3,口,第二功能,五、带负载能力(驱动能力),负载能力就是说能够在一定的电压(,0-5V),下面能够灌入或拉出的最大电流。,拉电流和灌电流是衡量电路输出驱动能力的参数,这种说法一般用在数字电路中。,1.,灌电流,(输出,低,电平),当负载的另一端接,VCC/VDD,,输出端口输出低电平时,就会产生灌电流。,就是从负载流向输出端口,“灌进去”的电流,一般是要吸收负载的电流,其吸收电流的数值叫,“,灌电流,
9、2.,拉电流,(输出,高,电平),当负载的另一端接地,输出端口输出高电平时,就会产生拉电流;,就是从输出端口流向负载,“拉出来”的电流,,一般是对负载提供电流,其提供电流的数值叫,“,拉电流,”,.,一般地,,LSTTL,即低功耗肖特基晶体管。,1,个,LSTTL,:拉电流(高电平),0.20uA,灌电流(低电平),0.35mA,。,所以,灌电流一般它比拉电流要大得多。,3.I/O,口驱动能力,P0:,灌入,驱动,8,个(没有高电平能力,必须上拉电阻),2.88,mA,P1-3,:灌入、拉,驱动,4,个,1.44,mA,51,系列的芯片低电平的驱动能力比较大一点。举例说明流水灯,4,个
10、引脚,每个引脚灌电流,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(un
11、signed 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,头
12、文件,#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,引脚
13、对应的变量名,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,个流水灯从先从上到下逐个点亮,然后再从下到上逐个点亮,然后依次
14、循环,实验,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(
15、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(unsigne
16、d 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 x
17、7f;,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,个 流水灯从下到上逐个点亮,然后依次循环。,






