脉冲计数器单片机c语言编程,基于单片机的光电计数器
基于單片機的光電計數器
一、設計題目:
基于單片機的光電計數器
二、設計要求:
1,數碼管可以顯示產品個數(0-99),自由設定產品報警個數(比如 ,10),當產品數目是10的個數時,發出報警(蜂鳴器響)。
2,獨立設計電路,應包括單片機小系統、紅外光電開關、數碼管顯? 示部分。
摘? 要
本文所設計的計數器抗干擾性好,可靠性高。可用于測量商場、電影院、博物館、展覽觀、車站、碼頭、銀行等公共場所的人員數量及人員流通數量,同時絲毫不會侵犯到被測人員的個人隱私。該產品應用廣泛,常用于測量流水線上的產品的數量,以及可檢查產品有無缺損。
本電路的指導思想是設計兩電路光控電路,一路放置在門外,另一門放置在門內。當有人通過門口時(無論是進入或走出房間),都會先觸發一個光控電路,再觸發另一個光控電路,根據光控電路產生觸發脈沖的先后順序,判斷來人是進入還是離開,當有人進入時令計數器進行加計數,當有人離開時令計數器進行減計數;要求計數器的最大計數容量是99人,并用數碼管顯示數字。
該系統具有結構簡單、成本低廉、計數準確的特點,適用于本次設計的系統。該光電計數器只有兩位數,如果二位數不滿足需要也可通過級聯可以擴展為四位,甚至多位。
關鍵詞:單片機、外部中斷、報警器
正? 文
一、題目分析
本電路的指導思想是設計一電路光控電路,放置在流水線旁。當有產品通過光電門時,都會先觸發光控電路,根據光控電路產生觸發脈沖令計數器進行加計數,要求計數器的最大計數容量是99個,并用數碼管顯示數字。并在計數每次達到10時報警。
二、整體構思
系統的組成與結構:
圖2-1 光電計數器系統結構圖
整個光電計數器系統是由光電傳感電路、AT89C52單片機系統電路、顯示計數電路、報警電路五個部分組成的,如圖2-1所示。光電傳感電路把被計數的物體的變化轉換成電信號,由顯示計數電路計數,再由數碼顯示管顯示,當達到設定的報警值時,報警電路發出報警。
三、具體實現:
1,光電開關
用開關模擬光電傳感器采集外部信號。
2,復位電路
單片機小系統采用上電自動復位和手動按鍵復位兩種方式實現系統的復位操作。上電復位要求接通電源后,自動實現復位操作。手動復位要求在電源接通的條件下,在單片機運行期間,用按鈕開關操作使單片機復位。其結構如圖中R1、C3和K1。上電自動復位通過電容C1充電來實現。手動按鍵復位是通過按鍵將R3與VCC接通來實現。如圖示兩種復位方式:
?
圖 上電復位電路?????????? ???圖手動復位電路
3,???? 中斷方式計數:
由于光電技術電路需要在數碼管上顯示通過光電門的產品數量,因此可以在內部存儲器空間定義它的顯示緩存區,用來暫存數碼管顯示的當前值。
系統在初始化程序之中,設置外部中斷0產生中斷標志T0,并初始化值為0。當有外部中產生時,相應的中斷置1。
當外部中斷0產生中斷時,在主程序中掃描T0是否為1。當T0為1時,調用光電計數子程序,將顯示暫存變量加1,。每當通過光電門的產品數量達到10時,蜂鳴器響一聲,并清零緩存,繼續計數。
4, 顯示部分:
該系統要求顯示計數功能。基于上述原因,我們考慮了三種方案:
方案一:完全采用 LCD顯示。完全采用 LCD顯示可顯示有限的符號和數碼字苻,能滿足設計的需要。
方案二:完全采用點陣式 LCD顯示。這種方案實現復雜,且須完成大量的軟件工作;但功能強大,可方便的顯示各種英文字符,漢字,圖形等,也可滿足設計的需要。
方案三:采用 LED顯示,LED只顯示數字輸出。這種方案既滿足系統功能要求,又簡單,成本有低。
權衡利弊,第三種方案的優缺點,我們決定采用方案三來實現數字顯示。系統中采用的數碼管為共陰極數碼管,顯示電路圖的電路如圖3-3所示。
圖3-3顯示電路圖
5,報警部分:
當計數器計數到"00"時應使計數器復位并置數"99"。但這時將不會顯示"00",而計數器從"01"直接復位。由于"00"是一個過渡時期,不會顯示出來,所以本電路采用"10"作為計數器復位脈沖。當計數器由"00"跳變到"10''時,從輸出低電平使計數器置數,并保持繼續計數,蜂鳴器發出一聲報警聲。當產品經過光電門時,Rs觸發器翻轉輸出高電平,計數器開始計數。若按下S2,計數器立即復位。報警電路的電路圖如圖3-4所示。
圖3-4 報警電路圖
6,軟件程序的設計
系統上電初始化之后,主程序不斷地掃描鍵盤和顯示程序;同時判斷外部中斷標志是否有效。如果外部中斷標志有效,則調用光電計數處理子程序,刷新數碼管的顯示值
7,系統控制主程序設計
定義蜂鳴器接口P3.7,初始狀態為0,蜂鳴器不報警,當有高電平觸發P3.7時,蜂鳴器開始報警。當下一個脈沖是1時外部中斷T0則產生中斷,計數器停止加計數。
8,系統初始化子程序設計:
設定外部中斷T0的標志位置0即中斷處于關閉狀態,蜂鳴器控制標志位也置0,處于關閉狀態,系統初始化流程圖如圖3-5所示。
圖3-5 系統初始化流程圖
9,顯示子程序設計
定義數碼管的段碼表、位選碼,定義計數器的顯示緩存區,在統計過程中,當一個信號傳到單片機中,系統調用延時子程序進行延時,計數器對十位和個位進行計數判斷,將數據通過數碼管顯示出來,顯示子程序的電路圖如圖3-6所示。
圖3-6 動態顯示電路流程圖
10,光電計數處理子字程序設計
外部中斷T0初始化后處于關閉狀態,當其中斷標志有效時進行加計數,外部中斷T0進行加計數且判斷計數器是否達到10,若等于10則KEYBOARD=1蜂鳴器報警。最后將計數值通過數碼管顯示,其流程圖如圖3-7所示。
SHAPE? \* MERGEFORMAT
3-7 光電計數處理子程序流程圖
四、系統調試
4.1電路的優缺點
1.用單片機作為設計的核心系統有點易于實現自動化控制、計數精確。而電路采用數碼管動態顯示電路直觀性比較好、具有一定的抗干擾能力且比較容易實現級聯,以達到擴大計數范圍的作用,同時電路具有很強的實用性。
2.電路的不足由高亮光電管和硅光電池組成的信號產生電路靈敏度稍差,在實際環境中光線的接受還是收到影響,導致電路反應有點遲鈍。
3.電路剛開始有些地方考慮的欠佳,線路排布個人覺得并不十分完美。
4.2電路的改進方法
1、斷電檢查:硬件電路及對照原理圖檢查硬件電路。
2、整個調試過程分層次進行,先調試單元電路,再調試模塊電路,最后系統聯調。
3、通電檢查:入正常電壓,觀察各模塊工作波形及工作電壓有無異常。
4、單元電路調試:利用信號源或其他實驗儀器判斷各單元電路的工作狀態。
5、整機聯調:從最前端到末級進行統調,檢查各級動態信號工作情況,分析是否滿足設計要求。
6、參數計算和器件選擇:
五、系統程序設計
用C語言進行編程:
#include
#define uchar unsigned char
#define uint unsigned int
uchar code tab[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit SPK=P3^7;
sbit key1=P1^0;
sbit key2=P1^1;
uchar n,a,b;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}void scan()
{
if(key1==0)
{
delay(5);
if(key1==0)
{
while(!key1);
n++;
if(n==100)
n=0;
}
}
if(key2==0)
{
delay(5);
if(key2==0)
{
while(!key2);
n=0;
}
}
}
void display()
{
a=n%10;
b=n/10;
P2=0xfe;
P0=tab[b];
delay(5);
P2=0xfd;
P0=tab[a];
delay(5);
}
void alarm(uchar t)
{
uchar i,j;
for(i=0;i<200;i++)
{
SPK=~SPK;
for(j=0;j
}
}
void main()
{
while(1)
{
scan();
display();
if((a==0)&&(b!=0))
{
alarm(30);
alarm(50);
}
}
}
六、仿真
用proteus畫好電路圖,仿真結果如下:
1,計數顯示如下圖:
2,當計數到‘10’時,報警器報警,仿真結果如下圖:
3,按下清零鍵,數碼管恢復到‘00’,仿真結果如下圖:
七、設計心得體會
本次課程設計是利用光電傳感器對通過光電門的產品數量計數。在設計電路初期,由于沒有設計經驗,覺得無從下手,空有很多設計思想,經過自己查找資料,我的設計漸漸有了頭緒,通過查閱資料,逐漸確立系統方案。發現自己對單片機AT89C52的功能的認識和應用掌握力度不夠,在軟件設計程序時常常遇到問題,又找不到錯誤問題根源所在。究其原因是我對芯片應用和C語言編寫程序的經驗太少,速度過慢。我知道問題的根本原因之后,我認真研究并掌握單片機的應用并提高編寫程序的準確度,變成速度。在設計期間有什么不懂的可以問指導老師,也可以和同學們互相探討,也可以通過網絡查詢。在課程設計期間我學到了很多知識和技巧。并把以往老師教的理論知識用于實踐。總之,知識必須通過應用才能實現其價值!有些東西以為學會了,但真正到用的時候才發現是兩回事,所以我認為只有到真正會用的時候才是真的學會了。
八、參考文獻
1,康華光? 《電子技術基礎》數字部分.高等教育出版社,2006
2,康華光? 《電子技術基礎》模擬部分.高等教育出版社,2006
3,倪曉軍,章韻? 《單片機原理與接口技術》清華大學出版社,2009
4,郭天祥??? 《51單片機C語言教程》 電子工業出版社,2009
總結
以上是生活随笔為你收集整理的脉冲计数器单片机c语言编程,基于单片机的光电计数器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql自定义序号_mysql序列号生
- 下一篇: 基于stm32单片机外文文献_13个基于