/*************************************************************************
* 单片机智能调光台灯
* 手动模式:灯光亮度三档调节
* 自动模式:更具光照强度自动调节
************************************************************************/
#include <reg52.h>
#include "key.h"
#include "delay.h"
#include "adc0832.h"
/*-------数据类型------*/
#define uchar unsigned char
#define uint unsigned int
/*-------管脚定义------*/
sbit PWM_Pin=P2^0; //LED管脚,输出PWM
/*-------定义变量------*/
uchar Key_Value=0; //定义按键值
uint PWM_Count=0; //用于输出PWM 计数
uint PWM_Flag=55; //调节占空比=PWM_Flag/100
float Volt; //定义变量存放AD0832读取的电压
uchar Lev_Flag=1; //档位
bit Mode_Flag=0; //0手动 1自动模式
/*-------函数声明------*/
void Timer_Init(void); //定时器初始化函数
/******************************************************************************
* 函 数 名 : main()
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
******************************************************************************/
void main()
{
uint Vol_buf; //电压缓冲变量
PWM_Pin=1;
Timer_Init(); //定时器初始化
while(1)
{
Key_Value=Key_Check(); //检测按键
if(Key_Value!=0) //Key_Value=0表示无按键按下
{
switch(Key_Value) //判断按键值
{
case 1: //开关
TR0=~TR0; //打开/关闭定时器
if(TR0==0)
PWM_Pin=1;
break;
case 2:
Mode_Flag=~Mode_Flag; //手动自动切换
break;
case 3:
if(!Mode_Flag)
{
Lev_Flag++;
if(Lev_Flag==4)
Lev_Flag=1;
if(Lev_Flag==1) //第一档
PWM_Flag=55;
if(Lev_Flag==2) //第二档
PWM_Flag=30;
if(Lev_Flag==3) //第三档
PWM_Flag=1;
}
break;
}
}
if((Mode_Flag)&&(TR0==1))//自动模式
{
Vol_buf=ADC0832_Read(1); //读取AD转换电压值
Volt=(float)Vol_buf/256*5; //计算实际电压
if(Volt<=2.4)Volt=2.4; //当亮度小于20,亮度调为最大
PWM_Flag=(uchar)(40.0*Volt-95.0);
}
}
}
/*****************************************************************************
* 函 数 名 : Timer_Init
* 函数功能 : 定时器初始化
* 输 入 : 无
* 输 出 : 无
*****************************************************************************/
void Timer_Init()
{
TMOD|=0x01; //打开定时器0,工作方式1。
TH0=0xff; //给定时器0赋初值,定时50us
TL0=0xce;
//
// TH1=0x3c; //给定时器1赋初值,定时50ms
// TL1=0xb0;
ET0=1; //打开定时器0中断允许
// ET1=1; //打开定时器1中断允许
//
// PT1=1; //优先级
// TR0=1; //打开定时器0
// TR1=1;
EA=1; //打开总中断
}
/*******************************************************************************
* 函 数 名 : void Timer0() interrupt 1
* 函数功能 : 定时器0中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer0() interrupt 1
{
TH0=0xff; //给定时器0赋初值,定时50us
TL0=0xce;
if(PWM_Count==0) PWM_Pin=1; //PWM引脚置1
if(PWM_Count==PWM_Flag) PWM_Pin=0; //PWM引脚置0
if(PWM_Count==100) PWM_Count=0; //一个周期结束,计数清零
else PWM_Count++;
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
120_ 基于51单片机和PROTEUS的基于单片机的智能台灯.zip (33个子文件)
1.程序
DeskLamp_uvopt.bak 57KB
include
adc0832.h 669B
key.h 260B
delay.h 254B
mian
main.c 3KB
out
DeskLamp.m51 13KB
DeskLamp 11KB
DeskLamp.build_log.htm 1KB
delay.lst 2KB
main.lst 6KB
delay.obj 2KB
adc0832.obj 2KB
key.lst 2KB
DeskLamp.plg 7KB
adc0832.lst 3KB
DeskLamp.hex 5KB
main.obj 5KB
key.obj 2KB
DeskLamp.lnp 144B
DeskLamp.plg 5KB
driver
key.c 1KB
delay.c 784B
adc0832.c 2KB
DeskLamp.uvopt 6KB
DeskLamp.uvproj 15KB
DeskLamp_uvproj.bak 0B
DeskLamp.uvgui.Fd_HU 89KB
演示视频.mp4 1.47MB
仿真截图.png 100KB
2.仿真
智能台灯.DSN 150KB
智能台灯.pdsprj.LAPTOP-BA1VJVLL.Fd_HU.workspace 2KB
Last Loaded 智能台灯.pdsbak 27KB
程序截图.png 93KB
共 33 条
- 1
资源评论
达西西66
- 粉丝: 1211
- 资源: 550
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功