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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機紅外計數器 電路原理圖+PCB+源程序等資料分享

  [復制鏈接]
跳轉到指定樓層
樓主
基于51單片機制作的紅外計數器全套資料分享給大家 包含電路原理圖+PCB  源程序等資料

制作出來實物圖如下:



E18-D80NK-N是E18-D80NK的升級版。改動部分主要是內部電路板和外部連線。傳感器外部接線,在末端增加了杜邦頭,方便用戶使用。 E18-D80NK-N這是一種集發射與接收于一體的光電傳感器,發射光經過調制后發出,接收頭對反射光進行解調輸出。有效的避免了可見光的干擾。透鏡的使用,也使得這款傳感器最遠可以檢測80厘米距離的問題(由于紅外光的特性,不同顏色的物體,能探測的最大距離也有不同;白色物體最遠,黑色物體最近) 。
檢測障礙物的距離可以根據要求通過尾部的電位器旋鈕進行調節。 該傳感器具有探測距離遠、受可見光干擾小、價格便宜、易于裝配、使用方便等特點,可以廣泛應用于機器人避障、流水線計件等眾多場合。



紅外計數器電路原理圖如下:

DXP格式用            Altium designer Summer 軟件打開
protel99格式用       protel99SE 軟件打開
PDF格式用            PDF 軟件打開
Word格式用           Word 或用WPS 軟件打開
4種格式的原理圖都內容是一樣的  只是打開方式不同

  請注意,原理圖上有些接線的地方是用網絡標號連接的,意思就是名字相同的兩個點就是連接在一起的相當導線的作用,圖上所有的VCC要接在一起,所有的GND要接在一起。

請看原理圖焊接,不要看仿真圖焊接。

wrod格式里面的原理圖是復制出來的,有一點點變行變形,麻煩大家注意一下,盡量看其他三種格式的圖焊接,

如果論文里面的原理圖和原理圖文件夾內的圖不一樣的話,請大家以原理圖文件夾內的為準,原理圖文件夾的圖是和實物配套的,可以自己截圖或復制,然后粘貼到論文里面去。

51單片機紅外計數器元件清單:


開題報告:
一、選題的依據與意義
1.在電子技術飛速發展的今天,電子產品的人性化、智能化和自動化的發展已經越來越成熟了,其發展的前景不可估量。工業生產中常常需要自動統計產品的數量,計數器在這里發揮了的他的重要作用。基于單片機的光電計數器采用由單片機控制及光電傳感器原理實現對物件的數目統計。光電式傳感器是將光電信號轉化為電信號的一種傳感器,它的理論基礎是光電效應。
2.通過對光電計數器實物的設計和制作,全面提高自身的素質。在此設計過程中還要充分發揮自己的邏輯思維能力,自己的動手能力和遇到問題的解決能力。在設計過程中將會用到多門學科的理論知識,涉及到模擬電子技術知識、數字電子技術知識、廣電傳感技術知識、單片機技術及C語言編程知識和Protel繪圖知識等,是對我們以前所學知識的一個全面的復習和鞏固,更重要的是培養了自我分析問題和處理問題的能力。計數器在人們日常生活中也是非常普遍應用的,隨著智能化、自動化的不斷普及,人們急需一種自動計數的裝置,因此研究這一課題還是有著非常現實的意義。

  隨著科學技術的發展,如今的產品自動計數器很多都是采用非接觸式的計數觸發方式,早已開發出了多種型號的專用檢測芯片,而利用51系列單片機為控制單元、輔以多種外圍硬件搭配而成的計數裝置已成為現在自動計數器應用領域的潮流。而如何提高的計數器的實時性、抗干擾性、穩定性是現在國內外計數器生產廠家研究的主要課題。


如果沒有裝KEIL軟件
找到  .c   .h結尾的文件即為程序。打開方式選擇記事本打開

或者到開發資料里安裝KEIL軟件

