//---------------------------------------------------- //名称: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=1,EX=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.6和P2.7同时为高电位(1100 0000)
} //结束if语句(中断10次) } //while循环结束 } //主程序结束 //======================================================================= //中断子程序 //======================================================================= void EX_INT0()interrupt 0 //INT0中断子程序开始 { count++;//符号:++,优先级:3,说明:执行运算后再将count变量的值加1 } //INT0中断子程序 |
|