找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机数码管显示问题(按键一次,数码管加一)新人求助!

查看数: 18610 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-6-8 19:54

正文摘要:

我自己刚学,想实现一个功能,功能是:三个数码管分别显示个十百位,按键按下一次,数码管加一,就是相当于用程序编了一个计数器。 计数没有问题,进位也没有问题,但是现在的问题是:仿真开始后,没有操作的时候, ...

回复

ID:883031 发表于 2021-2-25 11:07
消完抖以后还要判断键是否按下。
ID:884223 发表于 2021-2-21 22:09
year1987 发表于 2017-6-13 17:09
//你的程序改起来好辛苦,从新写了个,你试试
#include
#define uchar unsigned char

蟹蟹大神,i了i了
ID:210587 发表于 2017-6-13 17:09
//你的程序改起来好辛苦,从新写了个,你试试
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P1^0;
uchar bai,shi,ge;
uint code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};  //共阴极数码管
void delay(uchar xms)//x毫秒的延时程序,你的延时程序问题太大了,while不是那么用的
{
        uchar i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}
void display()//显示程序
{
        P3=0xff;//清屏
        delay(5);
        P3=0xfe;//位选
        P2=table[bai];
        delay(5);
        P3=0xff;
        delay(5);
        P3=0xfd;
        P2=table[shi];
        delay(5);P3=0xff;
        delay(5);
        P3=0xfb;
        P2=table[ge];
        delay(5);
}
void keyboard()//键盘扫描程序
{
        if(k1==0)
        {
                delay(10);
                if(k1==0)
                {
                        while(!k1);//等待按键释放
                        ge++;
                        if(ge>9)
                        {
                                ge=0;
                                shi++;
                        }
                        if(shi>9)
                        {
                                shi=0;
                                bai++;       
                        }
                        if(bai>9)
                        {
                                ge=0;
                                shi=0;
                                bai=0;
                        }
                }
        }
}
void main()
{
        bai=0;
        shi=0;
        ge=0;
        while(1)
        {
                display();
                keboard();
}
ID:209318 发表于 2017-6-13 09:42
wangminfu 发表于 2017-6-9 03:55
消抖动和按键放开有冲突。 消抖动是 先判断按下,然后计数,放开时检查 计数(时间),如果时间很短,认为 ...

谢谢,那为啥我那个明明是选择了三个数码管,怎么同时只能亮一个
ID:206560 发表于 2017-6-9 03:55
消抖动和按键放开有冲突。 消抖动是 先判断按下,然后计数,放开时检查 计数(时间),如果时间很短,认为是抖动,不予理睬,继续等待按下。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表