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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8036|回復: 5
收起左側

獨立按鍵控制流水燈方向

[復制鏈接]
ID:720329 發表于 2020-4-8 22:52 來自手機 | 顯示全部樓層 |閱讀模式
具體要求就是按下按鍵1,流水燈從最右端向左移動,此時如果再按按鍵2,流水燈從最左端向右移動
下面有我寫的程序,但是沒有預期效果,請各位大佬幫忙看看,是我程序有問題嗎?
IMG_20200408_224353.png
回復

使用道具 舉報

ID:720329 發表于 2020-4-9 08:26 來自手機 | 顯示全部樓層
各位大佬,幫幫忙,我是在是想不到哪錯了
回復

使用道具 舉報

ID:213173 發表于 2020-4-9 08:31 | 顯示全部樓層
改這樣試試
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. sbit key1=P1^0;
  6. sbit key2=P1^1;

  7. bit flag=0;

  8. void delay(uint k)
  9. {
  10.         uint i,j;
  11.         for(i=k;i>0;i--)
  12.                 for(j=120;j>0;j--);
  13. }

  14. void main()
  15. {
  16.         P0=0xfe;
  17.         while(1)
  18.         {
  19.                 if(key1==0)
  20.                         flag=1;
  21.                 if(key1==0)
  22.                         flag=0;
  23.                 if(flag==1)
  24.                         P0=_cror_(P0,1);
  25.                 else
  26.                         P0=_crol_(P0,1);
  27.                 delay(200);
  28.         }
  29. }
復制代碼
回復

使用道具 舉報

ID:164602 發表于 2020-4-9 09:05 | 顯示全部樓層
你看看我做的:
#include<reg51.h>
#include<intrins.h>       

#define GPIO_LED P2


sbit k1=P3^1;
sbit k2=P3^0;

void Delay10ms(unsigned int c);

void main(void)
{
        unsigned int i,j;
        j=0xfe;
        GPIO_LED=j;
        while(1)
        {       
                if(k1==0)
                {
                        Delay10ms(1);
                        if(k1==0)
                        {
                                if(k2==0)
                                {
                                        Delay10ms(1);
                                        if(k2==0)
                                        {
                                                j=_cror_(j,1);
                                                GPIO_LED=j;
                                        }
                                }
                                else
                                {
                                        j=_crol_(j,1);
                                        GPIO_LED=j;
                                }
                            while((i<50)&&(k1==0))
                            {
                                    Delay10ms(1);
                                    i++;
                            }
                            i=0;
                        }
                }
        }               
}

void Delay10ms(unsigned int c)
{
    unsigned char a,b;
    for(c;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

我在HC6800-ES-V2.0板子上通過試驗,結果是:
按下k1鍵,LED燈左移,不松手,一直左移。
按下k2鍵,沒有任何反應。
按下k1鍵,LED燈左移,不松手就一直左移;再按下k2鍵(此時k1、k2鍵是同時按下的),LED燈右移,都不松手,燈一直右移;松開k2,LED燈恢復左移,不松手一直左移;松開k1,LED燈不再移動。

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:116773 發表于 2020-4-9 10:30 | 顯示全部樓層
while循環內前兩個if語句應該加上大括號,if語句后面沒有大括號時,只是緊接的一條語句有效,不是你寫在一行內就行的。
回復

使用道具 舉報

ID:367369 發表于 2020-4-9 12:01 | 顯示全部樓層
/****  在你的代碼基礎上更改   ****/
#include <reg51.h>
#include <intrins.h>
void delay(unsigned int z)
{
unsigned int a,b;
for (a=0;a<z;a++)
  for (b=0;b<120;b++);

}
sbit key1=P1^0;
sbit key2=P1^1;
unsigned int i,n,k,c;
void main()
{
while ()
{
  
  k=0xfe;
  c=0xf7;  
  /*賦初值放前面,你的代碼邏輯中并沒有將其包含在if后面;
  如果你想表達按鍵1后給k賦值請加上{};因為有兩句代碼
  */
  if (key1==0)
   i=1;
  if (key2==0)
   n=1;  
  /*i和n應該是想用標志位;一個標志位有01兩種狀態
  兩種情況用一個標志位就夠了,兩位可以表示四種狀態*/
  /*****你仔細的品******/
  /*比如你的代碼中就可以用while(n)和while(!n)*/
  if (key==0&&i==1)
  delay(10);
  if (key==0&&i==1)
  
  /*
  你可以用
  if(i==1)
  {
  P0=k;
  k= _crol_(k,1)
  delay(500);
  n=0;
  }
  */
  {
  P0=k;
  k= _crol_(k,1)
  delay(500);
  n=0;
  /*標志位用來保存按鍵狀態,這樣就不用一直按著
  而n=0;用來清除按鍵二的狀態后面的i=0;同理
  */
  //while (!n);   
  //while (1)后面直接接分號,表示單片機什么也不做,原地等待
  //此處你的代碼中多余,你的狀況是流水燈閃一遍后燈全部滅了
  //你的代碼本來就處于外面的while(1)的大循環中
  /*你仔細品*/
  if (key==0&&n==1)
  delay(10);
  if (key==0&&n==1)
  {
  P0=c;
  c= _cror_(c,1)
  delay(500);
  i=0;
  
  }
  
  
  
  
}
}

/*******精簡版標志位法**********/
#include <reg51.h>
#include <intrins.h>
void delay(unsigned int z)
{
unsigned int a,b;
for (a=0;a<z;a++)
  for (b=0;b<120;b++);

}
unsigned int i,k,c;
void main()
{
while ()
{
  k=0xfe;
  c=0xf7;  
  if (key1==0)
   delay(10);
   if (key1==0)
   i=1;
  //i 儲存按鍵的狀態  1 0 表示按鍵1和按鍵2
  if (key2==0)
   delay(10);
   if (key2==0)
   i=0;
  
  //判斷i的值等同于判斷按鍵
  if(i==0)
  {
  P0=k;
  k= _crol_(k,1)
  delay(500);
  }
  else
  {
  P0=c;
  c= _cror_(c,1)
  delay(500);
  }
}
}

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色综合一区二区 | 91精品国产色综合久久 | h片在线播放| 亚洲成人免费 | 国产日韩欧美在线 | 久久99视频 | 99在线资源| 欧美成人精品一区二区男人看 | 欧美一区二区三区在线 | 国产黄色小视频在线观看 | 午夜99 | 国产成人精品久久二区二区91 | www.欧美.com | 日韩成人免费中文字幕 | 久久高清| 日韩成人在线观看 | 国产欧美在线一区 | 欧美成人免费在线视频 | 国产黄色电影 | 国产精品久久久久久久久大全 | 男人天堂视频在线观看 | 天天射网站 | 在线视频a| 欧美成视频 | av在线天堂 | 在线视频国产一区 | 成人毛片一区二区三区 | 亚洲精品一区二区三区中文字幕 | 久久一 | h片在线看| 国产精品成人一区二区 | 在线视频一区二区 | 久久久久久久久久久久91 | 91精品国产综合久久福利软件 | 亚洲国产精品一区二区久久 | 亚洲三区在线观看 | 91视频在线看 | 精品少妇一区二区三区日产乱码 | 天堂资源 | 欧美成人高清视频 | 国产精品3区 |