分享

INT0中断

 图购网 2012-11-18

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

//名称:INT0中断

//网站:http://tugou./  

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

//=====================================================

//声明区

//========================================================

#include <reg51.h>                            //定义8051寄存器的头文件

 

//宏定义

#define uchar unsigned char         //定义无符号字符型,8位数,范围:0——255

#define uint unsigned int              //定义无符号整型,16位数,范围:0——65535

 

//声明七段LED数码管驱动信号数组(共阳)

uchar code DIS_CODE[10]={      0XC0,0XF9,0XA4,0XB0,0X99,      //数字0——4

                                                 0X92,0X82,0XF8,0X80,0X90};      //数字5——9

 

uint count=0;                                            //计算INT0中断次数

 

//==============================================================

//  : 延时函数,延时timer毫秒

//  数:timer要延时的毫秒数

//返回值:无

//==============================================================

 

 void delay_ms(uint timer)          //延迟函数开始

 {

      uchar j=0;        //如果能用char类型的变量就不要用int类型,

                                    //我们要尽量提高程序执行的效率,减小程序所占空间

       while(timer--) //先判断timer的值是否为真(是否非),再对timer的值减1

       {                          //while语句中将判断条件放在语句之前,称为前条件循环

              for(j=124;j>0;j--)     //说明:循环执行124

              {                                 //for语句是一个很实用的计数循环 

                     ;                           //空语句

              }                                 //for循环语句结束

       }                                        //while循环语句结束

}                                            //延时函数结束

 

//=========================================================================

// 主程序

//=========================================================================

void main()               //主程序开始

{

       P0=0xff;     //设置输入口

                                   //打开reg51.h可以找到该寄存器

       IE=0X81;              //IE中断使能寄存器(interrupt enable register

                                   //相当于EA=1EX=1

       IT0=1;                  //外部中断0触发方式选择位

      

       while(1)         //无穷循环

       {       

              if(count==10) //判断count是等于10

              {                  

                            count=0;      //当前面的if语句括号的值等于10时,就执行count=0

                            }

                            else

                            {    

                                   P0=DIS_CODE[count];   //输出显示信号

                            //     P2=0X40;          //第一个LED数码管亮 (0100 0000)

                            //     delay_ms(6);   //延时

                            //     P2=0X80;          //第二个LED数码管亮  (1000 0000)

                                   delay_ms(6);   //延时

                                   P2=0xc0;    //使P2.6P2.7同时为高电位(1100 0000)

                           

              }                             //结束if语句(中断10)

 

       }                                   //while循环结束

}                                        //主程序结束

 

//=======================================================================

//中断子程序

//=======================================================================

void EX_INT0()interrupt 0    //INT0中断子程序开始

{

       count++;//符号:++,优先级:3,说明:执行运算后再将count变量的值加1

}                //INT0中断子程序 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多