找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1769|回复: 14
打印 上一主题 下一主题
收起左侧

求帮忙看看这个程序这样写可以吗?

[复制链接]
跳转到指定楼层
楼主
ID:230975 发表于 2017-9-4 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
P0驱动数码管,按键1按下时,数值加1,到9停止;按键2按下时,在当前数值上减一,到0停止。请帮忙看看这样写合适吗谢谢。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0;
sbit key2=P2^1;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay(uint);
void keyscan();
void main()
  {
   P1=0xfe;
num=5;
P0=table[num];
while(1)
   {
    keyscan();
  P0=table[num];
   }

  }
void delay(uint z)
   {
     uint x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
   }
void keyscan()
   {
     if(key1==0)
  delay(10);
  if(key1==0)
    {
      
      if(num<=8)
    num++;
   while(!key1);
    }
   if(key2==0)
   delay(10);
   if(key2==0)
     {
   
   if(num>=1)
    num--;  
   while(!key2);
  }
   }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:230975 发表于 2017-9-4 21:13 | 只看该作者
通电扣数码管先显示5,然后在5的基础上加1或者减1显示
回复

使用道具 举报

板凳
ID:230970 发表于 2017-9-5 15:16 | 只看该作者
烧写进单片机看看,没看出毛病
回复

使用道具 举报

地板
ID:230915 发表于 2017-9-5 15:34 | 只看该作者
有几处问题哦,if语句。
回复

使用道具 举报

5#
ID:229761 发表于 2017-9-5 15:39 | 只看该作者
你可以用仿真proteus看看,应该是可以的
回复

使用道具 举报

6#
ID:213173 发表于 2017-9-5 16:28 | 只看该作者
if(key1==0),if(key2==0)下面少了花括号,delay起不到消抖作用。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0;
sbit key2=P2^1;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay(uint);
void keyscan();
void main()
{
//        P1=0xfe;
        num=5;
        P0=table[num];
        while(1)
        {
                keyscan();
                P0=table[num];
        }
}
void delay(uint z)
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
void keyscan()
{
        if(key1==0)
        {
                delay(10);
                if(key1==0)
                {
                        if(num<9)
                                num++;
                        while(!key1);
                }
        }
        if(key2==0)
        {
                delay(10);
                if(key2==0)
                {
                        if(num>0)
                        num--;  
                        while(!key2);
                }
        }
}
回复

使用道具 举报

7#
ID:231231 发表于 2017-9-5 19:53 | 只看该作者
烧进单片机看看 能实现你的要求 但是有些语句格式不太规范 再改改
回复

使用道具 举报

8#
ID:230975 发表于 2017-9-6 14:21 | 只看该作者
谢谢各位。刚开始学单片机以后还要向大家多学习
回复

使用道具 举报

9#
ID:231404 发表于 2017-9-6 14:44 | 只看该作者
在单片机调试下程序,看下结果现象
回复

使用道具 举报

10#
ID:231404 发表于 2017-9-6 14:46 | 只看该作者
hmgqljz111 发表于 2017-9-6 14:21
谢谢各位。刚开始学单片机以后还要向大家多学习

推荐一份资料【手把手教你学51单片机】很经典,对新手很有借鉴性,希望能够帮到你
回复

使用道具 举报

11#
ID:231409 发表于 2017-9-6 14:54 | 只看该作者
可以先调试一下程序,如果有问题,可以再问一下
回复

使用道具 举报

12#
ID:230975 发表于 2019-9-28 15:42 | 只看该作者
wulin 发表于 2017-9-5 16:28
if(key1==0),if(key2==0)下面少了花括号,delay起不到消抖作用。
#include
#define uchar unsigned cha ...

谢谢谢谢谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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