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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

寫一個單片機檢測人數的程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:260698 發表于 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);

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

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

使用道具 舉報

沙發
ID:258566 發表于 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訪問的對象被認為是小端(最低位在前)。這是sfr16類型的存儲格式, 但與int,long數據類型的存儲方式相反。使用sbit 訪問標準數據類型中的位時必須小心。
任何符號名稱都可以在sbit聲明中使用。等號右邊的表達式('=')指定符號名稱的絕對位地址。
  • 并不是所有的SFR都是可以位尋址的。只有那些地址可以被8整除的SFR才是可以位尋址的。SFR地址的低半字節必須是0或8.例如,0xA8和0xD0的SFR是可位尋址的,而0xC7和0xEB的SFR不是。要計算SFR位地址,請將位位置添加到SFR字節地址。因此,要訪問0xC8的SFR中的位6,SFR位地址將為0xCE(0xC8 + 6)。
  • 特殊功能位表示一個獨立的聲明類,不能與其他位聲明或位域互換。
  • 所述SBIT數據類型聲明可以被用來訪問與聲明的變量的各個位BDATA存儲器類型說明符。。
  • sbit變量不能在函數內聲明。它們必須在函數體外部聲明

評分

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

查看全部評分

回復

使用道具 舉報

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

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

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

使用道具 舉報

地板
ID:267813 發表于 2017-12-28 14:11 | 只看該作者
你需要認真分析一下  進出 的檢測流程 ,有很多種情況你都要考慮   常規的 就是標準  進出兩種,然后還有進或者出一半然后退回去了 , 兩個檢測位置也有關系   比如很近的時候   沒人的情況就是  00   有人通過時  就會變化00--10--11--01--00   搞清楚了每個狀態 檢測就不會出錯     不管你是用上升沿或者下降沿   或者狀態   檢測  能夠達到你要的目的就OK,
注意避免同一個人進出  出現處理   多加 或者 多減  的情況

評分

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

查看全部評分

回復

使用道具 舉報

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

我寫的程序還是不行,傳感器檢測到了信號,人數就是不變
回復

使用道具 舉報

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

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

思路很好,同感

評分

參與人數 2黑幣 +30 收起 理由
yoxi + 15 贊一個!
Sawardeakar + 15

查看全部評分

回復

使用道具 舉報

7#
ID:488460 發表于 2019-3-11 13:01 | 只看該作者
通過連接計數器吧,用T0和T1
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

10#
ID:502729 發表于 2019-5-14 15:53 | 只看該作者
樓主,解決問題沒有,我也遇到相同的問題,求解
回復

使用道具 舉報

11#
ID:398402 發表于 2019-11-26 21:39 來自觸屏版 | 只看該作者
wgb 發表于 2017-12-27 21:14
if(k3==0)
              {
                          while(k4!=0)

問題解決了嗎?
回復

使用道具 舉報

12#
ID:47286 發表于 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觸發 而不是用一個死延時去等
回復

使用道具 舉報

13#
ID:278179 發表于 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);
回復

使用道具 舉報

14#
ID:592807 發表于 2019-11-27 08:39 | 只看該作者
我感覺你第一個傳感被觸發后燈10ms就檢測第二個有點趕鴨子上架的感覺,比如我一只腳邁進店門下然后猶豫了一下,過了10ms你怎么處理。
回復

使用道具 舉報

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

要是一腳進門然后不想進就反身走了呢?建議循環2s或者3s等待。
回復

使用道具 舉報

16#
ID:650614 發表于 2019-11-27 10:41 | 只看該作者
這個不是這么簡單的吧。兩個傳感器恐怕不夠。
回復

使用道具 舉報

17#
ID:396245 發表于 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)                //等待人離開該傳感器
        }
}
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久国色av免费观看性色 | 在线观看特色大片免费网站 | 国产精品久久久久久影院8一贰佰 | 美女视频久久 | 国产欧美日韩二区 | 国产免费视频在线 | 欧美日韩久久 | 中文字幕av第一页 | 蜜桃在线视频 | 亚洲视频在线观看 | 一级毛片免费看 | 精品国产一区二区三区日日嗨 | 999精品视频 | 91免费版在线观看 | 国产美女在线观看 | 国产亚洲欧美在线视频 | 中文字幕国产日韩 | 亚洲精品福利在线 | 在线观看免费av片 | 亚洲 中文 欧美 日韩 在线观看 | 成人激情视频 | 一级在线| 毛片久久久 | www精品美女久久久tv | 久久久久久免费看 | 本道综合精品 | 久久不射网 | 欧美美女二区 | 麻豆久久 | 午夜精品久久久久久久久久久久久 | 一区二区三区四区在线视频 | 在线欧美亚洲 | 99精品国产一区二区三区 | 人人爽人人草 | 成人av观看 | 欧美成人a∨高清免费观看 91伊人 | 51ⅴ精品国产91久久久久久 | 午夜无码国产理论在线 | www.av在线| 欧美成人一区二区三区片免费 | 欧美国产亚洲一区二区 |