简易航标灯设计实验文档格式.docx
《简易航标灯设计实验文档格式.docx》由会员分享,可在线阅读,更多相关《简易航标灯设计实验文档格式.docx(9页珍藏版)》请在冰豆网上搜索。
1
WD990微机电源
个
2
8051最小系统板
套
3
键盘显示接口板
块
4
万用表
5
示波器
台
6
Proteus7.8SP2仿真软件
份
7
单芯杜邦线
若干
根
三、实验流程操作图
图一实验操作流程图
四、实验内容
1、2位拨码开关:
灯质设定(频率与占空比)
2、灯驱动:
发光二极管采用12V供电,要实验单片机驱动电路设计,三极管驱动
要求:
通过光敏电阻采集光照度,白天灯熄灭,黑夜灯按照上表闪烁。
1.软件部分
C语言程序
No3_HBD.c
#include"
reg51.h"
No3_HBD.h"
sbitD=P0^0;
//灯输出控制,高电平有效
sbitOPCON=P1^2;
//光照检测,高电平(亮)
//结构体全局变量定义,code:
常数
structIALAcodeIALA4[4]={
//NumgcdON1OFF1ON2OFF2ON3OFF3
{0,0,0,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}
};
//结构体全局变量定义
structTurnCounter50ms;
///////////////////////////////////////////////////
/////T0_ISR程序////////////////////////////////////
voidT0_ISR(void)interrupt1
{
staticunsignedinti=0;
//定义静态变量i,用于统计进入T0中断的次数
unsignedchark;
TH0=(65536-COUNT_50MS)/256;
//计数初值重载
TL0=(65536-COUNT_50MS)%256;
if(OPCON==0)//
{for(k=0;
k<
2;
k++)
{
if(i==Counter50ms.state[2*k])
{
D=D_CLOSE;
//熄灭LED灯
}
if(i==Counter50ms.state[2*k+1])
{
D=D_OPEN;
//点亮LED灯
}
if(i==Counter50ms.state[4])
{
D=D_CLOSE;
//熄灭LED灯
if(i>
=Counter50ms.state[5])
D=D_OPEN;
//点亮LED灯
i=0;
i++;
//若是黑夜,根据灯质设定控制灯LED灯闪烁
}
else
//若是白天,熄灭LED灯
D=D_CLOSE;
i=0;
}
}
/////按键判断//////////////////////////////////////
unsignedcharGetKey(void)
unsignedcharkey;
key=0;
if(P1&
0x01)
key=key|0x01;
0x02)
key=key|0x02;
//此处添加按键Key1、Key0代码
return(key);
/////定时器0初始化/////////////////////////////////
voidT0_Init(void)
TMOD=(TMOD&
0xf0)|0x01;
//定义T0为16位定时方式
//赋计数初值的高8位
//赋计数初值的低8位
ET0=1;
//T0中断使能
EA=1;
//总中断使能
TR0=1;
//T0启动
/////主程序////////////////////////////////////////
voidmain(void)
unsignedcharkey,pre_key=0,i;
unsignedintsum;
T0_Init();
D=0;
while
(1)
{
key=GetKey();
//获取key1、Key0特征码
if(key!
=pre_key)//若有新的按键,载入控灯时间
sum=0;
for(i=0;
i<
6;
i++)
sum=sum+IALA4[key].gcd*IALA4[key].state[i];
Counter50ms.state[i]=sum;
}
pre_key=key;
}
No3_HBD.h
#ifndef__No3_HBD__
#define__No3_HBD__
#defineCOUNT_50MS50000//50msgcd:
50ms的倍数
#defineD_OPEN1//开灯
#defineD_CLOSE0//关灯
//结构体类型声明1
structIALA
unsignedcharnum;
//拨码开关状态
unsignedchargcd;
//各时间间隔最大公约数
unsignedcharstate[6];
//无符号字符型时间常数
//结构体类型声明2,结构体变量一般不放在.h文件中
structTurn
unsignedintstate[6];
unsignedcharGetKey(void);
//获取键值函数声明
voidT0_Init(void);
//定时器初始化函数声明
#endif
2.实物部分
本次实验所采用的硬件都是老师提供的,所以不存在原理问题,不存在硬件问题。
实验器材上,不能通过按键来模拟信号的高低。
通过杜邦线的接地不接地来模拟两个输入0,1。
总体来说,可以恰当的实现4种灯的闪烁。
当然不能单纯的通过肉眼来发现,可以通过示波器来看每个波形的周期来验证程序的正确性,肯定的一点示波器在单片机的实验当中,有着很大的适用面。
3.调试部分
调试采用ISPlay1.3进行程序烧写,小心操作并将烧写好的芯片放到设计系统中进行实物验证原理图所对应的实物图,及时发现处理问题。
调试过程中,要注意模拟仿真的过程。
分模块的设计理念对于从事这行业的人来说是有用的。
这次实验用到的程序按键判断,定时器初始化,主程序可以在proteus7.0下进行仿真,可以分模块的进行仿真,在自己的操作过程中,先对按键判断进行验证,参考教师提供的程序,基本上着一个模块是没有问题的,同时软件和硬件是要结合的。
主程序的功能才是一个重点,需要考虑到每个模块的调用。
定时器的初始化有固定的格式,但还是要对题目有一些的了解,不然也不好分析延时的数值的大小。
这部分的重点需要好好把握和学习。
五、实验小结
通过这次实验,结合所学知识,完成了简易航标灯设计实验,学习掌握定时器/计数器原理及其应用;
了解航标灯控制要求;
更进一步地掌握Proteus78单片机仿真软件的使用;
掌握KeiluVision环境下工程项目设计方法与文件管理;
熟悉按键判断与定时器/计数器的使用与功能验证。
采用工程设计的方法完成了程序设计,经过调试与多次求助改正,完成了程序的编写,理解了程序的思路,然后在通过Keiluvision软件生成.hex文件,用Proteus软件对其进行仿真验证,实验的过程并不是一帆风顺,我们面临了很多的问题,得到了老师和同学们的帮助,也让我们认识到自身的不足,和知识的缺少。
除了课堂所学知识之外,我们并没有去拓展我们的知识,更是很少去运用到我们的知识。
熟能生巧,可是没有实际的操作和锻炼,所学的理论知识并不够解决所有的问题。
通过实验,让我们能认真严肃地对待自己动手,独立思考等问题。
THANKS!
!
致力为企业和个人提供合同协议,策划案计划书,学习课件等等
打造全网一站式需求
欢迎您的下载,资料仅供参考