欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求教編程思路 用獨立按鍵控制流水燈的方向,按一下流水燈從亮的地方反向流轉 [打印本頁]

作者: UriXie    時間: 2017-1-8 22:35
標題: 求教編程思路 用獨立按鍵控制流水燈的方向,按一下流水燈從亮的地方反向流轉
      剛學單片機,學長布置的題,用獨立按鍵控制流水燈的方向,按一下流水燈從亮的地方反向流轉,求教思路,想了很久還沒解決,謝謝好心人了

作者: 向前看zk    時間: 2017-1-9 09:14
八位數碼管采用共陽極接法(所有陽極接一起接Vcc,陰極接P0口)
按鍵分別接P2.0  P2.1  P2.2(低電平有效)

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1 =P2^0; //按鍵1
sbit key2 =P2^1; //按鍵2
sbit key3 =P2^2; //按鍵3
uchar flag1=0,flag2=0,flag3=0;
void delay_ms(uint z)
{
     uint i,j;
     for(i=0;i<z;i++)
     for(j=0;j<110;j++);
}
void O_to_E() //1,3,5,7與2,4,6,8交替閃爍
{
     P0=0Xaa;
     delay_ms(200);
     P0=~0Xaa;
     delay_ms(200);
}
void key_scan()    //鍵盤掃描
{
     if(!key1)
     {
          delay_ms(10); //延時消抖
          if(!key1)
          flag1=1;
     }
     if(!key2)
     {
          delay_ms(10); //延時消抖
          if(!key2)
           flag2=1;
         }
     if(!key3)
     {
          delay_ms(10); //延時消抖
          if(!key3)
           flag3=1;
     }
}
void main()
{
     uchar i;
     while(1)
     {
            key_scan();
            if(flag1)                               //按鍵一按下?               
            {
                   for(i=0;i<8;i++)            //從左至右亮,每次一盞            
                   {
                            P0=~(0x80>>i);
                            delay_ms(100);
                            key_scan();                 //按鍵掃描   
                            if(flag2||flag3){flag1=0;break;}        //如果有其它按鍵按下響應其它按鍵
                   }
             }
             if(flag2)                                //按鍵一按下?                  
             {
                    for(i=0;i<8;i++)             //從右至左亮,每次一盞  
                   {
                            P0=~(0x01<<i);
                            delay_ms(100);
                            key_scan();
                            if(flag1||flag3){flag2=0;break;}
                   }
             }
              if(flag3)
             {
                   O_to_E();                             //奇偶交替閃爍
                   key_scan();
                   if(flag1||flag2)flag3=0;
              }
        }
}
作者: 不倒翁.WZT    時間: 2017-1-9 09:21
標題: RE: 求教編程思路 用獨立按鍵控制流水燈的方向,按一下流水燈從亮的地方反向流轉
我寫過這樣一個程序,發給你參考一下。

單鍵控制循環燈移動樣式.zip

33.52 KB, 下載次數: 1000


作者: espopoi    時間: 2017-1-9 23:22
本帖最后由 espopoi 于 2017-1-9 23:24 編輯

這個程序能差不多滿足要求,就有一點,精度不高,不能在按下的瞬間就從亮的地方返回,他有時候會先按原來的順序亮一個燈,再按相反的順序亮,希望有大神能改進,

模擬.rar

33.65 KB, 下載次數: 350


作者: 悠風蒲憐    時間: 2017-1-10 00:16
弄清高低位就好了
作者: UriXie    時間: 2017-1-10 06:53
不倒翁.WZT 發表于 2017-1-9 09:21
我寫過這樣一個程序,發給你參考一下。

嗯嗯,謝謝了。
作者: UriXie    時間: 2017-1-10 06:57
espopoi 發表于 2017-1-9 23:22
這個程序能差不多滿足要求,就有一點,精度不高,不能在按下的瞬間就從亮的地方返回,他有時候會先按原來的 ...

