//功能:多功能按键控制数码管抽奖器,第一次按下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了,所以它能蜂鸣器响,但是数码管的数值不变!
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |