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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

如何改才能將下面的單片機代碼改成按下k1后從左向右流水按下k2從右向左流水

[復制鏈接]
跳轉到指定樓層
樓主
ID:1132368 發表于 2024-9-22 15:03 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{
        unsigned char i,j;
        while(xms)
        {
                i=2;
                j=239;
                do
                {
                        while(--j);
                }
                while(--i);
                xms--;
        }
}
void main()
{
        unsigned char LEDNum=0;
        
while(1)        
{
                if(P3_1==0)
                {
                                P2=~0x01;
                                while(1)
                        {
                                Delay(20);
                                while(P3_1==0);
                                Delay(20);
                                LEDNum++;
                                if(LEDNum>=8)
                                LEDNum=0;
                                P2=~(0X01<<LEDNum);//0x01左移lednum 0X01<<0 = 0000 0001
                        }
                }
                if(P3_0==0)
                        {
                                P2=~0x01;
                                while(1)
                                {
                                Delay(20);
                                while(P3_0==0);
                                Delay(20);
                                
                                if(LEDNum==0)
                                
                                        LEDNum=7;
                                
                                else
                                       
                                        LEDNum--;
                                
                                P2=~(0X01<<LEDNum);
                                
                                }
                        }
               
        }

}
        
現在的狀態是只能進行向左或著向右需要按下開關后才能重新開始
        

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

使用道具 舉報

沙發
ID:161164 發表于 2024-9-22 17:36 | 只看該作者
  1. #include <REGX52.H>
  2. #include <INTRINS.H>
  3. void main()
  4. {
  5.         unsigned char LEDNum=0;
  6.         unsigned char Dir = 0;
  7.         unsigned char Dir_Old = 0;
  8.         unsigned int DelayCnt = 0;
  9.         while(1)
  10.         {
  11.                 if(P3_1==0)
  12.                 {
  13.                         Dir = 1;
  14.                 }
  15.                 if(P3_0==0)
  16.                 {
  17.                         Dir = 2;
  18.                 }
  19.                 if(Dir_Old != Dir)
  20.                 {
  21.                         DelayCnt = 0;
  22.                         P2=~0x01;
  23.                         LEDNum = 0;                       
  24.                 }
  25.                 Dir_Old = Dir;
  26.                 if(++DelayCnt>=1000)
  27.                 {       
  28.                         DelayCnt=0;
  29.                         if(Dir==1)
  30.                         {
  31.                                 LEDNum++;
  32.                                 if(LEDNum>=8)
  33.                                         LEDNum=0;
  34.                         }       
  35.                         if(Dir==2)
  36.                         {
  37.                                 if(LEDNum==0)
  38.                                         LEDNum=7;
  39.                                 else
  40.                                         LEDNum--;
  41.                         }
  42.                         P2=~(0X01<<LEDNum);//0x01左移lednum 0X01<<0 = 0000 0001
  43.                 }
  44.         }
  45. }
復制代碼
回復

使用道具 舉報

板凳
ID:235200 發表于 2024-9-22 21:15 | 只看該作者
#include <REGX52.H>
#include <INTRINS.H>
void Delay(unsigned int xms)
{
        unsigned char i,j;
        while(xms)
        {
                i=2;
                j=239;
                do
                {
                        while(--j);
                }
                while(--i);
                xms--;
        }
}
void main()
{
        unsigned char LEDNum=0;
      
while(1)      
{
                if(P3_1==0)   flag=1; {Delay();i=0;}
                if(P3_0==0)   flag=0; {Delay();i=0;}
               if (flag)
                {
                                P2=~(1<<i);
                                Delay(); i++;
                                if (i==8) i=0;
                 }
               else
                 {
                                P2=~(1<<(8-i));
                                Delay(); i++;
                                if (i==8) i=0;
                 }
                              
        }

}
回復

使用道具 舉報

地板
ID:332444 發表于 2024-9-22 21:19 | 只看該作者
亂用無限循環
回復

使用道具 舉報

5#
ID:235200 發表于 2024-9-22 22:53 | 只看該作者
csmyldl 發表于 2024-9-22 21:15
#include
#include
void Delay(unsigned int xms)

