常熟理工学院课程设计报告
PAGE
单片机实验报告
课程名称 单片机技术及应用
实验名称 简易航标灯设计实验
专 业 光电信息工程
班 级 光电121班
学 号 050312113
姓 名 蒯 玄
实验地点 躬行楼528
实验日期 2015.5.28
一、实验目的
掌握定时器/计数器的原理及其应用;
了解航标灯控制要求;
二、实验仪器
编号
仪器设备
数量
单位
1
WD990微机电源
1
个
2
8051最小系统板
1
套
3
1
块
4
1
套
5
1
台
6
Proteus7.8 SP2仿真软件
1
份
7
单芯杜邦线
若干
根
图3-1 简单航标灯控制结构图3。实验内容
图3-1 简单的航标灯控制结构图
1.2位拨码开关:灯质设置(频率与占空比)
2.光敏电阻:实现光收集(光强,电阻小;光弱,电阻大)
3、灯驱动:发光二极管采用12V供电,实验单片机驱动电路设计,三极管驱动
要求:通过光敏电阻采集光照度,白天灯熄灭,黑夜灯按照上表闪烁。
课时数:2课时
四、预习要求
1.完成简易航标灯系统的标准DXP原理图;
编程实现简易航标灯的各种功能;
3、Proteus78模拟说明:光敏电阻:TORCH_LDR,2位拨码开关:DIPSW_2连接时不能连接拉电阻,否则模拟不会通过;
五、实验步骤
硬件:Proteus模拟电路设计、实物输入输出信号模拟;
软件:在Keil 在环境中编写程序,生成.hex文件,通过ProteusProteusV78_Timer0_HBD)功能仿真;
调试:反复修改程序,改进功能。
模拟完成后,有条件的学生可以通过端口模拟进行功能验证。
六、实验过程
1.实验原理图
原理图
2、程序部分
#include "reg51.h"
#define COUNT 50000 //50ms gcd:50ms的倍数
#define D_OPEN 1 //开灯
#define D_CLOSE 0 //关灯
sbit led=P0^0; ///灯输出控制,高电平有效
sbit OPCON=P1^2; ///光照检测 ,高电平(亮)
struct IALA
{
unsigned char num; ///拨码开关状态
unsigned char gcd; ///每个时间间隔最大公约数
unsigned char state[6]
};
unsigned int State[6];
unsigned char GetKey(void)
{
unsigned char key;
key=0;
if((P1&0x01)==0) ///低电平有效
key|=0x01;
if((P1&0x02)==0)
key|=0x02;
return(key);
key|=P1;
return key&0x03;
}
//获取键值,两个开关有四种状态,即00、01、10、11,可获得0、1、2、3
const struct IALA IALA4[4]={
{0,10,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
{1,10,1,3,0,0,0,0},
{2,10,1,1,7,0,0}
{3,10,1,2,1
};
将计数判断点存储在数组中
///设置灯质状态和各种状态的时间
unsigned int it=0;
void T0_ISR(void) interrupt 1
{
unsigned char j;
TH0=(65536-COUNT)/256;
TL0=(65536-COUNT)%6;
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 //白天、亮照度