單片機源程序如下:
  1. #include <reg52.h>                 //調用單片機頭文件
  2. #define uchar unsigned char  //無符號字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無符號整型 宏定義        變量范圍0~65535
  4. #include <intrins.h>


  5. bit flag_500ms;
  6. sbit beep = P1^4; //蜂鳴器IO口定義

  7. sbit hw_jin = P2^0;   //紅外傳感器IO口定義
  8. sbit hw_chu = P2^1;   //紅外傳感器IO口定義
  9. uchar a_a;
  10. uchar menu_1;                   //設置參數用

  11. uint num;  //計的數
  12. uint jin,chu;
  13. uchar set_num = 80; // 設置倒計時數的啟始值


  14. /***********************1ms延時函數*****************************/
  15. void delay_1ms(uint q)
  16. {
  17.         uint i,j;
  18.         for(i=0;i<q;i++)
  19.                 for(j=0;j<120;j++);
  20. }

  21. /*************定時器0初始化程序***************/
  22. void time_init()         
  23. {
  24.         EA   = 1;                   //開總中斷
  25.         TMOD = 0X01;          //定時器0、工作方式1
  26.         ET0  = 1;                  //開定時器0中斷
  27.         TR0  = 1;                  //允許定時器0定時
  28. }

  29. sbit rs=P1^0;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
  30. sbit rw=P1^1;         //寄存器選擇信號 H:數據寄存器          L:指令寄存器
  31. sbit e =P1^2;         //片選信號   下降沿觸發

  32. /********************************************************************
  33. * 名稱 : delay_uint()
  34. * 功能 : 小延時。
  35. * 輸入 : 無
  36. * 輸出 : 無
  37. ***********************************************************************/
  38. void delay_uint(uint q)
  39. {
  40.         while(q--);
  41. }

  42. /********************************************************************
  43. * 名稱 : write_com(uchar com)
  44. * 功能 : 1602命令函數
  45. * 輸入 : 輸入的命令值
  46. * 輸出 : 無
  47. ***********************************************************************/
  48. void write_com(uchar com)
  49. {
  50.         e=0;
  51.         rs=0;
  52.         rw=0;
  53.         P0=com;
  54.         delay_uint(25);
  55.         e=1;
  56.         delay_uint(100);
  57.         e=0;
  58. }

  59. /********************************************************************
  60. * 名稱 : write_data(uchar dat)
  61. * 功能 : 1602寫數據函數
  62. * 輸入 : 需要寫入1602的數據
  63. * 輸出 : 無
  64. ***********************************************************************/
  65. void write_data(uchar dat)
  66. {
  67.         e=0;
  68.         rs=1;
  69.         rw=0;
  70.         P0=dat;
  71.         delay_uint(25);
  72.         e=1;
  73.         delay_uint(100);
  74.         e=0;        
  75. }


  76. /***********************lcd1602上顯示兩位十進制數************************/
  77. void write_sfm4(uchar hang,uchar add,uint date)
  78. {
  79.         if(hang==1)   
  80.                 write_com(0x80+add);
  81.         else
  82.                 write_com(0x80+0x40+add);
  83.         write_data(0x30+date/1000%10);
  84.         write_data(0x30+date/100%10);
  85.         write_data(0x30+date/10%10);
  86.         write_data(0x30+date%10);        
  87. }

  88. /***********************lcd1602上顯示這字符函數************************/
  89. void write_string(uchar hang,uchar add,uchar *p)
  90. {
  91.         if(hang==1)   
  92.                 write_com(0x80+add);
  93.         else
  94.                 write_com(0x80+0x40+add);
  95.                 while(1)                                                                                                                 
  96.                 {
  97.                         if(*p == '\0')  break;
  98.                         write_data(*p);
  99.                         p++;
  100.                 }        
  101. }

  102. /***********************lcd1602初始化設置************************/
  103. void init_1602()        //lcd1602初始化
  104. {
  105.         write_com(0x38);        
  106.         write_com(0x0c);
  107.         write_com(0x06);
  108.         delay_uint(1000);
  109.         write_string(1,0,"     Z:0000       ");        
  110.         write_string(2,0," J:0000  C:0000   ");        
  111.         write_sfm4(2,1,jin);  //顯示人數
  112.         write_sfm4(1,6,num);  //顯示人數
  113.         write_sfm4(2,11,chu);  //顯示人數
  114. }


  115. /********************獨立按鍵程序*****************/
  116. uchar key_can;         //按鍵值

  117. void key()             //獨立按鍵程序
  118. {
  119.         static uchar key_new;
  120.         key_can = 20;               //按鍵值還原
  121.         P3 |= 0xf0;
  122.         if((P3 & 0xf0) != 0xf0)                //按鍵按下
  123.         {
  124.                 delay_1ms(1);                     //按鍵消抖動
  125.                 if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
  126.                 {                                                //確認是按鍵按下
  127.                         key_new = 0;
  128.                         switch(P3 & 0xf0)
  129.                         {
  130.                                 case 0xd0: key_can = 1; break;           //得到k1鍵值
  131.                                 case 0xb0: key_can = 2; break;           //得到K2鍵值
  132.                                 case 0x70: key_can = 3; break;           //得到k3鍵值
  133.                         }
  134.                 }                        
  135.         }
  136.         else
  137.                 key_new = 1;        
  138. }

  139. /****************按鍵處理數碼管顯示函數***************/
  140. void key_with()
  141. {
  142.         if(key_can == 1)        //設置鍵
  143.         {
  144.                 menu_1 ++;
  145.                 if(menu_1 >= 2)
  146.                 {
  147.                         menu_1 = 0;
  148.                         init_1602();  //lcd1602初始化                        
  149.                 }
  150.                 if(menu_1 == 1)                                 //初始化顯示
  151.                 {
  152.                         write_string(1,0,"  SET Z Alarm    ");
  153.                         write_string(2,0,"                 ");
  154.                         write_sfm4(2,6,set_num);  //顯示人數
  155.                 }
  156.         }
  157.         if(menu_1 == 0)                           //倒計時器按鍵操作開始 暫停
  158.         {                 
  159.                 if(key_can == 2)  //清零
  160.                 {
  161.                         num = 0;
  162.                         jin = 0;
  163.                         chu = 0;
  164.                         write_sfm4(2,3,jin);  //顯示人數
  165.                         write_sfm4(1,7,num);  //顯示人數
  166.                         write_sfm4(2,11,chu);  //顯示人數
  167.                 }
  168.                
  169.         }
  170.         if(menu_1 == 1)                                //設置倒計時器開始數
  171.         {
  172.                 if(key_can == 2)
  173.                 {
  174.                         set_num ++ ;                // 設置數加
  175.                         if(set_num > 9999)
  176.                                 set_num = 9999;        //最大加到99        
  177.                 }
  178.                 if(key_can == 3)
  179.                 {
  180.                         set_num -- ;                // 設置數減
  181.                         if(set_num <= 1)
  182.                                 set_num = 1;        //最大減到1
  183.                 }
  184.                 write_sfm4(2,6,set_num);  //顯示人數
  185.                 write_com(0x80+0x40+6);             //將光標移動到秒個位
  186.                 write_com(0x0f);                    //顯示光標并且閃爍        
  187.         }
  188.         beep = 0;          //打開蜂鳴器
  189.         delay_1ms(50);
  190.         beep = 1;          //關閉蜂鳴器
  191.         
  192. }  

  193. /******************紅外計數**********************/           
  194. void hw_jin_dis()        //紅外計數
  195. {
  196.         if(hw_jin == 0)                //計數
  197.         {
  198.                 delay_1ms(1);                     //消抖動
  199.                 if(hw_jin == 0)
  200.                 {                                                //確認
  201.                         jin ++;
  202.                         if(jin >= 9999)
  203.                                 jin = 9999;
  204.                         num  = jin - chu;          //計算總人數
  205.                         if(menu_1 == 0)
  206.                         {
  207.                                 write_sfm4(2,3,jin);  //顯示人數
  208.                                 write_sfm4(1,7,num);  //顯示人數
  209.                         }
  210.                 }                        
  211.         }
  212. }

  213. /******************紅外計數**********************/           
  214. void hw_chu_dis()        //紅外計數
  215. {
  216.         if(hw_chu == 0)                //計數
  217.         {
  218.                 delay_1ms(1);                     //消抖動
  219.                 if(hw_chu == 0)
  220.                 {                                                //確認
  221.                         if(jin > chu)
  222.                         chu ++;
  223.                         if(chu >= 9999)
  224.                                 chu = 9999;
  225.                         num  = jin - chu;          //計算總人數
  226.                         if(menu_1 == 0)
  227.                         {
  228.                                 write_sfm4(2,11,chu);  //顯示人數
  229.                                 write_sfm4(1,7,num);  //顯示人數
  230.                         }
  231.                 }                        
  232.         }
  233. }


  234. /******************主程序**********************/           
  235. void main()
  236. {
  237.         beep = 0;                                    //開機蜂鳴器叫一聲
  238.         delay_1ms(100);
  239.         P0 = P1 = P2 = P3 = 0xff;   //初始化IO口
  240.         time_init();
  241.         init_1602();        //lcd1602初始化
  242.         while(1)
  243.         {
  244.                 key();                           //按鍵掃描函數
  245.                 if(key_can < 10)
  246.                 {
  247.                         key_with();    //按鍵執行函數
  248.                 }        
  249.                 hw_jin_dis();        //紅外計數        
  250.                 hw_chu_dis();        //紅外計數        
  251.                 if(menu_1 == 0)         //掃描顯示倒計時數
  252.                 {         
  253.                         if(flag_500ms == 1)
  254.                         {
  255.                                 flag_500ms = 0;
  256.                                 if(num >= set_num)
  257.                                         beep = ~beep;    //報警
  258.                                 else
  259.                                 {
  260. ……………………

  261. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼


所有資料51hei提供下載:

紅外計數器 1602.rar (9.83 MB, 下載次數: 838)


評分

參與人數 4黑幣 +33 收起 理由
腰填越 + 12 共享資料的黑幣獎勵!
liudongning + 5 共享資料的黑幣獎勵!
zqy181818 + 11 共享資料的黑幣獎勵!
三思而后行 + 5 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:317061 發表于 2018-4-27 09:23 | 只看該作者
為啥下載文件說發現威脅,無法下載……
回復

使用道具 舉報

板凳
ID:322968 發表于 2018-5-5 18:11 | 只看該作者
我是新手,沒有5黑幣
回復

使用道具 舉報

地板
ID:322968 發表于 2018-5-6 08:30 | 只看該作者
姚葉 發表于 2018-4-27 09:23
為啥下載文件說發現威脅,無法下載……

我也是這樣
回復

使用道具 舉報

5#
ID:312577 發表于 2018-5-10 08:39 來自手機 | 只看該作者
如果只用一個紅外發射裝置能行嗎
回復

使用道具 舉報

6#
ID:347182 發表于 2018-6-7 21:24 | 只看該作者
請問一下把那個紅外發射的改成用555定時器紅外對管可以嗎?
回復

使用道具 舉報

7#
ID:347685 發表于 2018-6-11 09:06 | 只看該作者
就想用一個數碼管  但是不會改
回復

使用道具 舉報

8#
ID:305328 發表于 2018-7-7 19:42 | 只看該作者
謝謝樓主分享 很有用
回復

使用道具 舉報

9#
ID:369693 發表于 2018-9-16 18:32 | 只看該作者
問一下樓主這個的封裝啊...萌新想做一個實物但是不知道怎么買材料
回復

使用道具 舉報

10#
ID:399785 發表于 2018-9-19 01:03 | 只看該作者
有使用LCD12864的紅外計數器方案嗎,有償。
回復

使用道具 舉報

11#
ID:412294 發表于 2018-10-19 15:45 | 只看該作者
大佬,可以私法這個文件給我嗎?我想對你這個功能進行學習,麻煩你了
回復

使用道具 舉報

12#
ID:337813 發表于 2018-10-21 23:07 | 只看該作者
非常感謝您的無私分享,謝謝你!!!
回復

使用道具 舉報

13#
ID:230847 發表于 2018-10-28 15:13 | 只看該作者
謝謝樓主
回復

使用道具 舉報

14#
ID:419186 發表于 2018-12-10 11:37 | 只看該作者
沒有仿真圖嘢
回復

使用道具 舉報

15#
ID:447403 發表于 2018-12-16 19:13 | 只看該作者
樓主分享一下唄!627826109@qq.com
回復

使用道具 舉報

16#
ID:544840 發表于 2019-7-9 11:19 | 只看該作者
有仿真圖嗎
回復

使用道具 舉報

17#
ID:243394 發表于 2019-7-13 09:30 | 只看該作者
謝樓主分享 很有用
回復

使用道具 舉報

18#
ID:611837 發表于 2019-9-15 22:57 | 只看該作者
下載可行嗎?
回復

使用道具 舉報

19#
ID:611837 發表于 2019-9-16 00:19 來自手機 | 只看該作者
為什么下載了,確實損壞的。
回復

使用道具 舉報

20#
ID:567779 發表于 2019-9-24 15:36 | 只看該作者
有仿真圖嗎
回復

使用道具 舉報

21#
ID:614724 發表于 2019-9-24 19:32 | 只看該作者
謝謝樓主
回復

使用道具 舉報

22#
ID:617755 發表于 2019-9-29 20:20 來自手機 | 只看該作者
我也想要
回復

使用道具 舉報

23#
ID:705854 發表于 2020-3-16 09:51 | 只看該作者
太好了,終于找到參考程序了。
回復

使用道具 舉報

24#
ID:362692 發表于 2020-3-16 17:04 來自手機 | 只看該作者
其實需要做仿真的也可以模擬,用button
回復

使用道具 舉報

25#
ID:724464 發表于 2020-4-9 22:09 | 只看該作者
下載好壓縮包了,還沒有移植到自己的開發板上,目前有兩個問題請教一下大神。1,程序里面我沒有找到定義1602的管口函數,是不需要寫,還是寫在子函數里面了我沒看懂?2,紅外傳感器可以移植成HC-SR501嗎?需要做什么改動?
回復

使用道具 舉報

26#
ID:724464 發表于 2020-4-9 22:25 | 只看該作者
不好意思,愚昧了。想問一下。在子函數中給P0整體定義一個void write_data(uchar dat) P0=dat。這樣子的寫法是不是單純的給P0設置一個液晶供電位用的,沒有其他意義,因為uchar而拉高電平,這樣液晶有電了就好,不做IO口使用。液晶需要的是E\RS\RW口交互。麻煩大神說一下啊,我好難。。。
回復

使用道具 舉報

27#
ID:724464 發表于 2020-4-14 02:45 | 只看該作者
感謝老哥的分享,我已經成功跑起來了,但是你給出的程序代碼有小問題。液晶顯示的數位錯了,我看了一下,改好以后就不會出現只顯示000000的情況了,因為在初始化的時候,數位錯誤,導致的問題。
回復

使用道具 舉報

28#
ID:782564 發表于 2020-6-20 12:36 | 只看該作者
對學習非常的有用
回復

使用道具 舉報

29#
ID:845512 發表于 2020-11-23 15:26 | 只看該作者
為學才學 發表于 2020-4-14 02:45
感謝老哥的分享,我已經成功跑起來了,但是你給出的程序代碼有小問題。液晶顯示的數位錯了,我看了一下,改 ...

請問要怎么改才能正常工作
回復

使用道具 舉報

30#
ID:845512 發表于 2020-11-23 19:21 | 只看該作者
顯示人數與初始化的位置沖突了,這個程序小毛病很多
回復

使用道具 舉報

31#
ID:936164 發表于 2021-6-10 18:09 | 只看該作者
電容和二極管的封裝是多少啊,求大佬告知
回復

使用道具 舉報

32#
ID:467498 發表于 2021-7-12 20:52 | 只看該作者

非常感謝您的無私分享
回復

使用道具 舉報

33#
ID:909393 發表于 2021-11-28 00:51 來自手機 | 只看該作者
沫龍淚 發表于 2020-11-23 19:21
顯示人數與初始化的位置沖突了,這個程序小毛病很多

你好  請問這個程序應該修改哪個地方比較好  新手小白   希望大佬可以給個詳細點的指點    非常感謝!
回復

使用道具 舉報

34#
ID:989057 發表于 2021-12-7 14:04 | 只看該作者
為學才學 發表于 2020-4-14 02:45
感謝老哥的分享,我已經成功跑起來了,但是你給出的程序代碼有小問題。液晶顯示的數位錯了,我看了一下,改 ...

請問可以給個完整的代碼嗎 小白一枚 想去學習
回復

使用道具 舉報

35#
ID:1098777 發表于 2023-11-6 22:31 | 只看該作者
請問仿真程序利用k5能跑起來嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久久久 | 成人av免费 | 秋霞影院一区二区 | 妞干网福利视频 | 欧美国产中文字幕 | 91精品久久久久久久久 | 一区二区国产在线观看 | 亚洲一区播放 | av电影一区二区 | 国产精品1区2区 | 在线观看视频91 | 久久久久亚洲精品 | 久久久久久久久久久久91 | 亚洲欧美国产毛片在线 | 日韩视频一区二区 | 午夜精品在线 | 精品一区免费 | 一级女毛片 | 国产乱码精品一区二区三区忘忧草 | 国产精品久久久亚洲 | 韩日一区二区三区 | 国产成人综合网 | 欧美日韩一区二区在线 | 黄色毛片在线看 | 在线观看中文字幕 | 538在线精品 | 三级在线免费 | 黄色a三级| 福利视频网 | 成人日韩 | 成人久草 | 男女视频在线观看免费 | 特级毛片www| 欧美日本韩国一区二区三区 | 爱爱综合网 | 涩爱av一区二区三区 | 欧美国产免费 | 91免费在线看 | 五月婷六月丁香 | 久久九精品 | 日韩成人精品在线 |