写了一个 51单片机外部中断程序

发布者:码农侠最新更新时间:2018-07-12 来源: eefocus关键字:51单片机  外部中断 手机看文章 扫描二维码
随时随地手机看文章

/*以下是能在keilC 中变异的源码,直接粘贴过去就行,外部中断0(INT0)和外部中断1都有(INT1)*/

/*程序很简单,但是对新手来说还是很实用的*/

/*******************************************************************/
/*                                                                 */
/* 单片机开发系统演示程序 - INT0 INT1 中断计数                     */
/*                                                                 */
/* 6位数码管显示                                                   */
/*                                                                 */
/* 作者:曾露337  店铺:http://shop58430712.taobao.com             */
/*                                                                 */
/*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       */
/*                                                                 */
/*******************************************************************/
 
#include < reg51.h >
#include

#define uchar unsigned char
#define uint  unsigned int

unsigned char code  LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,
                                  0x82,0xF8,0x80,0x90,0xff};
                                    
unsigned char data  display[8] = {0x00,0x00,0x00,0xff,0xff,0x00,0x00,0x00};

unsigned char code  scan_bit[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

unsigned char count0,count1,temp=0 ;

/********************************************************
*                                                       *
* 延时函数                                              *
*                                                       *
********************************************************/
void delay(uint ms) 
// 延时子程序
{
 uchar k;
 while(ms--)
 {
  for(k = 0; k < 100; k++);
 }
}

/********************************************************
*                                                       *
*  数据处理与显示函数                                   *
*                                                       *
********************************************************/
void  disp_count()
{
    char n; 

    temp=count0;

    display[2]=temp/100;    //数据处理
    temp=temp%100;
    display[1]=temp/10;
    display[0]=temp%10;

 if(display[2]==0)        //高位为0,不显示 
 { 
   display[2]=0x0a;
   if(display[1]==0)
   display[1]=0x0a;  
    }

    temp=count1;

    display[7]=temp/100;    //数据处理
    temp=temp%100;
    display[6]=temp/10;
    display[5]=temp%10;

 if(display[7]==0)        //高位为0,不显示 
 { 
   display[7]=0x0a;
   if(display[6]==0)
   display[6]=0x0a;  
    } 
     
    for(n=0;n<8;n++)
    {  
      P0 =LEDData[display[n]] ;  //显示段码
      P2 =scan_bit[n];           //输出位码
      delay(1);
   P2 = 0xff;                 //关闭显示
    } 
}

/********************************************************
*                                                       *
* 主程序                                               *
*                                                       *
********************************************************/
void main(void)
{  
   P0=0xff;
   P1=0xff;
   P2=0xff;   
   
   IT0=0;          //低电平触发
//   IT0=1;        //下降沿触发
   IT1=0;          //低电平触发
//   IT1=1;        //下降沿触发
   PX0=1;
   EA=1;
   EX1=1;
   EX0=1;

   while(1)
   {
      disp_count();
   }
}

/********************************************************
*                                                       *
* INT0中断函数                                          *
*                                                       *
********************************************************/
void  counter0(void) interrupt 0
{
   uchar  x;
   EX0=0;
   count0++;
    
   for(x=0;x<10;x++)
   {
     disp_count();
   }
   EX0=1;
}

/********************************************************
*                                                       *
* INT1中断函数                                          *
*                                                       *
********************************************************/
void  counter1(void) interrupt 2 
{
   uchar  x;
   EX1=0;
   count1++;
    
   for(x=0;x<10;x++)
   {
     disp_count();
   }
   EX1=1;
}

/********************************************************/


关键字:51单片机  外部中断 引用地址:写了一个 51单片机外部中断程序

上一篇:51单片机学习笔记【四】——定时器和中断系统
下一篇:51单片机外部中断+串行口中断

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

51单片机——硬件基础
1、单片机内部资源 STC89C52:8KFLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源 (1)Flash(硬盘)——程序存储空间 —— 擦写10万次,断电数据不丢失,读写速度慢 (2)RAM(内存)——数据存储空间 —— 断电数据丢失,读写速度快,无限次使用 (3)SFR —— 特殊功能寄存器 2、单片机最小系统 最小系统:最少组件组成单片机可以工作的系统。 三要素: (1)、 电源电路:5V (2)、 晶振电路:11.0592MHZ、两个30PF (3)、 复位电路: P0:开漏输出,必须加上拉电阻 准双向口: 强推挽输出:电流驱动能力强 高阻态 上下拉电阻:上拉电路就是将不确定的
[单片机]
<font color='red'>51单片机</font>——硬件基础
STM32学习笔记(2) 使用外部中断控制按键
中断概述 中断:打断CPU正常程序运行,转去执行中断服务函数的内容,然后再回来执行原来的程序 NVIC:嵌套向量中断控制器,属于内核外设,管理怎与中断相关的功能 typedef struct { uint8_t NVIC_IRQChannel; //中断源 uint8_t NVIC_IRQChannelPreemptionPriority; //抢占优先级 uint8_t NVIC_IRQChannelSubPriority; //子优先级 FunctionalState NVIC_IRQChannelCmd; //使能或失能 } NVIC_InitTypeDef;
[单片机]
STM32学习笔记(2) 使用<font color='red'>外部中断</font>控制按键
51单片机知识大汇总
1.取指译码执行模型:首先我们来看看单片机是如何工作的,我们拿电脑的主板来作为对比,我们买电脑时,总是追求处理器的主频。处理器的工作原理是从存储器上取出一条指令,然后对指令译码,译码完后执行。然后取下一条指令,译码,执行。它为什么能这么有序的工作?是因为它有一个工作时钟,在这个工作时钟的统一管理下,处理器有序的工作,这里的主频就是工作时钟的速度,当然,现在你可能也知道主频越高,取指译码速度越快,性能越好。那么你可能会问,这跟51单片机有什么关系,OK,切入正题,单片机的工作也是这个原理,从存储器上取指,译码,执行。但是单片机的存储器在哪?在单片机的内部,对于电脑来说,是把处理器,内存集中在一块主板上。而现在你应该很明确,对于单
[单片机]
STM32单片机外部中断配置讲解
01 单片机外部中断简介 所谓外部中断,就是通过外部信号所引起的中断,如单片机引脚上的电平变化(高电平、低电平)、边沿变化(上升沿、下降沿)等。51单片机有5个中断源,其中有两个是外部中断,分别为INT0和INT1,INT0被分配在P3.2引脚,INT1被分配在P3.2引脚,也即是说如果使用51单片机的外部中断0,则必须将信号接在P3.2上,否则无效。 02 举例说明什么是中断 单片机在执行程序时有两种方式: 查询方式 中断方式 所谓查询方式就是单片机一遍一遍的扫描,查看所监视的目标有没有发生变化,是一种主动式的监视方法,用一个成语可以很客观的描述:守株待兔。 所谓中断方式就是单片机不主动去监视目标,而是目标主动通知单片机状态发
[单片机]
ADC0804 模数转换51单片机程序+电路图
51单片机驱动 adc0804模数转换 ,下面是电路图 #include reg51.h #include "lcd.h" #include intrins.h #define uint unsigned int #define uchar unsigned char uchar lcd ="0123456789"; sbit rd=P3^6; //IO口定义 sbit wr=P3^5; sbit cs=P3^7; read_adc0804()//控制并读取adc0804转换好的数据 { uchar a; //写入控制命令,启动转换 cs=1; wr=1; cs=0; wr=0; _nop_(); wr=1;
[单片机]
ADC0804 模数转换<font color='red'>51单片机</font>程序+电路图
C51单片机利用74hc138扩展流水灯的仿真电路图+程序
C51单片机利用74hc138扩展流水灯程序 包含源代码,仿真电路 可以随意扩展多个LED 电路原理图如下: 单片机源程序如下: #define uint unsigned int #define uchar unsigned char void delay1(uchar y) { uchar i; uint j; for(i=0;i y;i++) { for(j=0;j 5000;j++); } } void led(void) { P3=0x01; //01 P2=0x00; delay1(20); P2=0x01; delay1(20); P2=
[单片机]
C<font color='red'>51单片机</font>利用74hc138扩展流水灯的仿真电路图+程序
STM32L152 外部中断配置
1、中断配置 以外部中断0,管脚为PA0为例来进行配置 void SYS_EXTI0Init(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //初始化PA0管脚 /* Enable GPIOA clock */ RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//打开PA口时钟 /* Configure PA0 pin as input fl
[单片机]
基于51单片机的家电控制系统设计
O 引言 家电控制的智能化已成为社会需求的新趋势。基于微机控制系统的智能化家电使我们的生活更加便利。而是否能够实现远程家电的开关控制。又是否能够随时查询电器的工作状况,或者能够事先对家电的定时开关做出控制。又成为越来越感兴趣的研究方向。家电产品现已进入成熟期和稳定期。市场规模稳步上涨,但竞争日愈剧烈,其核心部件。即控制器性能及质量对企业产品的影响很大。同时,经济快速发展,人们对于家庭生活的舒适程度也提出了越来越高的要求,尤其体现在家电的便捷方面。在这个背景下,可以自主控制的家电控制系统,就逐渐显示出竞争力,这也符合时代发展的客观需要。随着中国经济的快速稳步增长和迅速发展,家电厂家越来越意识到被喻为家电“芯片”的家电控制器的重要
[单片机]
基于<font color='red'>51单片机</font>的家电控制系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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