您的位置:首页 > 编程语言 > C语言/C++

89C52单片机之数码管中断

2017-06-15 11:29 295 查看
数码管倒计时显示,当显示000时,蜂鸣器响3次。

按键1按下时暂停

按键3按下时加10

按键4按下时减10

#include <reg52.h>
#include <intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

void Delay_ms(int);
void DigitronShow();
void Int_Init();
void KEY3_add();
void KEY4_min();

sbit LED1 = P0^7;
sbit KEY1 = P3^3;         //按键1
sbit KEY2 = P3^4;         //按键2
sbit KEY3 = P3^6;         //按键3
sbit KEY4 = P3^7;         //按键4
uchar table[] = {0xbF, 0x86, 0xdb, 0xcf, 0xe6, 0xed, 0xfd, 0x87, 0xff, 0xef};
// 0     1     2      3    4      5    6      7     8     9
uint count = 999;  //计数
int flag = 1;

/*************主函数*******************/
void main()
{
Int_Init();
while(1)
{
DigitronShow();
if(flag)
count--;
KEY3_add();
KEY4_min();
}
}

/***********延迟函数***********/
void Delay_ms(int time)
{
int i;
while(time--)
for(i=0; i < 120; i++);

}

/*********数码管显示函数************/
void DigitronShow()
{
int i,k;
for(i=0; i<5; i++)
{
P0 = table[count%10];   //个位
P1 = 0x01;
Delay_ms(5);
P0 = table[(count/10)%10]; //十位
P1 = 0x02;
Delay_ms(5);
P0 = table[count/100]; //百位
P1 = 0x04;
Delay_ms(5);
}

if(count==0)
{
P1=0x07;
P0=0xbf;
for(k=0;k<6;k++)
{
P0 = P0^0x80;;
Delay_ms(500);
}
count=999;
}
}

/*********中断初始化********/
void Int_Init()
{
IT1 = 1;
EX1 = 1;
EA = 1;
}

/**************中断函数*******************/
void KEY1_interrupt() interrupt 2 using 0
{
flag = !flag;
}

/**********按键3加函数********/
void KEY3_add()
{
if(KEY3 == 0)
{
Delay_ms(30);   //20~30ms
if(KEY3 == 0)
{
if(count<990)
count = count + 10;
}
while(!KEY3);
}
}

/**************按键4减函数*********************/
void KEY4_min()
{
if(KEY4 == 0)
{
Delay_ms(30);   //20~30ms
if(KEY4 == 0)
{
if(count>10)
count = count - 10;
}
while(!KEY4);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单片机 c语言