按下K1时加1计数并增加显示位,按下K2时减1计数并减少显示位,按下K3时清零
本例用直接与P1端口状态进行比较的方法识别独立按键,因为P1端口没有连接其他元件,其状态相对固定,因此使用这种方法也能很有效地识别独立按键。在显示数码时,程序中使用了8 位的显示暂存 shu_ju_zan_cu,待显示的数码被预先存在shu_ju_zan_cu数组中。
通过网盘分享的文件:按键数码管移位显示
链接: https://pan.baidu.com/s/1ONNVKTkBW5YzzM-ixcxpww 提取码: vfpj
//按下K1时加1计数并增加显示位,按下K2时减1计数并减少显示位,按下K3时清零
#include#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
//数码管数字
uchar code shi_zi[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XFF};
//数码管显示位
uchar code wei[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//特显示到各数码管的数字缓冲(开始时公在0位显示,其他数码管黑屏)
uchar shu_ju_zan_cu[]={0,10,10,10,10,10,10,10};//初始化定义字符数组。
//延时
void yan_shi(uint ms)
{ uchar i,j;
for(j=0;j
}
//显示
void xian_shi_chengxu()
{
uchar i;
for(i=0;i<8;i++)
{
P2=0XFF;
P2=shi_zi[shu_ju_zan_cu[i]];//shi_zi[0]=0XC0显示0,shi_zi[10]=0XFF黑屏,
P3=wei[i];
yan_shi(2);
}
}
//主程序
void main()
{
uchar x,kai_weizhi,ji_shu=0;
P3=0X00;
P2=0XFF; //关闭LED灯
P1=0XFF;//按键复位
while(1)
{
xian_shi_chengxu();
P1=0xFF;
kai_weizhi=P1;
switch(kai_weizhi)
{
case 0XFE: ji_shu++;
if(ji_shu>8)ji_shu=8;
shu_ju_zan_cu[ji_shu-1]=ji_shu;//存入数据中,
break;
case 0XFD: if(ji_shu>0)shu_ju_zan_cu[--ji_shu]=10;//黑屏。
if(ji_shu==0)shu_ju_zan_cu[0]=0;
break;
case 0XFB: shu_ju_zan_cu[0]=0;//恢复初始化
for(x=1;x<8;x++)
shu_ju_zan_cu[x]=10;
ji_shu=0;
}
while(P1!=0XFF)xian_shi_chengxu();//等待按键松开。
}
}









最新发布