嗯嗯,謝謝啦
作者: 958809860    時間: 2017-1-10 10:24
加一個鍵盤檢測程序,然后里面寫左右循環
作者: zhangli019    時間: 2017-1-10 10:33
espopoi 發表于 2017-1-9 23:22
這個程序能差不多滿足要求,就有一點,精度不高,不能在按下的瞬間就從亮的地方返回,他有時候會先按原來的 ...

應該是采用了空循環做延時,改用定時器做延時就好了
作者: utzuzu    時間: 2017-1-10 21:12
提供思路僅供參考:
1、流水燈左右循環通過循環左移、循環右移;弄個變量標志方向,每次移動判斷一下是左還是右。
2、如果不用定時器和中斷,那就把你的延時函數做成 循環檢測按鍵,檢測到按鍵就把方向變量反一下。
3、追求精確的延時用定時器方便。
4、如果用空循環等待,把按鍵接到中斷,用中斷方式讀按鍵也行得通。
作者: lids    時間: 2017-1-11 14:01
#include <REG51.h> //51頭文件

/*********************************************************************************************/

#define DY_PORT                P1 //設置LED連接的I/O組
#define DY_SPEED        100 //設置每一個明亮級的停留時間(值域:0~65535)

/*********************************************************************************************

bit [自定義名] ; //定義一個位(位的值只能是0或1)例:bit LED
#define [代替名]        [原名]  //用代替名代替原名(可以方便修改常改或調試的值)例:#define LED P1
sbit  [自定義名] = [系統位名] ; //自定義系統位名。例:sbit Add_Key = P3 ^ 1;
unsigned char [自定義名] ; //定義一個0~255的整數變量.例:unsigned char a;
unsigned int [自定義名] ; //定義一個0~65535的整數變量

/*********************************************************************************************/
void delay (unsigned int a){ // 1ms延時程序
        unsigned int i;
        while( --a != 0){
                for(i = 0; i < 600; i++);//STC單片機在外部晶振為12MHz時i值上限為600  
        }                                                       //AT89C51單片機在外部晶振為12MHz時i值上限為125
}
/*********************************************************************************************/
void main(void){
        unsigned int i;
        unsigned int temp;
        while(1){
            temp=0x01;
            for(i=0;i<8;i++){ //8個流水燈逐個閃動
                     DY_PORT=~temp;
                     delay(DY_SPEED);   //調用延時函數
                     temp<<=1;
            }
                temp=0x80;
                for(i=0;i<8;i++){ //8個流水燈反向逐個閃動
                    DY_PORT=~temp;
                    delay(DY_SPEED);   //調用延時函數
                    temp>>=1;
                   }
            temp=0xFE;
                for(i=0;i<8;i++){ //8個流水燈依次全部點亮
                     DY_PORT=temp;
                     delay(DY_SPEED);   //調用延時函數
                     temp<<=1;
            }
                   temp=0x7F;
                   for(i=0;i<8;i++){ //8個流水燈依次反向全部點亮
                     DY_PORT=temp;
                     delay(DY_SPEED);   //調用延時函數
                     temp>>=1;
            }
        }
}
作者: ottomia    時間: 2017-1-11 14:04
功能順序理清楚就行了。。。
作者: 光翟11    時間: 2017-1-12 16:20
按鍵做個標志,然后取反
作者: liuzhaoxin1020    時間: 2017-2-3 11:48
不錯的分享,值得收藏
作者: 745    時間: 2017-5-5 15:32
AVR的好不
作者: 遇見之影    時間: 2017-5-5 23:13
第一,需要用一個IO口來控制按鍵,需要進行延時消抖,第二需要讓流水燈做來回點亮構成死循環
作者: 遇見之影    時間: 2017-5-5 23:14
#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int  void DelayMS(uint x) {          uchar i;         while(x--)         {                  for(i=200;i>0;i--);         } }  void Move_LED() {          if((P1 &= 0x10)==0)        P0 = _cror_(P0,1);         else if((P1 &= 0x20)==0)        P0 = _crol_(P0,1);         else if((P1 &= 0x40)==0)        P2 = _cror_(P2,1);         else if((P1 &= 0x80)==0)        P2 = _crol_(P2,1); }  void main() {          uchar Recent_Key=0xff;         P0=0xfe;         P1=0xfe;         P2=0xfe;         while(1)         {                  if(Recent_Key != P1)                 {                          Recent_Key=P1;                         Move_LED();                         DelayMS(10);                 }         } }
作者: cam226390674    時間: 2017-5-6 13:10
用獨立按鍵控制流水燈的方向
作者: zl2168    時間: 2017-5-7 17:37
本帖最后由 zl2168 于 2017-5-7 17:51 編輯

