//功能:多功能按键控制数码管抽奖器,第一次按下SB1数字能加减;第二次按下
// 按下SB2数字闪烁,当按下SB3是数字开始从0000开始跑按下SB4停下
#include<reg51.h>
#define uchar unsigned char
char number[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
char number1[4]={0,0,0,0};
char h=0,l=0;
sbit SB4=P3^3; //停止键
sbit SB3=P3^4; //数字减
sbit SB2=P3^5; //数字加
sbit SB1=P3^6; //功能切换键
sbit FM5=P3^7;// 蜂鸣器
void delay(int b)
{
int a,c; /*特殊钟延时子程序*/
for(a=832;a>0;a--)
for(c=b;c>0;c--);
}
/**********************************************************************/
int smiao()
{
uchar c,f,g=0x01;
number1[0]=h/10; //显示高十位
number1[1]=h%10; //显示高个位
number1[2]=l/10; //显示低十位
number1[3]=l%10; //显示低个位
for(c=0;c<4;c++)
{
P1=g; //位选
P2=number[number1[c]]; //段选
for(f=0;f<200;f++); //简短的延时
g=g<<1; //左移为了扫描位选
}
}
/***************************************************************/
int fengming()
{
uchar q;
for(q=0;q<3;q++) //蜂鸣器函数
{ FM5=0;
delay(10);
FM5=1;
delay(10);
}
}
/***********************************************************************/
main()
{
char b=0,q,t=0;
SB1=SB2=SB3=SB4=1; //按键初始化
while(1)
{
smiao();
if(SB1==0) //判断SB1是否按下
{ for(q=0;q<50;q++); //去抖
if(SB1==0)
{
b=b+1;
if(b>=3) b=0;
}
}
/***********************************************************/
if(b==1)
{ //while(b==1)
{
if(SB2==0) //如果SB3等于0
{
for(q=0;q<125;q++); //去抖
if(SB2==0)
{ smiao();
//while(SB2==0) smiao();
l=l+1; //高位加一
if(l==100)
{
h=h+1; l=0;
if(h>99) h=0;
} //如果高位等于30再从0开始
}
}
if(SB3==0)
{ for(q=0;q<125;q++);
if(SB3==0)
{
smiao();
// while(SB3==0)smiao(); //数码管扫描函数
l=l-1;
if(l<=0)
{
l=0;
h=h-1;
if(h<=0) h=0;
}
}
}
//smiao(); //数码管扫描函数
}
}
/************************************************************/
if(b==2) //当b=2时蜂鸣器报警数码管闪烁
{
for(t=0;t<3;t++)
{ 个位师傅帮忙看看这段程序为什么一下
delay(60); SB1程序就执行-----b=2时蜂鸣器报警数码 smiao(); 闪烁
FM5=0;
smiao(); 为什么不执行数码管加减啊帮忙改一下谢谢师傅了
delay(10);
FM5=1;
b=0;
smiao();
}
}
}
}


3楼
你的程序是有问题的,你的延时太短了!
if(SB1==0) //判断SB1是否按下
{ for(q=0;q<50;q++); //去抖
这个时间太短,假设你按的按键的时间是10ms的话,那么他有可以连续的采集两次的,那么b的值就是2了,所以它能蜂鸣器响,但是数码管的数值不变!
if(SB1==0) //判断SB1是否按下
{ for(q=0;q<50;q++); //去抖
这个时间太短,假设你按的按键的时间是10ms的话,那么他有可以连续的采集两次的,那么b的值就是2了,所以它能蜂鸣器响,但是数码管的数值不变!



回复
打赏帖 | |
---|---|
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 | |
【nRF7002DK】基于sht30的温湿度计被打赏20分 | |
【nRF7002DK】日志打印被打赏20分 | |
rtthread硬件加密-5hash加密分析被打赏10分 | |
【STM32F769】SD卡驱动及其调试经验分享被打赏32分 | |
【分享开发笔记,赚取电动螺丝刀】使用看门狗降低系统隐藏bug触发概率被打赏18分 | |
【STM32F769】调试SD驱动,由于其时钟配置不对引起的错误以及排查记录被打赏35分 | |
【分享开发笔记,赚取电动螺丝刀】MCUXpressoConfigTools配置外设时的异常解决被打赏24分 |