還需在主程序中定義兩個變量:
bit flag;
unsigned char i;
回復

使用道具 舉報

6#
ID:1132494 發表于 2024-9-27 07:12 | 只看該作者
  1. #include <REGX52.H>
  2. #include <INTRINS.H>

  3. #define LED_COUNT 8
  4. #define BUTTON_DEBOUNCE_DELAY 20
  5. #define BUTTON_LONG_PRESS_DELAY 500 // 長按延遲

  6. // 延時函數
  7. void Delay(unsigned int xms) {
  8.     unsigned char i, j;
  9.     while (xms) {
  10.         i = 2;
  11.         j = 239;
  12.         do {
  13.             while (--j);
  14.         } while (--i);
  15.         xms--;
  16.     }
  17. }

  18. // 檢測按鈕按下并進行防抖
  19. bit IsButtonPressed(unsigned char buttonPin) {
  20.     if (buttonPin == 0) { // 按鈕被按下
  21.         Delay(BUTTON_DEBOUNCE_DELAY); // 消抖延遲
  22.         if (buttonPin == 0) { // 再次確認按下
  23.             return 1; // 按鍵有效
  24.         }
  25.     }
  26.     return 0; // 按鍵無效
  27. }

  28. void main() {
  29.     unsigned char LEDNum = 0;
  30.     bit isRunning = 0; // 狀態標志,表示是否正在流水

  31.     while (1) {
  32.         // 檢測按鈕 K1 (P3_1)
  33.         if (IsButtonPressed(P3_1) && !isRunning) {
  34.             isRunning = 1; // 設置狀態為正在流水
  35.             // 從左向右流水
  36.             for (LEDNum = 0; LEDNum < LED_COUNT; LEDNum++) {
  37.                 P2 = ~(0x01 << LEDNum); // 點亮對應的LED
  38.                 Delay(200); // 控制流水速度
  39.             }
  40.             isRunning = 0; // 流水結束,重置狀態
  41.         }

  42.         // 檢測按鈕 K2 (P3_0)
  43.         if (IsButtonPressed(P3_0) && !isRunning) {
  44.             isRunning = 1; // 設置狀態為正在流水
  45.             // 從右向左流水
  46.             for (LEDNum = LED_COUNT - 1; LEDNum < LED_COUNT; LEDNum--) {
  47.                 P2 = ~(0x01 << LEDNum); // 點亮對應的LED
  48.                 Delay(200); // 控制流水速度
  49.                 if (LEDNum == 0) break; // 防止越界
  50.             }
  51.             isRunning = 0; // 流水結束,重置狀態
  52.         }
  53.     }
  54. }
復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲免费在线观看 | 91九色porny首页最多播放 | 欧美一区二区三区久久精品 | 国产免费拔擦拔擦8x高清 | 在线 丝袜 欧美 日韩 制服 | 欧美国产91 | 99精品国产在热久久 | 久久国产精品视频 | 亚洲国产精品一区 | 一区二区三区日 | 亚洲综合伊人 | 亚洲免费观看视频网站 | 久久久www成人免费精品 | 99re视频这里只有精品 | 日韩一区中文字幕 | 日本高清视频在线播放 | 黄色欧美在线 | 91精品国产综合久久久久久漫画 | 午夜精品在线观看 | 特级生活片 | 国产精品一区2区 | 国产精品一区一区三区 | 热re99久久精品国产99热 | 激情a | 成人国产精品一级毛片视频毛片 | 国产精品视频一区二区三区不卡 | 成人小视频在线 | 亚洲狠狠丁香婷婷综合久久久 | 情侣酒店偷拍一区二区在线播放 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 全免费a级毛片免费看视频免费下 | 国产精品一区一区 | av免费看在线 | 日韩一级 | 一区二区三区在线免费观看 | 九九热视频这里只有精品 | 色欧美日韩 | 亚洲国产精品视频 | 欧美综合国产精品久久丁香 | 亚洲一区网站 | 一区二区三区 在线 |