int01.c
来自「可以熟悉51单片机中断机制 大大方便学习51单片机」· C语言 代码 · 共 149 行
C
149 行
/*******************************************************************************
* INT1+0中断计数 6位数码管显示,6位数码管显示, *
*低三位数码管为显示外部中断INT0的计数值 *
*高三位数码管为显示外部中断INT1的计数值 硬件: 数码管P0,数码管控制P2 *
*P3.3接按键,高3位的计数触发, P3.2低三位的计数触发 *
********************************************************************************
* 日期: 2008-2-25 硬件: 数码管P0,数码管控制P2 *
* P1.4 按键,P1.5按键,为触发方式选择,P3.3接按键,为计数键 *
* 作者: 深圳志博电子有限公司 专业8051单片机教学站 *
* 邮箱: zty0012001@163.com *
* 网站: http://www.elecmcu.com http://www.elecmcu.com 更多例程请登陆网站 *
********************************************************************************
* 硬件:此程序在本公司志博电子实验仪运行通过 *
********************************************************************************
* 【版权】 Copyright(C)深圳志博电子有限公司 www.elecmcu.com All Rights Reserved *
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
********************************************************************************/
#include < reg51.h >
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar const seg[11]={0x7f,0x44,0xbd,0xf5,0xe6,0xf3,0xfb,0x65,0xff,0xf7,0x00};
uchar dis[8]={0,0,0,0}; //设置显示缓冲存储器
unsigned char count=0 ;
unsigned char count0,count1,temp=0 ;
sbit int_l=P1^4;
sbit int_e=P1^5;
/********************************************************
* 延时函数 *
********************************************************/
void delay(uint ms)
// 延时子程序
{
uchar k;
while(ms--)
{
for(k = 0; k < 100; k++);
}
}
/********************************************************
* 数据处理与显示函数 *
********************************************************/
void disp_count()
{
char i=0;
char k=0;
dis[0]=count1/100;
dis[1]=(count1%100)/10;
dis[2]=count1%10;
dis[3]=count0/100;
dis[4]=(count0%100)/10;
dis[5]=count0%10;
for (i = 0; i < 6; i++)
{ //循环显示6位数据
switch (i)
{
case 0:
P0=0Xdf;
P1=P1|0X03;
break;
case 1:
P0=0XBF;
P1=P1|0X03;
break;
case 2:
P0=0X7F;
P1=P1|0X03;
break;
case 3:
P0=0XFF;
P1=0xfe;
break;
case 4:
P0=0XFF;
P1=0XFd;
break;
case 5:
P0=0Xef;
P1=0xff;
break;
}
P2=seg[dis[i]];
delay(1);
}
}
/********************************************************
* 主程序 *
********************************************************/
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)
{
if(!int_l)//触发方式选择为电平触发
{
IT0=0;
IT1=0;
}
if(!int_e)//触发方式选择为电平触发
{
IT0=1;
IT1=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;
}
/********************************************************/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?