一、案例要求
用单个数码管显示按键按下的次数,也即是一开始显示0,随着按键的按下,每按下一次按键,数码管显示的数字加1,要求最多可以统计15次,0-9用正常的阿拉伯数字显示,从10~15依次用A-F来显示。
二、案例分析
按键可以使用外部中断0的工作方式,即连接51单片机的P3.2引脚,按下一次按键便发生一次中断,次数加1,加1得到的数存在一个变量button_cnt中;数码管选择7段共阳极数码管,公共端接5V电源,数码管的字形码存放在一个数组Dis_Num[]中,Dis_Num[button_cnt]便是显示当前按下的次数。
三、案例仿真
四、案例代码
#include <reg51.h>
#include <intrins.h>
unsigned char button_cnt= 0; //初始化按键按下的次数
unsigned char Dis_Num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳极数码管0-F的字形码
//延时函数
void Delay(unsigned int k)
{
while(k--);
}
void main()
{
IT0=1;//外部中断0为下降沿触发方式
EA=1;//开总中断
EX0=1;//打开外部中断0
while(1)
{
P2 = Dis_Num[button_cnt]; //数码管8个引脚连接P2,Dis_Num[button_cnt]为显示的按键按下次数
}
}
//外部中断0中断服务函数
void int0() interrupt 0
{
button_cnt = button_cnt+1; //按键按下时,button_cnt 加1
button_cnt =button_cnt & 0x0f; //为了保证有效统计15次,次数大于15时清零
Delay(200000);//延时,用于按键消抖
}