实验一跑马灯实验Word文档下载推荐.docx

上传人:b****2 文档编号:971927 上传时间:2023-04-29 格式:DOCX 页数:11 大小:77.71KB
下载 相关 举报
实验一跑马灯实验Word文档下载推荐.docx_第1页
第1页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第2页
第2页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第3页
第3页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第4页
第4页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第5页
第5页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第6页
第6页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第7页
第7页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第8页
第8页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第9页
第9页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第10页
第10页 / 共11页
实验一跑马灯实验Word文档下载推荐.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验一跑马灯实验Word文档下载推荐.docx

《实验一跑马灯实验Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验一跑马灯实验Word文档下载推荐.docx(11页珍藏版)》请在冰点文库上搜索。

实验一跑马灯实验Word文档下载推荐.docx

2、根据实验内容编写好相关程序,并进行Proteus仿真。

三、实验内容

1、基本的流水灯。

根据图3.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、基本的流水灯

软件延时采用程序voiddelay(unsignedintc),可调整延时时间。

由于是按下键不松手,键值一直保留,所以判断if(K1==0),即是按下K1,采用如例题所示的if(K1==0)或if(K1==1),后接while

(1)循环的模式。

3、键控的流水灯

由于是按一下键后马上松手,所以要设置一个变量K保留按键键值,由于单片机本身原理图所致,K17、K18、K19、K20四个键已经固定为K17=P2^0、K18=P2^1、K19=P2^2、K20=P2^3所以直接运用,利用如if(K1==0)的条件判断语句来判断是否按下K1、K2、K3按键,实现键控流水灯。

五、实验原理图

如图3.1所示。

图3.1跑马灯实验电路原理图

电路原理图如图3.1,AT89S52的P0.0~P0.7作为输出连接8个发光二极管,输出低电平0时对应发光二极管发光;

由于发光二极管的导通电压为1.7V,所以HNIST-2型实验装置在电源与二极管之间加一个阻值为1K限流电阻保护二极管。

AT89S52的P2.0、P2.1、P2.2、P2.3作为输入连接4个按键K1、K2、K3、K4,若检测到P2.0=0,则说明K1键按下,其他键同理。

六、源程序

1、简单流水灯

#include<

reg52.h>

intrins.h>

#defineuintunsignedint

#defineucharunsignedchar

voiddelay(unsignedintc);

sbitK1=P2^0;

//定义引脚

sbitK2=P2^1;

sbitK3=P2^2;

sbitD0=P0^0;

sbitD1=P0^1;

sbitD2=P0^2;

sbitD3=P0^3;

sbitD4=P0^4;

sbitD5=P0^5;

sbitD6=P0^6;

sbitD7=P0^7;

voiddelay(unsignedintc)//延时函数

{

unsignedchara,b;

for(;

c>

0;

c--)

{

for(b=50;

b>

b--)

{

for(a=100;

a>

a--);

}

}

}

voidmain()//主函数

unsignedcharLED;

LED=0xfe;

while

(1)

P0=LED;

//P0=11111110

delay(50);

LED=LED<

<

1;

if(P0==0x00)

LED=0xfe;

}

}

2、简单键控流水灯

voiddelay(unsignedintc)//延时函数

voidmain()//主函数

{

if(K1==0)

//P0=11111110

delay(50);

if(K1==1)//按下按键不松,跳出循环。

{

break;

if(K1==1)

LED=0x7F;

//P0=011111111

LED=LED>

>

LED=0x7F;

if(K1==0)//松开按键,跳出循环。

}

3、键控流水灯

unsignedchari;

LED=0x00;

//先全亮

if(K1==0)//按下K1,顺序熄灭。

while

(1)

{

LED=0x00;

delay(20);

for(i=0;

i<

9;

i++)

{

P0=LED;

delay(20);

LED=LED<

LED=LED|0x01;

if(K2==0)break;

if(K3==0)break;

}

}

if(K2==0)//按下K2,倒序熄灭。

while

(1)

{

{

delay(20);

LED=LED>

LED=LED|0x80;

if(K1==0)break;

if(K3==0)//按下K3,全灭。

P0=0x00;

if(K3==1)

P0=0xff;

七、实验思考题

1、采用I/O口作为输出口时要考虑哪些因素?

为什么实验装置中LED要串联一个电阻?

答:

当作为输出口时候就是单片机向外发出数据,或者再产生拉电流,单片机的拉电流一般要比灌电流小,基本上就能点亮2,3个LED,功率很有限所以单片机驱动外围器件一般需要驱动芯片。

防止LED过流烧坏。

2、采用I/O口作为输入口时要注意什么?

键控的流水灯时为什么要在延时程序中检测是否按键?

当作为输入口时候是单片机接收IC的数据信息,或者是灌电流,这时候要考虑电流的大小是否在单片机的承受范围内;

放在主程序里,每个延时周期内,只能检测按键一次,反应比较慢。

放在延时程序里,检测时间间隔比较短,反应快。

3、为什么延时程序要做一个函数?

单片机的运行速度是很快的,如果不进行延时,肉眼难以分辨流水灯;

将延时程序做成一个函数一是因为C51的特性,延时程序不必写入主程序,减少程序的繁琐性,增加美观;

二是因为延时函数只需写一次,然后调用即可,节省时间。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2