简易航标灯报告.docx
《简易航标灯报告.docx》由会员分享,可在线阅读,更多相关《简易航标灯报告.docx(10页珍藏版)》请在冰豆网上搜索。
简易航标灯报告
单片机实验报告
课程名称单片机技术与应用
实验名称简易航标灯设计实验
专业光电信息工程
班级光电121班
学号*********
姓名蒯玄
实验地点躬行楼528
实验日期2015.5.28
一、实验目的
1、掌握定时器/计数器原理及其应用;
2、了解航标灯控制要求;
二、实验仪器
编号
仪器设备
数量
单位
1
WD990微机电源
1
个
2
8051最小系统板
1
套
3
键盘显示接口板
1
块
4
万用表
1
套
5
示波器
1
台
6
Proteus7.8SP2仿真软件
1
份
7
单芯杜邦线
若干
根
图3-1简易航标灯控制结构图
三、实验内容
1、2位拨码开关:
灯质设定(频率与占空比)
2、光敏电阻:
实现光照采集(光照强,电阻小;光照弱,电阻大)
3、灯驱动:
发光二极管采用12V供电,要实验单片机驱动电路设计,三极管驱动
要求:
通过光敏电阻采集光照度,白天灯熄灭,黑夜灯按照上表闪烁。
课时数:
2课时
四、预习要求
1、完成简易航标灯系统的标准DXP原理图;
2、编程实现简易航标灯的各项功能;
3、Proteus78仿真说明:
光敏电阻:
TORCH_LDR,2位拨码开关:
DIPSW_2接时不能接上拉电阻,否则仿真不通过;
五、实验步骤
1、硬件:
Proteus仿真电路设计,实物输入、输出信号模拟;
2、软件:
在Keil环境下编写程序,生成.hex文件,通过ProteusProteusV78_Timer0_HBD)进行功能仿真;
3、调试:
反复修改程序,完善功能。
4、仿真完成后有条件的同学可通过端口模拟进行功能验证。
六、实验过程
1、实验原理图
原理图
2、程序部分
#include"reg51.h"
#defineCOUNT50000//50msgcd:
50ms的倍数
#defineD_OPEN1//开灯
#defineD_CLOSE0//关灯
sbitled=P0^0;//灯输出控制,高电平有效
sbitOPCON=P1^2;//光照检测,高电平(亮)
structIALA
{
unsignedcharnum;//拨码开关状态
unsignedchargcd;//各时间间隔最大公约数
unsignedcharstate[6];//无符号字符型时间常数
};
unsignedintState[6];
unsignedcharGetKey(void)
{
unsignedcharkey;
key=0;
if((P1&0x01)==0)//低电平有效
key|=0x01;
if((P1&0x02)==0)
key|=0x02;
return(key);
key|=P1;
returnkey&0x03;
}
//获取键值,两个开关有四种状态,分别是00,01,10,11即可获得四个键值0,1,2,3
conststructIALAIALA4[4]={
{0,10,1,0,0,0,0,0},
{1,10,1,3,0,0,0,0},
{2,10,1,1,1,7,0,0},
{3,10,1,2,1,2,1,5}
};
将计数判断点存入数组中
//设定灯质状态,以及各个状态的时间
unsignedintit=0;
voidT0_ISR(void)interrupt1
{
unsignedcharj;
TH0=(65536-COUNT)/256;
TL0=(65536-COUNT)%256;
if(OPCON==0)//黑夜、暗照度
{
it++;
for(j=0;j<6;j++)
{if(it==State[j])
led=(j%2)?
D_OPEN:
D_CLOSE;//判断是开灯还是关灯状态
}
if(it>=State[5])
{
it=0;
}
}
else//白天、亮照度
{
led=D_CLOSE;
}
}//中断服务程序
voidmain(void)
{
unsignedintsum=0;
unsignedcharkey,pre_key=0,i;
TMOD=(TMOD&0xf0)|0x01;
TH0=(65536-COUNT)/256;
TL0=(65536-COUNT)%256;
ET0=1;//中断使能
EA=1;
TR0=1;//T0启动
led=1;
sum=0;
while
(1)
{
key=GetKey();//获取键值
if(key!
=pre_key)
{
for(i=0;i<6;i++)
{sum=sum+(IALA4[key].gcd)*(IALA4[key].state[i]);
State[i]=sum;
}
if(sum==1)
led=1;
}
pre_key=key;
}
}
3、仿真波形:
第一种状态仿真波形
第二种状态仿真波形
第三种状态仿真波形
第四种状态仿真波形
4、调试过程记录:
调试先在KeiluVision4软件环境下进行程序编写,利用C语言来编写本次实验所需程序。
因为本次实验为简易航标灯的控制设计实验,通过两个拨码开关来实现四种状态的变化。
并且用一个LED灯,来显示航标灯的亮灭规律。
程序编写完成后再生成hex文件在proteus7.8的仿真图中进行模拟仿真,有问题时,再回到KeiluVision4中对程序进行修改。
当在proteus中仿真成功以后,再将程序烧写到开发板上,进行实物调试。
在进行实物调试时需要将输入信号接到示波器上,这样可以精确观察,以确保编写的程序定时的准确,没有误差,达到精确定时的目的。
仿真时发现波形不对,与各种状态的时间不符合,然后我们将程序的50000参数改变为500,这样在仿真的时候就可以观察到完整的波形,也可以进行验证各个状态的参数是否设置正确,最后加以改正,得出了正确的仿真结果,使得程序能正确运行。
七、实验小结
经过好几次实验的训练,我们知道了单片机实验最主要的就是程序的编写以及Keil软件的熟练运用。
在程序编写好的基础上,我们要进行仿真,只有看到仿真效果才能判别出我们程序的对与错,从而才能进行实物上的操作。
如果仿真出不来我们实验所要求的效果,则很大可能就是我们程序的某一部分编写错误,我们要对程序进行修改。
本次试验我们在Keil环境下编写了程序并通过Proteus(SY1_Proteus_test)进行了功能仿真,在面包板上搭建了2个按键控制8个发光二极管的跑马灯的设计,总的来说并不是很难,下次实验我们会继续努力,提前做好充分的预习准备,实验前的预习很重要。