基于采用ATMEGA16单片机的定时计数器,实现LED亮度自动调节

发布者:跳跃龙珠最新更新时间:2020-02-03 来源: elecfans关键字:ATMEGA16  单片机  定时计数器  LED亮度  自动调节 手机看文章 扫描二维码
随时随地手机看文章

ATMEGA16的定时/计数器


T/C1定时器A/B比较匹配中断和溢出中断实现LED亮度自动调节。


这里没有什么要注意的,只要理解并会控制T/C1的两个比较匹配中断A/B和溢出中断。


然后就是仿真图片~

基于采用ATMEGA16单片机的定时计数器,实现LED亮度自动调节

基于采用ATMEGA16单片机的定时计数器,实现LED亮度自动调节

基于采用ATMEGA16单片机的定时计数器,实现LED亮度自动调节

//------------------------------------------------------------------------------

//通过比较匹配中断和定时器溢出中断(T1)来控制LED亮度的自动变化

//定时器T1的定时长度设置为32.768ms,定时器T1的比较匹配寄存器设置为10位快速PWM模式

//在定时器T1发生溢出中断之前,首先比较中断触发,点亮LED灯;定时器T1继续运行直到溢出,

//将LED关闭。主程序不断改变着比较匹配值(从接近最小值0到接近最大值1023),因此输出的脉宽

//(既LED的亮度)会自动变化。

//由于定时器T1具有2个比较匹配寄存器(OCR1A、OCR1B),既可实现2个LED灯的自动变化

#include“ioavr.h”

#include“intrinsics.h”

#include“Delay.h”

typedef unsigned char uchar;

typedef unsigned intuint;

#define CPL_BIT(x,y)(x^=(1《#define CLR_BIT(x,y)(x&=~(1《#define SET_BIT(x,y)(x|=(1《#define GET_BIT(x,y)(x&(1《ucharflag_a=1,flag_b=0;

//------------------------------------------------------------------------------

//端口定时函数

voidport_init()

{

DDRB=0XFF;

PORTB=0XFF;

}

//------------------------------------------------------------------------------

//T1的初始化函数

voidtimer1_init()

{

OCR1B=0X00;//stop

TCNT1H=0X00;//定时器初值为0

TCNT1L=0X00;

OCR1AH=0X03;//由于工作在10位快速PWM模式计数上线值TOP为0X3FF(这个我不知道到底需不需要设置,是不是体统自己就设置好了~~~)还有就是它如果溢出呢?大于0X03FF?会怎么样?

OCR1AL=0XFF;

OCR1BH=0X03;

OCR1BL=0XFF;

TCCR1A=0X03;//设置A/B端口为普通端口操作,10位快速PWM模式,T/C1的时钟源为来自预分频器的256分频

TCCR1B=0X0C;

}

//------------------------------------------------------------------------------

//芯片初始化函数

voiddevice_init()

{

__disable_interrupt();//disable all interrupts

port_init();

timer1_init();

TIMSK=0X1C;//T/C1输出比较A/B匹配中断使能以及溢出中断使能

__enable_interrupt();

}

//------------------------------------------------------------------------------

//main

voidmain()

{

device_init();

while(1)

{

delay_s(1);//延时,有益处~~~!最大延时我还不知道~~~

//--------------------------------------------------------------------------

//flag_a=1的时候OCR1A+=20,如果OCR1A》1000,清零flag_a

if(GET_BIT(flag_a,0)==1)

OCR1A+=20;

if(OCR1A》1000)

CLR_BIT(flag_a,0);

//--------------------------------------------------------------------------

//flag_a=0的情况

if(GET_BIT(flag_a,0)==0)

OCR1A-=20;

if(OCR1A《20)

SET_BIT(flag_a,0);

//--------------------------------------------------------------------------

//flag_b=1的情况

if(GET_BIT(flag_b,0)==1)

OCR1B+=10;

if(OCR1A》1000)

CLR_BIT(flag_b,0);

//--------------------------------------------------------------------------

//flag_b=1的情况

if(GET_BIT(flag_b,0)==0)

OCR1B-=10;

if(OCR1B《10)

SET_BIT(flag_b,0);

}

}

