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

標題: 寫一個單片機檢測人數的程序 [打印本頁]

作者: wgb    時間: 2017-12-27 18:25
標題: 寫一個單片機檢測人數的程序
利用兩個光電傳感器,信號線接到單片機的p2.0和p2.1,人數初始值為rs=0,當2.0檢測到信號,然后2.1檢測到信號,此時人數加一,反之人數減一。        if(P2^0==0)
              {
                  delay(10);
                  if(P2^1==0)
                  {         rs++;         }
                  }

      if(P2^1==0)
              {
                  delay(10);
                  if(P2^0==0)
                  {         rs--; }
                  }
                  Write_LCD_command(0x80);
                  Write_LCD_command(0x80);
                  Write_LCD_data('r');
                  Write_LCD_data('s');
                  Write_LCD_data('=');
                  display(0x83,rs);

這是我自己寫的,但是光電傳感器檢測到信號后,人數并沒有改變,請教大佬,我是小白。


作者: cccc888    時間: 2017-12-27 19:30
硬件接口定義不是這樣的。

參見SBIT類型定義了一個特殊功能寄存器(SFR)內的位。它以下列方式之一使用:sbit name = sfr-name ^ bit-position ;sbit name = sfr-address ^ bit-position ;sbit name = sbit-address ;

name是位的名稱。
SFR name是以前定義的SFR的名稱。
位位置是SFR內位的位置。
SFR地址是SFR的地址。
SBIT地址是SFR位的地址。

任何符號名稱都可以在sbit聲明中使用。等號右邊的表達式('=')指定符號名稱的絕對位地址。

作者: wgb    時間: 2017-12-27 21:14
cccc888 發表于 2017-12-27 19:30
硬件接口定義不是這樣的。

參見SBIT類型定義了一個特殊功能寄存器(SFR)內的位。它以下列方式之一使用 ...

if(k3==0)
              {
                          while(k4!=0)
                          {
                          delay(10);
                          }
                          rs++;
                  }
這樣還是不行
作者: zzzxxxccc    時間: 2017-12-28 14:11
你需要認真分析一下  進出 的檢測流程 ,有很多種情況你都要考慮   常規的 就是標準  進出兩種,然后還有進或者出一半然后退回去了 , 兩個檢測位置也有關系   比如很近的時候   沒人的情況就是  00   有人通過時  就會變化00--10--11--01--00   搞清楚了每個狀態 檢測就不會出錯     不管你是用上升沿或者下降沿   或者狀態   檢測  能夠達到你要的目的就OK,
注意避免同一個人進出  出現處理   多加 或者 多減  的情況

作者: wgb    時間: 2017-12-28 17:52
zzzxxxccc 發表于 2017-12-28 14:11
你需要認真分析一下  進出 的檢測流程 ,有很多種情況你都要考慮   常規的 就是標準  進出兩種,然后還有進 ...

我寫的程序還是不行,傳感器檢測到了信號,人數就是不變
作者: 刀刀見紅    時間: 2019-1-31 02:44
cccc888 發表于 2017-12-27 19:30
硬件接口定義不是這樣的。

參見SBIT類型定義了一個特殊功能寄存器(SFR)內的位。它以下列方式之一使用 ...

思路很好,同感
作者: 1114581577    時間: 2019-3-11 13:01
通過連接計數器吧,用T0和T1
作者: jinsheng7533967    時間: 2019-3-11 14:00
首先要肯定的是你思路很好,再在在基礎上加一把勁就很好了
作者: 隨風飄遠    時間: 2019-3-11 14:11
你這個代碼能編譯通過嗎?  位操作要加位定義指令的吧 (sbit fm=P2^3; )
作者: wooklam    時間: 2019-5-14 15:53
樓主,解決問題沒有,我也遇到相同的問題,求解

作者: ydhnhx521    時間: 2019-11-26 21:39
wgb 發表于 2017-12-27 21:14
if(k3==0)
              {
                          while(k4!=0)

問題解決了嗎?
作者: dzbj    時間: 2019-11-27 00:04
if(P2^1==0)
{
   delay(10);
   if(P2^0==0)
   {         rs--; }
}

你這段的意思是 P2.1觸發后 等待10ms 如果p2.0也觸發 則人數-1 問題是 你怎么知道10ms后p2.0會斷開 如果11ms呢 你的程序已經出去了 rs不會減 不管你這個delay(10)是多少 理論上都不行吧 人又不是機器 移動哪有那么準確

較為妥善的做法是p2.1觸發后標記一下 只要p2.1狀態不變就一直等p2.0觸發 而不是用一個死延時去等
作者: huwqly    時間: 2019-11-27 04:13
12樓正解,修改如下:
另外提示一個不嚴謹的地方(人數初始值為rs=0,當2.0檢測到信號,然后2.1檢測到信號,此時人數加一,反之人數減一),初始值為rs=0,此時如果人數減一,你該如何處理?
bit BP20,BP21;

if(P2^0==0)BP20=1;
if(BP20==1)
              {
                  if(P2^1==0)
                  {  BP20=0;       rs++;         }
                  }

      if(P2^1==0)BP21=1;
if(BP21==1)
              {
                  if(P2^0==0)
                  {  BP21=0;       rs--; }
                  }
                  Write_LCD_command(0x80);
                  Write_LCD_command(0x80);
                  Write_LCD_data('r');
                  Write_LCD_data('s');
                  Write_LCD_data('=');
                  display(0x83,rs);
作者: 黃youhui    時間: 2019-11-27 08:39
我感覺你第一個傳感被觸發后燈10ms就檢測第二個有點趕鴨子上架的感覺,比如我一只腳邁進店門下然后猶豫了一下,過了10ms你怎么處理。

作者: 黃youhui    時間: 2019-11-27 08:44
dzbj 發表于 2019-11-27 00:04
if(P2^1==0)
{
   delay(10);

要是一腳進門然后不想進就反身走了呢?建議循環2s或者3s等待。
作者: yanfazhongxin    時間: 2019-11-27 10:41
這個不是這么簡單的吧。兩個傳感器恐怕不夠。
作者: SroneBridge    時間: 2019-11-27 18:22
給你寫了進入的,退出的自己改一下,原理一樣的。
你的思路是對的,但是忽略了一些細節。按你的程序,如果兩個傳感器都被擋住了,你思考一下你的程序如何將如何運行就能理解了。

if(P2^0==0)
{
        while(P2^0==0 && P2^1==1);        //等待退出該傳感器或人進入下一個傳感器
        if(P2^1==0)                        //人進入了下一個傳感器?
        {
                //不考慮進入第二個傳感器又退回去的情況
                rs++;                        //進入下一個傳感器,計數加1
                while(P2^1==0)                //等待人離開該傳感器
        }
}





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