//功能:多功能按键控制数码管抽奖器,第一次按下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了,所以它能蜂鸣器响,但是数码管的数值不变!
回复
有奖活动 | |
---|---|
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? | |
抽奖了,抽奖了,金升阳医疗电源 |
打赏帖 | |
---|---|
【换取手持数字示波器】+与同事对定时器输出相位可调PWM移相全桥控制分享被打赏50分 | |
【换取手持数字示波器】+LP-MSPM0L1306开发板试用体验+串口被打赏40分 | |
CC-RL编译器相关问题求助被打赏10分 | |
【换取手持数字示波器】+与同事对ESP-12开发调试经验分享被打赏50分 | |
【换取手持数字示波器】+同事tek示波器调试spi解析被打赏50分 | |
【换取手持数字示波器】+2.6寸墨水屏调试经验被打赏50分 | |
换取手持数字示波器+个人开关电源的设计经验被打赏50分 | |
【换取手持数字示波器】+【APT32F173测评】+URAT被打赏20分 | |
【换取手持数字示波器】CH32X035的定时器以及外部中断体验被打赏50分 | |
【换取手持数字示波器】CH32X035搭建开发环境(RISC-V)被打赏50分 |