//------------------------------------------------------------------------------

//TIMER1_COMPA

#pragma vector=TIMER1_COMPA_vect

__interrupt voidTImer1_compa()

{

CLR_BIT(PORTB,0);

}

//------------------------------------------------------------------------------

//TIMER1_COMPB

#pragma vector=TIMER1_COMPB_vect

__interrupt voidtimer1_compb()

{

CLR_BIT(PORTB,7);

}

//------------------------------------------------------------------------------

//TIMER1_OVF

#pragma vector=TIMER1_OVF_vect

__interrupt voidtimer1_ovf()

{

SET_BIT(PORTB,0);

SET_BIT(PORTB,7);

}

关键字:ATMEGA16  单片机  定时计数器  LED亮度  自动调节 引用地址:基于采用ATMEGA16单片机的定时计数器,实现LED亮度自动调节

上一篇:以AVR为控制电路核心的全自动太阳能工程热水器控制器设计
下一篇:浅谈ATmega 16单片机的T/C0控制寄存器和T/C1控制寄存器

推荐阅读最新更新时间:2024-10-30 03:54

单片机STM32的引脚模式设置运用理解
单片机STM32的引脚有多种方式可以选择。 如果你是用直接写寄存器来配置的话,那么,看上手册,给“配置寄存器”对应的位写0或者1就可以达到目的。如下图: 如果是用库函数来配置的话,就需要知道下面这个结构体中的变量代表的意义。 库函数,选择好GPIO_Mode之后,就要使用GPIO_Init()函数来配置,你可以打开这个配置函数,实际上也是在对“配置寄存器”进行写操作。 先解释一下这个结构体中的各个变量的意思: GPIO_Mode_AIN:模拟输入模式 GPIO_Mode_IN_FLOATING:浮空输入模式 GPIO_Mode_IPD:下拉输入模式 GPIO_Mode_IPU:上拉输入模式 GPIO_Mode_Out
[单片机]
<font color='red'>单片机</font>STM32的引脚模式设置运用理解
PIC单片机4位16进制数除于4位16进制数子程序
;************************************************************** ; 除法子程序 ;/************************************************************* CF1 MOVLW 0FFH;被除数 MOVWF 70H ;被除数高8位寄存器 MOVLW 0FFH;被除数 MOVWF 71H;被除数低8位寄存器 MOVLW 00H MOVWF 72H ;余数高8位寄存器 MOVLW 00H MOVWF 73H ;余数低8位寄存器 MOVLW 00H MOVWF 74H;商高8位寄存器 MO
[单片机]
基于51单片机的脉搏体温监测仪
一.硬件方案 系统以STC89C52单片机为核心,以光电传感器利用单片机系统内部定时器来计算时间,由光电传感器感应产生信号,单片机通过对信号累加得到脉搏跳动次数,时间由定时器定时而得。系统运行中可以通过观察指示灯闪烁,若均匀闪烁说明测量值准确。系统停止运行时,能够显示总的脉搏次数,此外我们也加了温度传感器DS18B20来检测人体温。 主要由51单片机+1602液晶显示+红外对管采集+按键+蜂鸣组成;如图: 二.设计功能 (1)本设计基于STC89C51/52(与AT89S51/52、AT89C51/52通用)单片机。 (2)LCD1602液晶显示当前的心率和当前体温,心率单位是心率/分钟,温度单位为摄氏度。 (3)手指放到
[单片机]
基于51<font color='red'>单片机</font>的脉搏体温监测仪
节能微控制器设计可延长电池寿命
在设计电池供电产品时,人们显然希望电池寿命尽可能长些。能源敏感的产品应用大致分为能源计量系统、家庭与楼宇自动化、安全和医疗系统(图1)。这些产品通常会围绕一个微控制器(MCU),必须用单个原电池工作很长时间。在某些应用中,更换电池很困难甚至是不可能的,即使在其它普通应用中,用户也不大愿意支付更换电池的成本。   这类应用中采用的是在极低占空比下工作的微处理器,它在“深度睡眠”状态下的时间可能占了99%甚至更高(达到99.9%也不罕见)。微处理器在一个周期循环或在回应某些刺激时被“唤醒”来执行操作,并返回到睡眠状态中。由于它们花了如此多时间在睡眠状态,很明显,获得更长电池寿命的关键是在掉电状态下的 电流 消耗。不过,同一节电池的
[电源管理]
节能<font color='red'>微控制器</font>设计可延长电池寿命
PIC单片机在远程控制中的应用
    摘 要: 介绍了一种用PIC系列单片机控制的简易远程教学系统,着重介绍了远程控制器的组成和工作原理,并给出了软件设计流程。     关键词: PIC16C54 单片机 远程控制       本文介绍了一种用单片机控制的采用电话遥控的简易远程教学系统。它借助于现有的丰富的电话网络资源,具有结构简单,造价低廉,易于操作等特点,可以实现对录像机的各种远距离控制操作。非常适合于贫困地区的电化教育的普及与发展。      1 系统的总体结构     该电话遥控教学系统的总体结构如图1所示。     该系统由电话机、小型程控机、远程控制器和数台录像机、电视机组成,该系统既
[应用]
电子车速里程表的单片机实现方素
   摘要: 介绍了一个基于单片机的电子式转速里程表实现方案,讨论了里程计数的原理和转速指示原理,给出了用单片机AT89C2051和LM1819驱动器设计的汽车转速里程表的具体电路原理图。 1 概述   传统的汽车转速里程表的功能有两个,一是用指针指示汽车行驶的瞬时车速,二是用机械计数器记录汽车行驶的累计里程。现代汽车正向高速化方向发展,随着车速的提高,用软轴驱动的传统车速里程表受到前所未有的挑战,这是因为软轴在高速旋转时,由于受钢丝交变应力极限的限制而容易断裂,同时,软轴布置过长会出现形变过大或运动迟滞等现象,而且,对于不同的车型,转速里程表的安装位置也会受到软轴长度及弯曲度的限制。凡此种种,使得基于非接触式转速传感器的电子
[汽车电子]
电子车速里程表的<font color='red'>单片机</font>实现方素
基于单片机的智能家居安防系统设计方案
摘要: 介绍了一种以AT89S52单片机为控制核心, 通过DTMF公用电话网和CAN 总线传递的多节点家居安防系统设计方案。本智能家居安防系统集防火、防盗、防燃气为一体, 可实现自动检测与自动语音拨号报警。详细介绍了DTMF收发电路、通话电路和CAN 总线传输等电路。实验结果表明, 本系统功能实用, 信息传递实时可靠,适用于家居安防或其他场所的安防系统。   1 引言   现在的安防系统可借助计算机技术、IC 卡技术、通信技术等来实现,CAN总线应用于安防系统对家居智能化发展起到了良好的促进作用。而把DTMF 技术应用于安防系统, 不需要专门的布线, 不占用无线电频率资源, 没有电磁污染。文中设计了一种基于CAN 总线和D
[工业控制]
基于<font color='red'>单片机</font>的智能家居安防系统设计方案
一文读懂汽车控制芯片(MCU
本文从工作要求,性能要求,产业格局,行业壁垒四个维度,分别介绍车身、底盘、动力、座舱四个域的MCU芯片。并整理了国产MCU芯片的应用现状,供从业者参考。 1. 控制类芯片介绍 控制类芯片主要就是指MCU(Microcontroller Unit),即微控制器,又叫单片机,是把CPU的主频与规格做适当缩减,并将存储器、定时器、A/D转换、时钟、I/O端口及串行通讯等多种功能模块和接口集成在单个芯片上,实现终端控制的功能,具有性能高、功耗低、可编程、灵活度高等优点。 车规级MCU示意图 ※资料来源:公开资料、编写单位提供 汽车是MCU的一个非常重要的应用领域,据IC Insights数据,2019年全球MCU应用于汽车电子
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved