久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8207|回復: 10
打印 上一主題 下一主題
收起左側

單片機怎么實現1位數碼管按鍵下的靜態顯示0-9 我寫的程序有問題

[復制鏈接]
跳轉到指定樓層
樓主
這個代碼有問題,按下按鍵不是按順序從0-9的顯示,是跳著顯示,幫看看哪里錯了。

單片機源程序:
  1. #include "reg52.h"
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  5.                      0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陽數碼管碼表
  6. sbit key_s1 = P3^2;  //獨立按鍵S1
  7. uchar num;
  8. void delay(uint z);
  9. void main()

  10. {
  11.         uchar i;
  12.         P2 = 0xff;
  13.         while(1)
  14.         {
  15.            for(i=0;i<16;i++)
  16.            
  17.            if(key_s1 == 0)
  18.          {
  19.            delay(1000);
  20.            P0=~table[i];
  21.            
  22.            delay(20); //按鍵消抖
  23.            if(key_s1 == 0)
  24.            num++;
  25.            if(num == 10)
  26.            num = 0;
  27.            while(!key_s1); //松手檢測
  28.          }
  29.         }
  30. }
  31.         void delay(uint z)
  32.         {
  33.          uint x,y;         for(x=z;x>0;x--)
  34.          for(y=110;y>0;y--);
  35.         }

復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:164602 發表于 2018-4-25 08:42 | 只看該作者
你的程序思路不對啊。

你先for,你知道你按鍵時,for到哪里了?所以,你按下鍵時,真的是碰運氣,for到哪,就是哪兒,所以,不會跟你設想的按一下,走一個字。

我是這樣改你的程序的
void main()

{
        uchar i;
        P2 = 0xff;
        while(1)
        {
           if(key_s1 == 0)
         {
           delay(1000);
           P0=table[i];
           i++;
                   if (i>9)
                   i=0;
           delay(20); //按鍵消抖
           if(key_s1 == 0)
           num++;
           if(num == 10)
           num = 0;
           while(!key_s1); //松手檢測
         }
        }
}

另外,我還不明白,你的num變量是干什么的,沒什么用啊。

評分

參與人數 1黑幣 +5 收起 理由
luntandianzi + 5

查看全部評分

回復

使用道具 舉報

板凳
ID:315830 發表于 2018-4-25 12:01 | 只看該作者
邏輯混亂了
你現在實現的是0-f的抽獎顯示吧

1.你的16次for循環應該去掉
2.要顯示的應該是num,不是i
3.delay(1000)影響消抖,且你不按按鍵數碼管顯示數字不會變,這句應該去掉
暫時看到那么多
回復

使用道具 舉報

地板
ID:311951 發表于 2018-4-25 12:50 | 只看該作者
怎么是亂碼

265947653.jpg (41.49 KB, 下載次數: 82)

265947653.jpg
回復

使用道具 舉報

5#
ID:213173 發表于 2018-4-25 14:28 | 只看該作者

數碼管數組用反了吧?
回復

使用道具 舉報

6#
ID:311951 發表于 2018-4-25 20:43 | 只看該作者
現在是正常了,可是怎么按下按鍵,直接從0跳到2,怎么回事啊,大家在幫我看看哪里出問題了。

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陽數碼管碼表
sbit key_s1 = P3^2;  //獨立按鍵S1
uchar num;
void delay(uint z);
void main()

{
        uchar i;
        P2 = 0xff;
        while(1)
        {
           if(key_s1 == 0)
         {
           P0=~table[i];
           i++;
           if (i>9)
       i=0;
           delay(20); //按鍵消抖
           if(key_s1 == 0)
           num++;
           if(num == 10)
           num = 0;
           while(!key_s1); //松手檢測
         }
        }
}
        void delay(uint z)
        {
         uint x,y;         for(x=z;x>0;x--)
         for(y=110;y>0;y--);
        }

回復

使用道具 舉報

7#
ID:213173 發表于 2018-4-26 07:12 | 只看該作者
fenger112 發表于 2018-4-25 20:43
現在是正常了,可是怎么按下按鍵,直接從0跳到2,怎么回事啊,大家在幫我看看哪里出問題了。

#include " ...

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,                     
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰數碼管碼表0~F
sbit key_s1 = P3^2;  //獨立按鍵S1
//uchar num;
void delay(uint z);
void main()
{
        uchar i=0;
        P2 = 0xff;
        P0=~table;
        while(1)
        {
                if(key_s1 == 0)
                {
                        delay(20); //按鍵消抖
                        if(key_s1 == 0)
                        {
                                i++;
                                if(i>9)
                                        i=0;
                                P0=~table;
                                while(!key_s1); //松手檢測
//                                num++;
//                                if(num == 10)
//                                num = 0;
                        }
                }
        }
}
void delay(uint z)
{
        uint x,y;         
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);
}
回復

使用道具 舉報

8#
ID:311951 發表于 2018-4-26 19:16 | 只看該作者
wulin 發表于 2018-4-26 07:12
#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char

謝謝了,不過P0=~table;這句要改成P0=~table;才行
回復

使用道具 舉報

9#
ID:311604 發表于 2018-4-26 19:48 | 只看該作者
對啦,我也剛看明白,學習了
回復

使用道具 舉報

10#
ID:213173 發表于 2018-4-26 20:34 | 只看該作者
fenger112 發表于 2018-4-26 19:16
謝謝了,不過P0=~table;這句要改成P0=~table;才行

這是與你使用的數碼管是共陰或共陽來確定的
回復

使用道具 舉報

11#
ID:317386 發表于 2018-4-26 21:37 | 只看該作者
共陽數碼管段碼不對吧
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜看电影在线观看 | 成人午夜网站 | 欧美精品久久久久久久久老牛影院 | 亚洲一在线| 6080亚洲精品一区二区 | 午夜天堂 | 久久伊人一区二区 | 精品久久电影 | 狠狠操狠狠色 | 久久综合伊人 | 天天干精品 | 一区二区三区国产精品 | 伊人久久成人 | 爱爱免费视频 | 91精品国产综合久久福利软件 | 欧美精品一区二区三区在线播放 | 日本在线综合 | www.久草 | 国产午夜在线 | 日韩三级电影一区二区 | 午夜视频在线免费观看 | 一级黄色片日本 | 91精品国产91久久久久久吃药 | 韩日在线| 国产欧美精品区一区二区三区 | 全部免费毛片在线播放网站 | 亚洲精品一区二区在线观看 | 日韩av电影在线观看 | 国产 日韩 欧美 在线 | 欧美亚洲国产日韩 | 国产精品美女久久久久aⅴ国产馆 | 男女羞羞视频在线观看 | 91亚洲国产成人久久精品网站 | 99久久99久久精品国产片果冰 | 亚洲成人精品在线 | 欧美天堂一区 | 国产一区二区在线免费观看 | а_天堂中文最新版地址 | 日韩精品在线视频 | 欧美一级淫片免费视频黄 | 欧洲精品码一区二区三区免费看 |