51单片机:利用两个按键通过中断分别实现数码管上数字自加自减功能(00——99)
功能描述:
开关key1控制实现每按一次,数码管数字加1,实现00-99的循环
开关key2按键按一下实现数码管减1,实现00-99的循环
数码管初始数值为00
当数码管数值为00时,按下key2(减1)数码管显示99
仿真电路图:
代码如下:
/*---------------------------------------------------------------------*功能:开关key1控制实现每按一次,数码管数字加1,实现00-99的循环*开关key2按键按一下实现数码管减一*数码管初始数值为00*00时按下key2数码管显示99*----------------------------------------------------------------------*/#include<reg52.h>sbit SEG1 = P1^0; //定义显示十位的数码管sbit SEG2 = P2^0; //定义显示个位的数码管sbit key1 = P3^2; //定义实现数字加1的开关key1sbit key2 = P3^3; //定义实现数字减1的开关key2void display(uint i,uint j); //数码管显示函数 typedef unsigned int uint;uint i,j;uint sum = 0;unsigned char code DSY_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共阳极数码管 //--------------------------------//主函数//-------------------------------void main(){IE = 0X85;IT0 = 1;IT1 = 1;while(1){display(i,j);}}//-----------------------------------------------//外部中断0,实现按键按一下数码管数字加一//-----------------------------------------------void EX0_INT(void) interrupt 0{sum++; }//---------------------------------------------// 外部中断1,按键按一下实现数码管减一//---------------------------------------------void EX1_INT(void) interrupt 2{if(sum != 0){sum--;}else{sum = 99;}}//--------------------------------------------// 数码管显示数字//--------------------------------------------void display(uint i,uint j){i = sum/10;//数码管显示十位数字j = sum%10; //数码管显示个位数字if(sum == 100)//实现00——99循环sum = 0; P1 = DSY_CODE[i];P2 = DSY_CODE[j];}