- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于ATtiny13的手电筒(头灯)控制电路和程序
本人有一个用一节18650电池、带变焦的头灯,该头灯有强光、弱光和闪烁三个档,
用Q5 LED,一个按钮来控制开/关和换档,顺序是:开(强光)-〉弱光-闪烁-关。
但功能和档位不太满意,于是用ATtiny13单片机制作一个控制电路替换原有的控制器。
通过ATtiny13a单片机的编程实现了一下功能:
1、按一次开灯,再按一次就关灯,解决了按三次关灯的问题。
2、开灯后长按1.5秒以上并进入设定亮度模式,闪烁三次来提示。
3、亮度设定共有5个档位,20%、40%、60%、80%、100% 每按一次加一个档,到头再按循环。
4、在设定模式下长按1.5秒以上便推出设定模式,闪烁三次来提示。
5、退出设定模式时候亮度值保存在EEPROM,这样就拿掉电池也不怕丢设定值,下次开灯直接就是上次设定值了。
6、开灯时亮度逐渐变亮到设定值,关灯时亮度逐渐变暗 ,最终灭掉,此功能为独创,是为了减少对眼睛的刺激。设定值为100%亮度的时候,约1秒内亮度从0%开始逐渐达到100%的亮度,关灯相反、约1秒内亮度从100%开始逐渐减到0%。
手电筒控制电路如下:
以下是程序,利用了ATtiny13a的PWM、外部中断、睡眠、看门狗和EEPROM的读写功能,基本上每一行都加了注释,对于初次接触ATtiny13的人来说应该有帮助的。
流程图:
程序源代码:
/**********************************************************************
* 名称 :LED控制程序
* 描述 :调光设置功能
* MCU :ATTiny13A
* 晶振 :RC 9.6MHz
* 编译环境 :CodeVisionAVR 2.04.4a
* 版本 :3.0 KEY用外部中断方式、增加睡眠功能、修改看门狗,8分频(4.6875KHz)
***********************************************************************/
#include tiny13.h
//#include delay.h
#define uchar unsigned char
#define uint unsigned int
#define KEY PINB.1 //tiny13第6脚,INT0 外部中断
#define LEDDRV PORTB.0 //tiny13第5脚
#define LEDDRV2 PORTB.2 //tiny13第7脚(指示灯)
#define MAX_STATE 5u //最多档位数
#define LONG_KEY 15 //长按键的时间
#define ADDRESS 0x01 //保存档位的地址
/********** 变量定义 **********************************************/
//uchar pwm[]={0x20,0x40,0x60,0x80,0xA0,0xC0,0xE0,0xFF};
uchar pwm[]={0x20,0x40,0x80,0xC0,0xFF}; //亮度值
uchar pwmVal = 0; //亮度档位
uchar status = 0; //0为LED OFF,1为LED ON
uchar mode = 0; //0为使用模式,1为设置模式
uint keytime = 0; //按键时间
/**********************************************************************
* 描述 :软件延时函数(RC 9.6MHz)
* 输入 :延时毫秒数
***********************************************************************/
void delayMs(uint n)
{
uint i;
uint j;
for (i=0; in; i++)
for (j=0; j137 ; j++) //RC 9.6MHz时候延时1MS
#asm(nop)
}
/**********************************************************************
* 名称 : init_devices()
* 功能 : 端口、定时器、PWM初始化
* 输入 :无
* 输出 :无
**********************************************
您可能关注的文档
- 筏板基础施工教材.ppt
- 筏板基础施工要点教材.ppt
- 电器与可编程控制器应用技术(3版)-电子解释.ppt
- 纺织的热学光学和电学性质教材.ppt
- 纺织品检验02教材.ppt
- 纺织品抗静电整理教材.ppt
- 电容电容器解释.ppt
- 电容件识别与检测1解释.ppt
- 电商广告数据及投放策略解释.ppt
- 电商网站建设方案解释.ppt
- 高校教师资格证之《高等教育法规》练习题及答案详解(真题汇编).docx
- 高校教师资格证之《高等教育法规》练习题库及答案详解【名师系列】.docx
- 陶瓷新材料生产线项目投资计划书(参考).docx
- 奢侈品行业2025年消费者行为模式与市场趋势研究报告.docx
- 婚姻家庭继承法原理与实务法律事务专业教学92课件.pptx
- 高校教师资格证之《高等教育法规》练习题库附参考答案详解(名师推荐).docx
- 2025年连锁零售新业态线上线下融合模式运营效果评估报告.docx
- 高校教师资格证之《高等教育法规》练习题附答案详解.docx
- 辽宁省朝阳市北票市2024届九年级下学期中考三模数学试卷(含解析).docx
- 人才培养与队伍建设在集团化办学中的重要性.docx
文档评论(0)