ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:83.76KB ,
资源ID:7224192      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7224192.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于ATtiny13的手电筒头灯控制电路和程序资料Word文件下载.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于ATtiny13的手电筒头灯控制电路和程序资料Word文件下载.docx

1、*/#include /#include #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,0x6

2、0,0x80,0xA0,0xC0,0xE0,0xFF;uchar pwm=0x20,0x40,0x80,0xC0,0xFF; /亮度值uchar pwmVal = 0; /亮度档位uchar status = 0; /0为LED OFF,1为LED ONuchar 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

3、时候延时1MS #asm(nop)* 名称 : init_devices()* 功能 : 端口、定时器、PWM初始化无* 输出 :void init_devices(void) / Crystal Oscillator division factor: 8 #pragma optsize- CLKPR=0x80; CLKPR=0x03; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif / I/O口的初始化 DDRB = 0x01; / PB.0输出(P5),PB.1输入(P6),PB.2输出(P7), PB.3输入(P2) PORTB = 0x00

4、; / PB.2输出 / PWM 初始化 / TCCR0A BIT 7 6 5 4 3 2 1 0 / COM0A1 COM0A0 COM0B1 COM0B0 - - WGM01 WGM00 /TCCR0A=0x83; / 开启PWM, 比较匹配发生时OC0A 清零 /TCCR0A = 0x03; / 关闭PWM TCCR0A |= (1COM0A1)|(0COM0A0)|(1WGM01)|(1WGM00); TCCR0B |= (0WGM02)|(0CS02)|(1CS01)|(0CS00); /8分频(4.6875KHz) /TCCR0B=0x01; / 无预分频 OCR0A = 0x00

5、; TCNT0 = 0x00; / T/C0计数寄存器初值 TCCR0A = 0x03; / 外部中断初始化设置 /MCUCR = 0x02; / INT0 为下降沿时产生中断请求 /MCUCR |= (1ISC01)|(0ISC00); / INT0 为下降沿时产生中断请求 /GIMSK = 0x40; / 允许 INT0 产生中断 GIMSK |= (1INT0); / 允许 INT0 产生中断 /TIMSK0=(0OCIE0B)|(0OCIE0A)|(0TOIE0); /#asm(sei / 睡眠模式初始化 MCUCR|=(1SM1)|(0SM0); / 掉电模式SE); / 睡眠使能

6、/GIMSK |=(1 /#asm (sleep) / 睡眠 /* * 描述:开启看门狗* 参数:*/void WDT_on(void) / 看门狗设置cli) / 关闭全局中断 #asm(WDR) / 看门狗复位指令WDR用来复位看门狗定时器 WDTCR=0x18; / 启动时序 WDTCR |= (1WDCE) | (1WDE); /WDTCR=0x28; / 看门狗定时4s WDTCR = (1WDP3) | (1 WDTCR = (1 / 看门狗定时4s /WDTCR = 0x00; / 关闭WDT) / 开启全局中断关闭看门狗void WDT_off(void) MCUSR &= (

7、1WDRF); / 清除MCUSR 寄存器中WDRF /* 在WDCE 与WDE 中写逻辑1,保持旧预分频器设置防止无意暂停 */ WDTCR |= (1 WDTCR = 0x00;进入睡眠*/ void sleep(void) WDT_off(); / 关闭WDT(关闭看门狗) /MCUCR|=(1 / 睡眠使能 #asm () / 睡眠) / 关闭全局中断 WDT_on(); / 启动看门狗 eeprom写一个字节数据address-地址 data-数据void eeprom_write(uchar address,uchar data) /等待上一次写操作结束 while(EECR&(1

8、EEPE); /设置编程模式 EECR=(0EEPM0); /设置地址和数据寄存器 EEAR = address; EEDR = data; /置位EEMPE EECR |= (10; i-) delayMs(5); /关闭PWM LEDDRV = 0; sleep(); / 关灯进入睡眠 LED Flicker 闪烁void led_flicker(void) delayMs(200); OCR0A = pwmpwmVal; 外部中断服务程序interrupt EXT_INT0 void int0_isr(void) /函数体 Main()void main(void) init_devic

9、es(); /调用初始化函数 / 读取eeprom中的亮度档位数据 delayMs(10); /延时10ms pwmVal = eeprom_read(ADDRESS); /读取eeprom里的数据 if (pwmVal = MAX_STATE) /eeprom无数据的话设为最高档位 pwmVal = MAX_STATE - 1; / 进入睡眠 while(1) /喂狗 if (PINB&0x02) /判断是否按下键,KEY接到VCC /防抖延时 for (keytime=0; (PINB&0x02) & keytime LONG_KEY & status = 1) /长按逻辑处理 if (m

10、ode = 0) /进入设置模式 if (TCCR0A = 0x03) /PWM Off 的话 PWM 设为 ON mode = 1; /LEDDRV2 = 1; led_flicker(); else /退出设置模式 mode = 0; /LEDDRV2 = 0; eeprom_write(ADDRESS, pwmVal); /写eeprom里的数据 /退出设置模式后全亮的话 PWM Off,LED灯亮 else if (keytime 0 & keytime LONG_KEY) /短按逻辑处理 if (mode = 0 & status = 0) / LED NO status = 1; led_on(); /开灯 else if (mode = 0 & status = 1) / LED OFF status = 0; led_off(); /关灯 else if (mode = 1 & status = 1) /设置模式下的短按 pwmVal+;= MAX_STATE) /循环 pwmVal = 0; / LEDDRV2 = LEDDRV2; / delayMs(50); / end while

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2