找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5873|回復(fù): 16
打印 上一主題 下一主題
收起左側(cè)

寫一個(gè)單片機(jī)檢測(cè)人數(shù)的程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
#
ID:260698 發(fā)表于 2017-12-27 18:25 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
利用兩個(gè)光電傳感器,信號(hào)線接到單片機(jī)的p2.0和p2.1,人數(shù)初始值為rs=0,當(dāng)2.0檢測(cè)到信號(hào),然后2.1檢測(cè)到信號(hào),此時(shí)人數(shù)加一,反之人數(shù)減一。        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);

這是我自己寫的,但是光電傳感器檢測(cè)到信號(hào)后,人數(shù)并沒(méi)有改變,請(qǐng)教大佬,我是小白。

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

使用道具 舉報(bào)

16#
ID:396245 發(fā)表于 2019-11-27 18:22 | 只看該作者
給你寫了進(jìn)入的,退出的自己改一下,原理一樣的。
你的思路是對(duì)的,但是忽略了一些細(xì)節(jié)。按你的程序,如果兩個(gè)傳感器都被擋住了,你思考一下你的程序如何將如何運(yùn)行就能理解了。

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

使用道具 舉報(bào)

15#
ID:650614 發(fā)表于 2019-11-27 10:41 | 只看該作者
這個(gè)不是這么簡(jiǎn)單的吧。兩個(gè)傳感器恐怕不夠。
回復(fù)

使用道具 舉報(bào)

14#
ID:592807 發(fā)表于 2019-11-27 08:44 | 只看該作者
dzbj 發(fā)表于 2019-11-27 00:04
if(P2^1==0)
{
   delay(10);

要是一腳進(jìn)門然后不想進(jìn)就反身走了呢?建議循環(huán)2s或者3s等待。
回復(fù)

使用道具 舉報(bào)

13#
ID:592807 發(fā)表于 2019-11-27 08:39 | 只看該作者
我感覺(jué)你第一個(gè)傳感被觸發(fā)后燈10ms就檢測(cè)第二個(gè)有點(diǎn)趕鴨子上架的感覺(jué),比如我一只腳邁進(jìn)店門下然后猶豫了一下,過(guò)了10ms你怎么處理。
回復(fù)

使用道具 舉報(bào)

12#
ID:278179 發(fā)表于 2019-11-27 04:13 | 只看該作者
12樓正解,修改如下:
另外提示一個(gè)不嚴(yán)謹(jǐn)?shù)牡胤剑ㄈ藬?shù)初始值為rs=0,當(dāng)2.0檢測(cè)到信號(hào),然后2.1檢測(cè)到信號(hào),此時(shí)人數(shù)加一,反之人數(shù)減一),初始值為rs=0,此時(shí)如果人數(shù)減一,你該如何處理?
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);
回復(fù)

使用道具 舉報(bào)

11#
ID:47286 發(fā)表于 2019-11-27 00:04 | 只看該作者
if(P2^1==0)
{
   delay(10);
   if(P2^0==0)
   {         rs--; }
}

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

較為妥善的做法是p2.1觸發(fā)后標(biāo)記一下 只要p2.1狀態(tài)不變就一直等p2.0觸發(fā) 而不是用一個(gè)死延時(shí)去等
回復(fù)

使用道具 舉報(bào)

