实验课程:单片机原理及应用实验项目:单片机控制LED灯亮灭专业班级:学号:姓名:实验日期:实验一单片机控制LED灯实验.一、实验目的1、进一步掌握Keil的使用,熟悉单片机C语言编程。2、学习I/O口的使用方法。二、实验原理发光二级管是半导体二极管的一种,可以把电能转化为光能,常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。只要加在发光二极管两端的电压超过它的导通电压(一般为1.7V-1.9V)它就会导通,而当流过它的电流超过一定电流时(一般2-3mA)它就会发光。LED常用在MCS-51单片机中指示单片机的某个开关量的状态。对单片机的控制,其实就是对I/O口(单片机引脚)的控制。单片机共四个端口,P0、P1、P2、P3;每个端口分别有8个引脚P0.0-P0.7、P1.0-P1.7、P2.0-P2.7、P3.0-P3.7;这32个引脚既可以作输出脚,又可以作输入脚。作输出脚时,单片机可以控制指示灯、数码管、电机等外部器件;作输入脚时,可以“感受”按键、开关、传感器等外部器件(例如接收数据-此就是作为输入脚的),单片机的每个引脚都是可以分开控制的,即独立的给高或者低电平。想要点亮一个小灯,首先要将小灯与单片机的一个I/O口连接好,然后将此引脚给高或者低电平,接着这个小灯就可以按照你给的电平实现点亮或熄灭了。三、硬件电路设计LED模块排线接口如图3-1所示。依据实验原理,只要将所需控制的LED对应排线引脚连接到单片机一个I/O口即可。1、连接方法:JP11(P2)和JP1和LED灯的JP1用8PIN排线连接起来。2、硬件说明:使用单片机的P2口来驱动8个LED,发光二极管的阳极接高电平,故P2口为低电平时,就可以驱动其点亮。四、软件设计1.单灯D3闪烁#includereg51.hvoiddelay(void)//延时程序{unsignedinti;for(i=0;i20000;i++);}voidmain(void){while(1){P2=0xfb;//灯亮delay();//延时P2=0xff;//灯灭delay();//延时}}2、双4只LED灯(D1、D3、D5、D7与D2、D4、D6、D8)交替闪烁#includereg51.h#defineuintunsignedint#defineucharunsignedcharvoiddelay();voidmain(){while(1){P2=0xaa;//10101010delay();P2=0x55;//01010101delay();}}voiddelay()//延时程序{uintx,y;for(x=100;x0;x--)for(y=600;y0;y--);}3、8只LED灯(D1、D2、D3、D4、D5、D6、D7、D8)流水灯显示#includereg51.hvoiddelay(void){unsignedchari,j;for(i=0;i250;i++)for(j=0;j250;j++);}voidmain(){while(1){P2=0xfe;delay();P2=0xfd;delay();P2=0xfb;delay();P2=0xf7;delay();P2=0xef;delay();P2=0xdf;delay();P2=0xbf;delay();P2=0x7f;delay();}}三、实验结果分析:刚开始不是很熟悉,无法按照老师所讲的进行试验,反复操作后,完成了试验。实验二数码管实验一、实验目的1、掌握数码管显示原理(静态显示和动态显示)。2、掌握数码管显示编程。二、实验原理数码管是一种半导体发光器件,是MCS-51单片机系统中用得非常多的一种输出通设备,其基本单元是发光二级管。MCS-51单片机系统中最常使用的是8段数码管。1、数码管显示原理图4-1数码管内部原理图8段数码管的内部结构是由8个发光二极管组成的,如图4-1所示,从图4-1(a)可看abcdegGNDfdpGNDabcefgd·dpabcdefgdpdpgfedcba+5V(a)(b)出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装的统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。而它们的公共端又可以分为共阳极和共阴极,如图4-1(b)所示。共阳极数码管的8个发光二极管的阳极(正极)连接在一起接高电平(一般接电源),其它管脚接各段驱动电路输出端。当某段的输出端为低电平时,则该段所连接的发光二极管导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。共阴极数码管的8个发光二极管的阴极(负极)连接在一起接低电平(一般接地),其它管脚接各段驱动电路输出端。当某段的输出端为高电平时,则该段所连接的发光二极管导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。因此我们在显示数字的时候首先做的就是给“0-9”十个数字编码,在要它亮什么数字的时候直接把这个编码送到它的阳极就行了。当数码管为多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”,有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示任意的数字了。2、数码管静态显示静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是,当显示多位数字时,将占用较多的I/O端口,硬件电路比较复杂,成本较高。3、数码管动态显示动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。点亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。三、软件设计1.用一个数码管循环演示0-9#includereg51.hunsignedcharcodetab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};main(){unsignedchari;unsignedintj;while(1){for(i=0;i10;i++)//循环演示0-9{P2=tab[i];for(j=0;j50000;j++);//延时}}}2.用数码管显示1,2,3,4,5,6,7//数码管同时显示1-7#includereg51.hunsignedcharcodewei[7]={0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};/*共阳0有效*/unsignedcharcodeduan[7]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};/*共阴1有效*/main(){unsignedchari;unsignedintj;while(1){for(i=0;i7;i++)//循环演示1-7{P0=wei[i];//位选P2=duan[i];//段选1-7for(j=0;j10;j++);//短暂延时}}}三、结果分析白色的排线接反了,导致数字出来的不对,重新排线。多次试验后,完成实验。实验三按键实验一、实验目的1、掌握单片机键盘与单片机接口2、掌握单片机键盘(独立键盘和矩阵键盘)程序设计方法3、掌握软件消除按键抖动的方法二、实验原理键盘是计算机系统中不可缺少的输入设备,当按键少时可接成线性键盘(或称独立键盘),即一个键盘占用一个I/O口中一位,当按键较多时,这样的接法占用口线较多。在按键较多时,常将按键接成矩阵的形式,可以节省口线,例如一个I/O口可按2×4的形式接8个按键。1、独立按键检测原理独立式按键采用每个按键单独占用一个I/O口中的一位结构,即按键的一端与电源地相连,另一端与单片机的任一I/O口中的一位相连。开始时先给该I/O口赋一高电平,然后让单片机不断检测该I/O口是否变为低电平,当按键闭合时,即相当于该I/O口通过按键与地相连,变成低电平;程序一旦检测到I/O口某位变为低电平,则说明连接该位的按键被按下,然后执行相应的指令。图5-1示出了单片机实验仪的独立键盘模块。它有K1~K88个独立键盘组成,每个按键有一端公共接地,另一端分别连接至JP5接线排座的8个引脚,可通过这些引脚连接到某个I/O口。图5-18个独立按键接线图三、程序设计1.蜂鸣器#includereg51.hsbitbuzzer=P2^7;voiddelay(){inti;for(i=0;i500;i++);}voidmain(){while(1){buzzer=1;delay();//延时buzzer=0;delay();//延时}}2.用按键控制灯亮灯灭#includereg51.hsbitkey=P3^3;sbitled=P2^7;voiddelay(){intj;for(j=110;j0;j--);}voidmain(){P3=0xff;while(1){if(key==0)led=0;elseled=1;}}3.用按键控制蜂鸣器响程序代码:#includereg51.hsbitbuzzer=P2^7;sbitkey=P3^0;voiddelay(){inti;for(i=0;i500;i++);}voidmain(){while(1){if(key==0){buzzer=1;delay();//延时buzzer=0;delay();//延时}}}4.用按键控制数码管亮0-9程序代码:#includereg51.h#defineucharunsignedcharsbitkey=P3^2;voiddelay(){unsignedlonginti;for(i=0;i2200;i++);}voidmain(){ucharcodetab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};uchari;i=0;while(1){if(key==0){delay();if(key==0){if(i!=10){P2=tab[i];i++;}else{i=0;P2=tab[i];i++;}}}}}三、实验结果分析刚开始没弄懂,然后在同学的帮助下完成了实验。实验四中断实验一、实验目的1、掌握MCS-51单片机中断的工作原理,体会外部中断的使用特点。2、掌握中断处理程序的编程方法和中断程序编程特点。二、实验原理:当CPU正在执行程序时,单片机外部或内部发生了某一件事情,请求CPU迅速去处理,于是CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件,处理完该事件后再回到原被中断的地方,继续做原来的工作,CPU处理事件的过程,称为CPU的中断服务。在MCS-51单片机中,用户(设计者)用3个特殊功能寄存器对中断进行管理。三、程序设计1.外部中断控制灯亮:#includereg51.hsbitled=P2^1;voidmain(){led=1;IT0=0;//低电平有效EA=1;//中断总开关EX0=1;//外部中断INT0,P3^2}voiddeng()interrupt0//外部中断0,方式0{led=0;}2.外部中断控制数码管亮0-9#includereg51.hunsignedcharcodetab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//定义数码管是显示0~9unsignedchari;u