预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

专业资料整理分享 完美WORD格式编辑 学号14142200277序号19 单片机原理与接口技术 实验报告 实验项目序号一 实验项目名称跑马灯实验 姓名卢志雄专业电子信息工程班级电信14-2BF 完成时间2016年4月2日 一、实验内容 实验内容为3项,其中第1、2项必做。 1、基本的流水灯。 根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。每点亮一个LED,采用软件延时一段时间。 2、简单键控的流水灯。 不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。松手后,又按正序点亮流水灯。 3、键控的流水灯。 上电,不点亮LED,按一下K1键,按正序点亮流水灯。按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。 二、电路原理图 图1跑马灯实验电路原理图 三、程序流程图 检测P2键值 开始 完成对应键值的功能 判断P2键值是否改变 图2简单键控的流水灯程序流程图 四、源程序 1、基本的流水灯 #include<reg51.h> #defineuintunsignedint #defineucharunsignedchar voiddelay(j) //延时函数 datauintj; {datauinti; while(j--) for(i=0;i<250;i++); } voidmain() //主函数 {datauchara; a=1; //保证只有一个点亮 while(1) //不断循环 {P2=~a; //低电平点亮 a=a<<1; //左移一位,右补0 if(a==0)a=1; //全0 delay(2250);} //流动点亮延时 } 2、简单键控的流水灯 #include<reg51.h> #defineucharunsignedchar #defineuintunsignedint voiddelay(uinti) { uchart; while(i--) { for(t=0;t<120;t++); } } voidmain() { datauchara; a=1; while(P2==0xff) { P0=~a; a=a<<1; if(a==0) a=1; delay(250); } while(P2==0xfe) { P0=~a; a=a>>1; if(a==0) a=128; delay(250); } } 3、键控的流水灯 #include<reg51.h> #defineucharunsignedchar #defineuintunsignedint voiddelay(uinti) { uchart; dataucharb=0xfb; while(i--) { if(P2==0xfe)b=0xfe; if(P2==0xfd)b=0xfd; if(P2==0xfb)b=0xfb; for(t=0;t<120;t++); } } voidmain() { datauchara; a=1; while(P2==0xfe) { P0=~a; a=a<<1; if(a==0) a=1; delay(250); while(P2==0xff) { P0=~a; a=a<<1; if(a==0) a=1; delay(250); } } while(P2==0xfd) { P0=~a; a=a>>1; if(a==0)a=128; delay(250); while(P2==0xff) { P0=~a; a=a>>1; if(a==0)a=128; delay(250); } } while(P2==0xfb) { P0=0xff;} } 五、实验结果 1、基本的流水灯 基本流水灯仿真图 2、简单键控的流水灯 简单键控的流水灯仿真图 3、键控的流水灯 键控的流水灯仿真图 六、思考题回答 1、采用I/O口作为输出口时要考虑哪些因素?为什么实验装置中LED要串联一个电阻? 答:电压的大小(包括它能感知的最小电压作为高电平),电流的驱动能力等,同时也要要考虑它是否要加上拉电阻。实验装置中LED串联一个