10#
ID:398402 發(fā)表于 2019-11-26 21:39 來(lái)自手機(jī) | 只看該作者
wgb 發(fā)表于 2017-12-27 21:14
if(k3==0)
              {
                          while(k4!=0)

問(wèn)題解決了嗎?
回復(fù)

使用道具 舉報(bào)

9#
ID:502729 發(fā)表于 2019-5-14 15:53 | 只看該作者
樓主,解決問(wèn)題沒(méi)有,我也遇到相同的問(wèn)題,求解
回復(fù)

使用道具 舉報(bào)

8#
ID:319023 發(fā)表于 2019-3-11 14:11 | 只看該作者
你這個(gè)代碼能編譯通過(guò)嗎?  位操作要加位定義指令的吧 (sbit fm=P2^3; )
回復(fù)

使用道具 舉報(bào)

7#
ID:21069 發(fā)表于 2019-3-11 14:00 | 只看該作者
首先要肯定的是你思路很好,再在在基礎(chǔ)上加一把勁就很好了
回復(fù)

使用道具 舉報(bào)

6#
ID:488460 發(fā)表于 2019-3-11 13:01 | 只看該作者
通過(guò)連接計(jì)數(shù)器吧,用T0和T1
回復(fù)

使用道具 舉報(bào)

5#
ID:469417 發(fā)表于 2019-1-31 02:44 | 只看該作者
cccc888 發(fā)表于 2017-12-27 19:30
硬件接口定義不是這樣的。

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

思路很好,同感

評(píng)分

參與人數(shù) 2黑幣 +30 收起 理由
yoxi + 15 贊一個(gè)!
Sawardeakar + 15

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

地板
ID:260698 發(fā)表于 2017-12-28 17:52 | 只看該作者
zzzxxxccc 發(fā)表于 2017-12-28 14:11
你需要認(rèn)真分析一下  進(jìn)出 的檢測(cè)流程 ,有很多種情況你都要考慮   常規(guī)的 就是標(biāo)準(zhǔn)  進(jìn)出兩種,然后還有進(jìn) ...

我寫的程序還是不行,傳感器檢測(cè)到了信號(hào),人數(shù)就是不變
回復(fù)

使用道具 舉報(bào)

板凳
ID:267813 發(fā)表于 2017-12-28 14:11 | 只看該作者
你需要認(rèn)真分析一下  進(jìn)出 的檢測(cè)流程 ,有很多種情況你都要考慮   常規(guī)的 就是標(biāo)準(zhǔn)  進(jìn)出兩種,然后還有進(jìn)或者出一半然后退回去了 , 兩個(gè)檢測(cè)位置也有關(guān)系   比如很近的時(shí)候   沒(méi)人的情況就是  00   有人通過(guò)時(shí)  就會(huì)變化00--10--11--01--00   搞清楚了每個(gè)狀態(tài) 檢測(cè)就不會(huì)出錯(cuò)     不管你是用上升沿或者下降沿   或者狀態(tài)   檢測(cè)  能夠達(dá)到你要的目的就OK,
注意避免同一個(gè)人進(jìn)出  出現(xiàn)處理   多加 或者 多減  的情況

評(píng)分

參與人數(shù) 1黑幣 +70 收起 理由
admin + 70 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:260698 發(fā)表于 2017-12-27 21:14 | 只看該作者
cccc888 發(fā)表于 2017-12-27 19:30
硬件接口定義不是這樣的。

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

if(k3==0)
              {
                          while(k4!=0)
                          {
                          delay(10);
                          }
                          rs++;
                  }
這樣還是不行
回復(fù)

使用道具 舉報(bào)

樓主
ID:258566 發(fā)表于 2017-12-27 19:30 | 只看該作者
硬件接口定義不是這樣的。

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

name是位的名稱。
SFR name是以前定義的SFR的名稱。
位位置是SFR內(nèi)位的位置。
SFR地址是SFR的地址。
SBIT地址是SFR位的地址。

  • 注意
  • 存儲(chǔ)使用sbit訪問(wèn)的對(duì)象被認(rèn)為是小端(最低位在前)。這是sfr16類型的存儲(chǔ)格式, 但與int,long數(shù)據(jù)類型的存儲(chǔ)方式相反。使用sbit 訪問(wèn)標(biāo)準(zhǔn)數(shù)據(jù)類型中的位時(shí)必須小心。
任何符號(hào)名稱都可以在sbit聲明中使用。等號(hào)右邊的表達(dá)式('=')指定符號(hào)名稱的絕對(duì)位地址。
  • 并不是所有的SFR都是可以位尋址的。只有那些地址可以被8整除的SFR才是可以位尋址的。SFR地址的低半字節(jié)必須是0或8.例如,0xA8和0xD0的SFR是可位尋址的,而0xC7和0xEB的SFR不是。要計(jì)算SFR位地址,請(qǐng)將位位置添加到SFR字節(jié)地址。因此,要訪問(wèn)0xC8的SFR中的位6,SFR位地址將為0xCE(0xC8 + 6)。
  • 特殊功能位表示一個(gè)獨(dú)立的聲明類,不能與其他位聲明或位域互換。
  • 所述SBIT數(shù)據(jù)類型聲明可以被用來(lái)訪問(wèn)與聲明的變量的各個(gè)位BDATA存儲(chǔ)器類型說(shuō)明符。。
  • sbit變量不能在函數(shù)內(nèi)聲明。它們必須在函數(shù)體外部聲明

評(píng)分

參與人數(shù) 1黑幣 +70 收起 理由
admin + 70 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表