学号 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,使用软件延迟一段时间。
简单键控制流水灯。
不按键,按正序点亮流水灯;按下K1.不要松手,按倒序点亮流水灯,即先点亮D8,
然后顺序点亮D7,D6……D1、D8……。放手后,按正序点亮流水灯。
3.键控流水灯。
上电,不点亮 LED,按一下 K1键,按正序点亮流水灯。 K2 按钮,按倒序点亮流水灯,按下 K3 键,全部关闭LED。
二、电路原理图
XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1AT89C51D0 D1 D2 D3 D4 D5 D6 D7 5VK1K2K3K4 图 1
跑灯实验电路原理图 三、程序流程图
图 2
简单键控制流水灯程序流程图 四、源程序 1、基本得到流水灯 #include
?? ///延迟函数 data uint j; { data uint i;
while(j--)
for(i=0;i<250;i ); } void main( )
?
//主函数 { data uchar a;
a=1;
?
///保证只有一个亮点
while(1)//?
循环断断断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环断不循环循环断不循环断不循环断不循环断不循环循环循环断不循环断不循环断不循环循环断不循环循环断不循环断不循环循环循环断不循环循环断不循环断不循环断不循环循环循环断不循环循环循环循断不循断不循环循环循环循环循环循环循环断不循环循断不循断不循断不循断不循环循环循环循断不循断不循环循断不循环循环循环循环循环循断不循环循环循断不循环循环循环循环循环循断不循断不循断不循环循环循环循环循环循断不循断不循断不循环循环循环循环循
{
P2=~a;
///低电平点亮
a=a
//左移一位,右补 0
if(a==0)a=1; // 0 全?
delay(2250);} // 时延亮点动流?检测 P2 键值 开始 完成对应键值功能 判断 P2 键值是否改变
} 2.简单键控制流水灯 #include #define uchar unsigned char #define uint unsigned int void delay(uint i) { uchar t;
while(i--)
{
? for(t=0;t<120;t +);
}?} void main() {
;a rahcu atad?
;1=a?? ?
while(P2==0xff) ???
{ ;a~=0P? ?
?
a=a<<1;
?
)0==a(fi???
;1=a?
delay(250);
}
)efx0==2P(elihw? ??
{
P0=~a;
???
a=a>>1;
)0==a(fi?
;821=a??
;)052(yaled?
? }?
?
} 3.键控流水灯 #include
if(P2==0xfd) b=0xfd;
? if(P2==0xfb)
b=0xfb;
? for(t=0;t<120;t );
}?} void main()
{
data uchar a;
a=1;
???
while(P2==0xfe)
?
?
{? P0=~a;
?
a=a<
??
)0==a(fi?? ;1=a?
?
delay(250);
while(P2==0xff)
? ?
?
{? ?
;a~=0P??
;1<
)0==a(fi?
a=1;
;)052(yaled? ?
}? }
while(P2==0xfd)
?
?
{
;a~=0P???
a=a>>1;
?
if(a==0)a=128;
delay(250);
)ffx0==2P(elihw???
{
;a~=0P? ??
;1>>a=a?
?
?
?
;821=a)0==a(fi?
delay(250);
? }
}
while(P2==0xfb)
{
};ffx0=0P?} 五、实验结果 1 、 基本得流水灯
基本流水灯仿真图 2、 、 简单键控制流水灯
简单键控制流水灯仿真图 3、 、 控制流水灯
按键控制流水灯仿真图 六、思考题回答 1、采用 I/O 口作为输出口需要考虑哪些因素?为什么在实验装置中? LED要串联一个电阻? 答:电压的大小(包括它能感知到最小电压作为高电平)、电流的驱动能力等。,并考虑是否增加拉电阻。L在实验装置中E串联一个电阻是为了防止电流过大而对LE损坏了D灯。
2、采用 I/O 口作为输入口需要注意什么?键控得流水灯时为什么要在延时程序中检测就是否按键? 答:读书时一定要先走 Px 口得锁存器写 1;本程序不采用例程中提到的方法,但在延迟函数中进行按钮检测是为了防止延迟函数中间有按钮但无法检测到的情况,即延迟函数中的检测间隔时间短,反应快。
为什么延迟程序要做函数? 灯是黄色的,绿色的,红色的,控制着灯信的交通比例。方便调整,处理具体的事情可以:答有时间控制,亮长度由延迟程序控制等。
七、实验经验
学习单片机课程,掌握单片机指令系统汇编语言的意义、汇编语言程序设计的基本知识和方法、单片机与其他设备连接的输入输出中断等接口技术。虽然跑马灯实验是第一个单片机实验,但它让我有了深刻的理解。首先,我们应该熟悉单片机的指示,在课堂上跟随老师,认真对待。每次,只要我们跟上老师在课堂上讲的内容,按要求完成老师布置的课堂练习,掌握程序并完成实际的计算机操作,就不是问题,然后我们必须熟练地使用一些基本的句子,运用proteus与 uVision4 等待模拟软件,最后是机器操作,根据教程了解单片机与其他设备连接输入输出中断等接口技术,使用实际,可以完成简单有趣的马灯实验!