单片机炫彩灯实训报告_单片机跑马灯实验报告
学号 14142200277序号 19
单片机原理与接口技术
实验报告 实验项目序号
一
实验项目名称
跑马灯实验
姓
名
卢志雄
专 业 电子信息工程
班
级
电信14-2BF
完成时间
2016年4月2日
一、实验内容
实验内容为 3 项,其中第 1、2项必做。
1、基本得流水灯。
根据图1所示的电路设计一段控制程序代码,在主控芯片内部实现对8片发光二极管组(标记为D1至D8)的正序逐个亮灭操作:首先依次点亮第一个到第二个发光二极管(即依次按照序列循环点亮每个发光二极管),直到完成一圈之后再次从第一个开始循环亮灭。在每次点亮一个发光二极管时,在软件中设置相应的延时间隔以确保操作有序进行。
2、简单键控得流水灯。
不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,
再顺序点亮D7、D6……D1、D8……。松手后,又按正序点亮流水灯。
3、键控得流水灯。
开机后不开启LED,按下K1键后按照升序亮起流水指示灯;按下K2键则按照降序亮起流水指示灯;完全关闭所有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 全ﻩ
该系统采用延迟为2250个时间单位的时延亮点动流检测机制。该系统通过评估当前键值状态的变化情况来启动后续操作。
#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 使用?答:电压大小(包括其可感知的最小电压作为高电平)以及电流驱动能力等参数均为重要考量因素;同时在 LED 装饰电路时还需考虑是否需附加拉电阻以稳定工作状态。因此,在实验装置中为何串联电阻以供 LED 使用主要是为了避免因电流过大导致 LED 损坏的问题。
当使用 I/O 接口作为输入端时,请注意以下事项:首先,在进行读操作之前需确保Px口被锁存器置位;其次,在完成所有流程后请记得将Px口复位以释放资源。至于您的第二个问题,在实现流水灯功能的过程中为何要在延时程序中检测按键状态?这是因为通过这种方式能够避免出现虽然有按键但系统未能及时捕捉到的情况。具体来说,在延时不进行任何中断操作可以使系统保持高度稳定;而将按键探测功能置于延时不 only 能够迅速响应潜在的操作 but also 避免出现虽然有按键但系统未能及时捕捉到的情况。
3、为什么要为延时程序设计一个独立的功能模块?灯光会按照黄灯变绿灯再变红灯的顺序交替变化。实现对灯光信号的有效控制。使用适当的调整方法来处理相关情况答:所有相关的事物都受到时间上的严格控制。其中灯光亮度的变化也需要通过延时程序来进行精确调节。
七、实验心得体会
深入学习单片机课程的过程中,需要彻底掌握汇编语言各种基本指令的作用以及程序设计与实际操作的方法,同时熟练运用输入输出中断等接口技术进行开发。跑马灯实验作为单片机课程的第一个实践项目,让我深刻体会到理论与实践结合的重要性:首先必须熟练掌握单片机的基本指令,上课时要认真听讲,按时完成课后练习题;只要跟上老师的讲解并按时完成课后练习题,就能顺利掌握程序设计与实际操作的方法;然后就需要反复练习基础指令的编写,并利用Proteus及UViSim4等仿真软件进行编程;最后通过教材学习单片机与外部设备之间的输入输出中断等接口技术,就可以顺利完成简单的跑马灯实验了!
