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