AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—02

发布者:疯狂小马最新更新时间:2017-11-21 来源: eefocus关键字:AVR单片机  ATMEGA16  中断系统 手机看文章 扫描二维码
随时随地手机看文章

二、ATMEGA16的中断系统

二—(02)、4*4行列式按键的睡眠模式中断唤醒

废话不多说了,上一篇有这一片所用的寄存器,所以你要想看这篇,还是建议看看上一篇AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—02,当然要是会~~~

直接上图~~~

AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—02

AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—02

好了,下面的就是程序了(这里要注意一下,Proteus中的二极管的作用,一定要弄明白~~呵呵,虽然我不明白~~笨死了~~但是有一点我是知道的,防止回流,但是为什么这么接~~我蛋疼了~~不会啊)

//------------------------------------------------------------------------------
//4*4行列式按键的睡眠模式中断唤醒实验
//其中睡眠模式再"intrinsics.h"文件里,需要调用
//该设计如用于电池供电的遥控器等应用中,则对延长电池寿命非常的有帮助,是一种省电的高效设计
#include"ioavr.h"
#include"intrinsics.h"
typedef unsigned char uchar;
typedef unsigned int  uint;
//------------------------------------------------------------------------------
__flash uchar skey[16]={10,11,12,13,3,6,9,14,2,5,8,0,1,4,7,15};     //这里是根据键盘的设定来设定的,我这里设定的是手机键盘,方便使用
__flash uchar act[4]={0xfe,0xfd,0xfb,0xf7};
uchar   const seg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                        0x7c,0x39,0x5e,0x79,0x71};                  //共阴极数码管
uchar c;      //定义全局变量,主要是因为在中断里绝对不可以出现返回数据的命令!!!
//------------------------------------------------------------------------------
//延时函数
void  delay_ms(uint k)
{
  uint  i,j;
  for(i=0;i    for(j=0;j<1140;j++);
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//键盘检测函数
void key_scan()
{
  uchar i,j,in,ini,inj;
  uchar flag=0;
  for(i=0;i<4;i++)
  {
    PORTB=act[i];
    delay_ms(5);                   //延时消抖
    in=PINB;
    in=in>>4;
    in=in|0xf0;
    for(j=0;j<4;j++)
    {
      if(act[j]==in)
      {
        flag=1;
        inj=j;
        ini=i;
      }
    }

  }
  if(flag==0)
    c=16;
  c=(ini*4+inj);
}
//------------------------------------------------------------------------------
//main
void main()
{
  uchar key_value;
  DDRA=0XFF;              //数码管设置
  DDRC=0XFF;
  PORTA=0X00;
  PORTC=0XFF;
 
  DDRD=0XFB;              //设置PD2为输入,也就是要用到其第二管脚功能,当检测到为低电平时唤醒睡眠模式
  PORTD=0XFF;
 
  MCUCR=0X60;             //选择休眠模式:掉电模式;选择INT0触发方式:低电平触发
  GICR=0X40;
  SREG=0X80;
  while(1)
  {
    DDRB=0X0F;              //按键设置,高四位为输入,第四位为输出,你懂得~~~同时要注意,一定要保证第四位输出低电平,要不然不能检测所有键盘
    PORTB=0XF0;
 
    delay_ms(10);
    __sleep();            //调用__sleep()函数
    if(c!=16)
      key_value=skey[c];
    PORTA=seg[key_value];
    PORTC=0xfe;
    delay_ms(2000);
    PORTA=0x00;
    PORTC=0xff;
  }
}
//------------------------------------------------------------------------------
//INT0
#pragma vector=INT0_vect
__interrupt void  int0()
{
  key_scan();
}


关键字:AVR单片机  ATMEGA16  中断系统 引用地址:AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—02

上一篇:AVR单片机—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01
下一篇:AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—01

推荐阅读最新更新时间:2024-03-16 15:46

C51单片机学习笔记(四)——单片机的中断系统及应用
1.单片机的中断系统 中断的概念: CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断产生); CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务); 待CPU将事件B处理完毕后,再回到原来事件A中断的地方继续处理事件A(中断返回),这一过程称为中断。 引起CPU中断的根源叫做中断源。中断源向CPU的请求,叫做中断请求。 CUP暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再 回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的 部件称为中断系统(中断机构)。 51单片机的中断源:引起中断的事件称为中断源,51单片机一共有5个中断源,如下图: 中断优先级:当单片机正在
[单片机]
C51单片机学习笔记(四)——单片机的<font color='red'>中断系统</font>及应用
AVR单片机控制的开关电源
单片机 控制开关电源,单从对电源输出的控制来说,可以有几种控制方式。 其一是 单片机 输出一个电压(经DA芯片或PWM方式),用作电源的基准电压。这种方式仅仅是用单片机代替了原来的基准电压,可以用按键输入电源的输出电压值,单片机并没有加入电源的反馈环,电源电路并没有什么改动。这种方式最简单。 其二是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,调整DA的输出,控制PWM芯片,间接控制电源的工作。这种方式单片机已加入到电源的反馈环中,代替原来的比较放大环节,单片机的程序要采用比较复杂的PID算法。 其三是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,输
[单片机]
avr单片机eeprom初始化配置及说明
ATmega16 包含 512 字节的 EEPROM 数据存储器。它是作为一个独立的数据空间而存在的,可以按字节读写。 EEPROM 的寿命至少为 100,000 次擦除周期。 EEPROM 的访问 由地址寄存器、数据寄存器和控制寄存器决定。 /* EEPROM 数据存储器 EEPROM 地址寄存器(EEARH 和 EEARL) bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 Res: 保留 保留位,读操作返回值为零。 EEAR8..0
[单片机]
基于AVR单片机捕获中断实现红外线解码的方法介绍
  AVR单片机是Atmel公司推出的一个单片机系列。由于该系列单片机的集成度高,因此,其软/硬件设计都变得更加简洁。文中介绍通过AVR单片机的捕获中断来实现 红外线通讯 解码的一种方法。   1 红外线编码   家电遥控中常用的红外线编码电路有μPD6121G型HT622型和7461型等。本文就以这些电路的编码格式来讨论怎样使用AVR单片机的捕获中断功能来实现其解码。   红外线通讯的发送部分主要是把待发送的数据转换成一定格式的脉冲,然后驱动红外发光管向外发送数据。接收部分则是完成红外线的接收、放大、解调,还原成同步发射格式相同(但高、低电位刚好相反的脉冲信号。这些工作通常由一体化的接收头来完成,主要输出TTL兼容电平
[单片机]
基于<font color='red'>AVR单片机</font>捕获中断实现红外线解码的方法介绍
avr单片机可演奏的电子琴仿真加源码
单片机电子琴仿真原理图如下 avr单片机源程序如下: //----------------------------------------------------------------- // 名称: 电子琴仿真 //----------------------------------------------------------------- // 说明: 本例在键盘矩阵上模拟演奏电子琴,数码管显示键号. // 按下不同按键时将输出不同频率音符,按键长按时发出长音, // 短按时发出短音. // //-------------------------------------------------------
[单片机]
<font color='red'>avr单片机</font>可演奏的电子琴仿真加源码
AVR单片机延时程序
AVR单片机延时程序: 1.毫秒级的延时 延时1ms; void delay_1ms(void) { unsigned int i; for(i=1;i (unsigned int)(xtal*143-2);i++) ; } 在上式中,xtal为晶振频率,单位为MHz. AVR 延时程序 当晶振频率为8M时,延时函数软件仿真的结果为1000.25μs.当晶振频率为4M时,延时函数软件仿真结果为999.5μs. AVR 延时程序 如果需要准确的1ms延时时间,则本计算公式只供参考,应通过软件仿真后,再确定循环的次数及循环初值,并且循环中还必须关闭全局中断,防止中断影响延时函数的延时时间。 下面的函数可以获得1
[单片机]
AVR单片机对开关电源的控制方法
单片机控制开关电源,单从对电源输出的控制来说,可以有几种控制方式。 其一是 单片机 输出一个电压(经DA芯片或PWM方式),用作电源的基准电压。这种方式仅仅是用单片机代替了原来的基准电压,可以用按键输入电源的输出电压值,单片机并没有加入电源的反馈环,电源电路并没有什么改动。这种方式最简单。 其二是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,调整DA的输出,控制PWM芯片,间接控制电源的工作。这种方式单片机已加入到电源的反馈环中,代替原来的比较放大环节,单片机的程序要采用比较复杂的PID算法。 其三是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,输出PWM波,直接
[单片机]
<font color='red'>AVR单片机</font>对开关电源的控制方法
基于AVR的锂电池智能充电器的设计与实现
   1 引言   锂电池闲其比能量高、自放电小等优点,成为便携式电子设备的理想电源。近年来,随着笔记本电脑、PDA,无绳电话等大功耗大容量便携式电子产品的普及,其对电源系统的要求也日益提高。为此,研发性能稳定、安全可靠、高效经济的锂电池充电器显得尤为重要。   本文在综合考虑电池安全充电的成本、设计散率及重要性的基础上,设计了一种基于ATtiny261单片机PWM控制的单片开关电源式锂电池充电器,有效地克服了一般充电器过充电、充电不足、效率低的缺点,实现了对锂电池组的智能充电,达到了预期效果。该方案设计灵活,可满足多种型号的锂电池充电需求,且ATtiny261集成化的闪存使其便于软件调试与升级。    2 锂电池充电特性
[电源管理]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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