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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機獨立按鍵問題求助

[復制鏈接]
跳轉到指定樓層
樓主
這是我寫的代碼,想讓它按下key1顯示8個6,按下key2顯示123456,按下key3從10變到0。現在發現一個問題,就是打開單片機沒按任何按鍵就從10變到0。按復位鍵也沒用,問一下這是那個地方有問題

單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit key1=P3^0;
  4. sbit key2=P3^1;
  5. sbit key3=P3^2;
  6. sbit DU=P2^6;
  7. sbit WE=P2^7;
  8. char W[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  9. char D[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  10. void delayxms(unsigned int x)
  11. {
  12.         unsigned char i, j;
  13.         while(x>0){
  14.                 _nop_();                                 
  15.                 i = 2;
  16.                 j = 199;
  17.                 do
  18.                 {
  19.                         while (--j);
  20.                 } while (--i);
  21.                 x--;
  22.         }
  23. }

  24. void main()
  25. {
  26.         int a,b;
  27.         while(1)
  28.         {
  29.                 if(key1==0)
  30.                 {
  31.                         delayxms(20);
  32.                         while(!key1);
  33.                         WE=1;
  34.                         P0=0X00;
  35.                         WE=0;

  36.                         DU=1;
  37.                         P0=0X7D;
  38.                         DU=0;
  39.                 }
  40.                 if(key2==0)
  41.                 {
  42.                         delayxms(20);
  43.                         while(!key2);
  44.                         while(1)
  45.                         {               
  46.                                 for(a=0;a<6;a++)
  47.                                 {        
  48.                                         DU=1;
  49.                                         P0=D[a+1];
  50.                                         DU=0;
  51.                                        
  52.                                         P0=0xff;
  53.                                         WE=1;
  54.                                         P0=W[a];
  55.                                         WE=0;
  56.                                         delayxms(1);                                       
  57.                                 }
  58.                         }        
  59.                 }
  60.                 if(key3==0)
  61.                 {
  62.                         delayxms(20);
  63.                         while(!key3);
  64.                         while(1)
  65.                         {        
  66.                                 b=100;
  67.                                 while(b)
  68.                                 {
  69.                                         P0=0xff;
  70.                                         WE=1;
  71.                                         P0=0x7f;
  72.                                         WE=0;
  73.         
  74.                                         DU=1;
  75.                                         P0=D[0];
  76.                                         DU=0;
  77.                                         delayxms(5);
  78.                                        
  79.                                         P0=0XFF;
  80.                                         WE=1;
  81.                                         P0=0xbf;
  82.                                         WE=0;               
  83.                                         DU=1;
  84.                                         P0=D[1];
  85.                                         DU=0;
  86.                                         delayxms(5);
  87.                                         b--;                                
  88.                                 }
  89.                                 P0=0XFF;
  90.                                 WE=1;
  91.                                 P0=0x7f;
  92.                                 WE=0;
  93.                                 DU=1;
  94.                                 for(a=9;a>=0;a--)
  95.                                 {                                
  96.                                         P0=D[a];
  97.                                         delayxms(1000);
  98.                                 }
  99.                         }
  100.                 }
  101.         }
  102. }
復制代碼

1.png (31 KB, 下載次數: 67)

1

1

2.png (30.17 KB, 下載次數: 70)

2

2

3.png (34.77 KB, 下載次數: 64)

3

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

使用道具 舉報

沙發
ID:161164 發表于 2022-2-19 00:10 | 只看該作者
Proteus仿真沒有樓主說的問題
懷疑是KEY3焊接時對地短路了

KEY2的顯示代碼有問題,沒有成功消影
回復

使用道具 舉報

板凳
ID:1002906 發表于 2022-2-19 08:54 | 只看該作者
lkc8210 發表于 2022-2-19 00:10
Proteus仿真沒有樓主說的問題
懷疑是KEY3焊接時對地短路了

好的,謝謝
回復

使用道具 舉報

地板
ID:8222 發表于 2022-2-19 09:21 | 只看該作者
當你按下K2后,就一直在里面循環里。
while(1)
                        {               
                                for(a=0;a<6;a++)
                                {        
                                        DU=1;
                                        P0=D[a+1];
                                        DU=0;
                                       
                                        P0=0xff;
                                        WE=1;
                                        P0=W[a];
                                        WE=0;
                                        delayxms(1);                                       
                                }
                        }   
回復

使用道具 舉報

5#
ID:860248 發表于 2022-3-24 22:38 | 只看該作者
各位好:
剛巧早日看到這標題, 我也是初學單片機, 見這題目, 我按照原同學思路及要求修改如下, 多謝指正

#include <reg52.h>
#include <intrins.h>
#define SMG_duan P0                                                                                       //定義數碼管段碼 為 P0端口
#define SMG_wei P2                                                                                         //定義數碼管位碼 為 P2端口

sbit key1 = P3^0;                                                                                             //定義 key1~key3 輸入為 P3.0~P3.2 端口  
sbit key2 = P3^1;
sbit key3 = P3^2;

char Wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
char Duan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delayxms(unsigned int x)                                                                             //這延時函數是原同學的設計
{
    unsigned char i, j;
    while(x>0)
    {
               _nop_();                                 
               i = 2;
        j = 199;
                      do
                   {
                           while (--j);
                   }
                while (--i);
        x--;
    }
}

void main()
{
        unsigned char a;
        unsigned int b;

    while(1)
    {
            if(key1 == 0)                                                                                            // key1被按下時執行
        {
                SMG_duan = 0x00;
                delayxms(20);
                while(!key1);                                                                                     // key1放開時顯示
                        SMG_duan = Duan[6];                                                                // 顯示 66666666
                        SMG_wei = 0X00;
        }

        if(key2 == 0)                                                                                              // key2被按下時執行
        {
                SMG_duan = 0x00;
                delayxms(20);
                while(!key2);                                                                                       // key2放開時顯示
                    while(key1!=0 && key2!=0 && key3!=0)                                                // 此處原程序有錯 while(1)會進入死循環, 所以我検查這
                    {                                                                                                        //           三個按鍵作為退出條件
                            for(a=0; a<6; a++)
                        {        
                                SMG_duan = Duan[a+1]; SMG_wei = Wei[a]; delayxms(1);      //顯示 123456
                        }
                    }
        }

                if(key3 == 0)                                                                                          // key3被按下時執行
               {
                        SMG_duan = 0x00;
                        delayxms(20);
                         while(!key3);                                                                                   // key3放開時顯示  
                                b = 500;
                                while(b--)
                                {
                                         for(a=0; a<=1; a++)
                                        {        
                                          SMG_duan = Duan[a]; SMG_wei = Wei[7-a]; delayxms(1);   // 先用動態型式顯示 10
                                        }
                                }
                                         for(a=0; a<=9; a++)                                                         // 此處我曾經用a=9;a>0;a-- 但出現循環, 原因我定了
                                        {                                                                                        //        a為uchar, 所以沒有負數, 永遠為0, for為死循環
                                                   SMG_duan = Duan[9-a]; SMG_wei = Wei[7];                      // 再用靜態型式顯示 9~0
                                                delayxms(1000);
                                         }
                }
        }
}

*/*** 這個程序我是用普中開發板通過, 所以程序有些部份需配合開發板設計 ***/
*/*** 這個程序我設計是先按下, 放手后執行顯示 ***/


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97视频在线免费 | 欧美成人h版在线观看 | av在线播放不卡 | 欧美一区二区大片 | 欧美一区2区三区3区公司 | 亚洲欧美在线观看 | 成人在线视频免费观看 | 午夜精品久久 | 欧美成人高清视频 | 欧美日韩国产一区二区三区 | 91亚洲欧美 | 国产成人免费视频网站高清观看视频 | 欧美国产视频 | 国产一区二 | 毛片一级片 | 日韩在线国产 | 成人18亚洲xxoo | 中文字幕一区在线观看视频 | 国产精品一区二区三区四区 | 一区二区三区在线 | 免费亚洲婷婷 | 国产精品三级 | a在线视频观看 | 久久久久久久综合色一本 | 久久9精品 | 日本中文字幕一区 | 亚洲一区二区av | 国产精品成人一区二区三区 | 成人免费av | 69av网| 欧美日韩一 | 日韩免费激情视频 | 大学生a级毛片免费视频 | 美女黄网 | 日本一区二区在线视频 | 久草新视频 | 黄色大片在线 | 日韩欧美在线观看视频 | 国产在线精品一区二区 | 秋霞av国产精品一区 | 亚洲欧美网站 |