實例7  鍵控流水循環燈先Proteus仿真一下,確認有效。
實例7 鍵控流水循環燈.rar (36.04 KB, 下載次數: 175)

以上摘自張志良編著《80C51單片機Proteus仿真設計實例教程》清華大學出版社ISBN 978-7-302-41682-1仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。
仿真電路和Hex文件能在清華出版社網站免費下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網上書店打折購買。



作者: NEC_HaoZ    時間: 2017-5-7 17:43
設置一個全局bit型變量,打開外部中斷,用按鍵產生中斷,在中斷程序里吧bit型變量取反,然后在主程序里判斷bit變量,1就正移動,0就反移動。這樣就能實現用按鍵控制流水燈正反向了
作者: NEC_HaoZ    時間: 2017-5-7 17:45
設置一個全局的bit變量,在外部中斷函數里取反這個變量的值,在主程序判斷bit是1還是0來控制流水燈正反。
作者: GKA    時間: 2017-5-7 17:51
不錯的分享,值得收藏
作者: karyboa    時間: 2018-3-16 21:14
向前看zk 發表于 2017-1-9 09:14
八位數碼管采用共陽極接法(所有陽極接一起接Vcc,陰極接P0口)
按鍵分別接P2.0  P2.1  P2.2(低電平有效 ...

請教一下,此程序要怎么改成按鍵按下不放執行程序,放開按鍵不執行程序,每次按下按鍵重新執行程序,謝謝
作者: 產檢簿    時間: 2018-12-2 21:30
求一個按鍵流水燈的程序和仿真圖
作者: lgh1231    時間: 2018-12-4 09:54
不要在流水燈程序里延時循環,這樣需要等運行完一遍了才能換向。可以用定時器的方式
作者: zhangh1997    時間: 2018-12-4 20:12
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

void delay(uint z);
void main()
{
        uchar  num,dat1,dat2;
        delay(500);
        P0=0;
        while(1)
        {
                dat1=0xfe;
                dat2=0x7f;
                for(num=0;num<7;num++)
                {
                        P1=dat1;          //初始化賦值
                        dat1=dat1<<1; //右移一位
                        delay(500);   //延時       
                }
                for(num=0;num<7;num++)
                {
                        P1=dat2;          //初始化賦值
                        dat2=dat2>>1; //右移一位
                        delay(500);   //延時       
                }
        }
void delay(uint z)
{
    uchar j;
    for(z;z>0;z--)
        for(j=200;j>0;j--);
作者: UriXie    時間: 2020-12-2 13:40
不倒翁.WZT 發表于 2017-1-9 09:21
我寫過這樣一個程序,發給你參考一下。

好久沒上過這個論壇啦,登上來之后看到這么多熱心的人,感激不盡
作者: UriXie    時間: 2020-12-2 13:42
zl2168 發表于 2017-5-7 17:37
實例7  鍵控流水循環燈先Proteus仿真一下,確認有效。

剛看到您的評論,好幾年了,感謝
作者: Hooligian    時間: 2020-12-16 18:46
加一個按鍵控制,用循環和延時就可以




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1