心形流水燈課程設(shè)計范文_第1頁
心形流水燈課程設(shè)計范文_第2頁
心形流水燈課程設(shè)計范文_第3頁
心形流水燈課程設(shè)計范文_第4頁
心形流水燈課程設(shè)計范文_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

年4月19日心形流水燈課程設(shè)計文檔僅供參考心形流水燈設(shè)計摘要本課題是利用STC89C52設(shè)計了一個心形流水燈電路,該電路能夠?qū)崿F(xiàn)32個LED燈循環(huán)閃亮、依次熄滅、對角閃亮、對角熄滅、間隔閃亮、間隔熄滅等多種功能。該電路主要由單片機(jī)芯片STC89C52、電源電路、時鐘電路、復(fù)位電路和顯示電路組成。利用Keil軟件編寫C語言程序,并生成目標(biāo)代碼Hex文件。使用Proteus軟件設(shè)計仿真電路,并調(diào)入已編譯好的目標(biāo)代碼,即可在仿真圖中看到模擬實物的運(yùn)行狀態(tài)和過程。使用AltiumDesigner軟件對電路進(jìn)行原理圖設(shè)計和PCB設(shè)計,并對該電路行安裝和調(diào)試,調(diào)試結(jié)果能夠?qū)崿F(xiàn)流水燈的多種亮滅循環(huán)的功能。關(guān)鍵詞:AT89C52,復(fù)位電路,時鐘電路,發(fā)光二極管

目錄1緒論 11.1課題描述 11.2基本工作原理及框圖 12相關(guān)芯片及硬件電路設(shè)計 22.1AT89C52芯片 22.1.1AT89C52的功能特性 22.1.2AT89C52的主要性能參數(shù) 22.2時鐘電路 32.3復(fù)位電路 42.4顯示電路 42.6總原理圖設(shè)計 53系統(tǒng)軟件設(shè)計 63.1程序主要流程 63.2程序設(shè)計 73.4電路功能仿真 20總結(jié) 21致謝 22參考文獻(xiàn) 231緒論1.1課題描述

隨著現(xiàn)代科學(xué)技術(shù)的持續(xù)進(jìn)步和發(fā)展以及人們生活水平的不斷提高,以大規(guī)模、超大規(guī)模集成電路為首的電子工藝技術(shù)的使用也越來越廣泛,結(jié)合單片機(jī)技術(shù)設(shè)計的電子電路也層出不窮。LED彩燈由于其豐富的燈光色彩、低廉的造價以及控制簡單等特點而得到了廣泛的應(yīng)用,用彩燈來裝飾街道和城市建筑物已經(jīng)成為一種時尚。利用控制電路可使彩燈按一定的規(guī)律不斷的改變狀態(tài),不但能夠獲得良好的觀賞效果,而且能夠省電。彩燈的運(yùn)用已經(jīng)遍布于人們的生活中,從歌舞廳到卡拉OK包房,從節(jié)日的祝賀到日常生活中的點綴,這些不但說明了我們對生活的要求有了質(zhì)的飛躍,也說明科技在現(xiàn)實生活中的運(yùn)用有了較大的發(fā)展。在這一設(shè)計中我們將運(yùn)用單片機(jī)技術(shù),與單片機(jī)芯片STC89C52的功能,對心形流水燈系統(tǒng)進(jìn)行設(shè)計,來實現(xiàn)流水燈的多種亮與滅的循環(huán),給人帶來美感[1]。1.2基本工作原理及框圖本課程設(shè)計的XX系統(tǒng)原理如圖1所示。電源電路AT89C52電源電路AT89C52顯示電路 顯示電路時鐘電路時鐘電路 復(fù)位電路復(fù)位電路圖1基本工作原理框圖2相關(guān)芯片及硬件電路設(shè)計2.1AT89C52芯片。圖2AT89C52引腳圖2.1.1AT89C52的功能特性STC89C52是STC公司生產(chǎn)的一種低功耗、高性能的微控制器,具有8K的系統(tǒng)可編程Flash存儲器,其具有傳統(tǒng)51單片機(jī)不具備的功能,在經(jīng)典的MCS-51內(nèi)核上做了很多的改進(jìn),使得STC89C52在處理嵌入式控制應(yīng)用系統(tǒng)時更加高效、靈活。STC89C52具有以下標(biāo)準(zhǔn)功能:4個外部中斷、全雙工串行口、一個7向量4級中斷結(jié)構(gòu)、3個16位定時器/計數(shù)器、8K字節(jié)Flash、512字節(jié)RAM(隨機(jī)存儲器)、看門狗定時器,其12周期和6周期能夠任意選擇,其工作電壓在3V~5.5V之間,工作頻率在0~40MHZ,實際工作頻率可達(dá)48MHZ[2]。其管腳的封裝圖如圖2所示。2.1.2AT89C52的主要性能參數(shù)AT89C52主要性能參數(shù)如下:與MC-51產(chǎn)品指令系統(tǒng)完全兼容VCC(38腳):芯片電源,接+5VGND(16腳):接地端XTAL1(15腳):片內(nèi)振蕩器反相放大器和時鐘發(fā)生器電路的輸入端。當(dāng)使用片內(nèi)振蕩器時,該引腳連接外部石英晶體和微調(diào)電容;當(dāng)采用外接時鐘源時,該引腳接外部時鐘振蕩器的信號XTAL2(14腳):片內(nèi)振蕩器反相放大器的輸出端。當(dāng)使用片內(nèi)振蕩器時,該引腳連接外部石英晶體和微調(diào)電容;當(dāng)采用外部時鐘源時,該引腳懸空ALE(27腳):用來鎖存P0口送出的低8位地址PSEN(26腳:外部ROM讀選通信號RST(4腳):復(fù)位信號輸入端EA/Vpp(29腳):內(nèi)外ROM選擇/片內(nèi)EPROM編程電源P0口:8位,漏極開路的雙向I/O口P1口:8位,準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻P2口:8位,準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻P3口:8位,準(zhǔn)雙向I/O口,具有內(nèi)部上拉電阻2.2時鐘電路單片機(jī)內(nèi)有一個由反相放大器所構(gòu)成的振蕩電路,XTAL1和XTAL2分別為振蕩電路的輸入端和輸出端。在XTAL1和XTAL2引腳上外接石英晶體和微調(diào)電容構(gòu)成并聯(lián)振蕩回路。晶振頻率設(shè)置為11.0592MHZ,作用是產(chǎn)生時鐘信號。單片機(jī)晶振提供的時鐘頻率越高,那么單片機(jī)運(yùn)行速度就越快,單片接的一切指令的執(zhí)行都是建立在單片機(jī)晶振提供的時鐘頻率。電容值為30pF,能夠起到頻率微調(diào)作用[3]。時鐘電路如圖3所示。圖3時鐘電路圖2.3復(fù)位電路單片機(jī)RST接口為復(fù)位信號輸入端,高電平有效。在該引腳上加上持續(xù)時間大于兩個機(jī)器周期的高電平,就能夠使單片機(jī)復(fù)位。在單片機(jī)正常工作時,此引腳應(yīng)為小于或等于0.5V的低電平。復(fù)位電路接單片機(jī)RST端口,在RST輸入端出現(xiàn)高電平時實現(xiàn)復(fù)位和初始化[4]。復(fù)位電路如4所示。圖4復(fù)位電路2.4顯示電路單片機(jī)的P0口為8位的漏極開路的雙向I/O口,當(dāng)P0口作為普通的I/O口使用時,需要上拉電阻,這時為準(zhǔn)雙向口。P1、P2、P3都為8位的準(zhǔn)雙向口,具有內(nèi)部上拉電阻。圖5為顯示電路,單片機(jī)I/O口一對一直接控制LED燈,顯示電路中的32個電阻既為上拉電阻,也起到電路分壓作用,防止燒壞元器件[5]。顯示電路如圖5所示圖5顯示電路圖2.6總原理圖設(shè)計總結(jié)時鐘電路、復(fù)位電路、以及顯示電路,把其放入一個電路。得到總體的電路??傮w電路如圖6所示。圖6電路原理圖3系統(tǒng)軟件設(shè)計3.1程序主要流程單片機(jī)的應(yīng)用系統(tǒng)由硬件和軟件組成,在硬件原理圖搭建完成上電之后,暫時還不能看到流水燈循環(huán)點亮的現(xiàn)象,還需要編寫程序控制單片機(jī)管腳電平的高低變化,來實現(xiàn)LED燈的各種亮滅功能。先將P0、P1、P2、P3全部置1,即通入高電平,用16進(jìn)制表示為0XFFH,則32個LED燈全部處于熄滅狀態(tài)。然后給P0口賦值0X7FH,即只有P0.0處于低電平時,LED1燈點亮。使用延時函數(shù)delay,并設(shè)置延時時間為2秒,延時時間一到P0口的值就變?yōu)?X3FH,即P0.0和P0.1都為高電平,LED2也開始點亮,如此循環(huán)P0口控制的8個LED燈全部點亮,當(dāng)高電平變?yōu)榈碗娖綍r,LED燈熄滅。P1、P2、P3口控制的LED燈閃亮和熄滅原理同P0口一樣,因此就能夠看到LED燈的流水效果了[6]。程序流程圖如圖7所示,開始開始讀取I/O口狀態(tài)讀取I/O口狀態(tài)判斷I/O口狀態(tài)判斷I/O口狀態(tài)低電平高電平LED燈點亮LED燈熄滅LED燈點亮LED燈熄滅延時延時燈流動運(yùn)行燈流動運(yùn)行結(jié)束結(jié)束圖7程序設(shè)計流程圖3.2程序設(shè)計#include<reg52.h>#include<intrins.h>#define uintunsignedint#define ucharunsignedcharucharcodetable[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};//逐個點亮0~7ucharcodetable1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//逐個點亮7~0ucharcodetable2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//逐個滅0~7ucharcodetable3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};//逐個滅7~0voiddelay(uintt); //延時voidzg(uintt,uchara);//兩邊逐個亮voidqs(uintt,uchara);//全部閃爍voidzgxh(uintt,uchara);//逆時針逐個點亮//voidzgxh1(uintt,uchara);//順時針逐個點亮voiddjs(uintt,uchara);//對角閃voidlbzgm(uintt,uchara);//兩邊逐個滅//voidsszgm(uintt,uchara);//順時針逐個滅voidnszgm(uintt,uchara);//逆時針逐個滅voidsztl(uintt,uchara);//順時逐個同步亮voidnztl(uintt,uchara);//逆時逐個同步亮voidsztm(uintt,uchara);//順時逐個同步滅voidnztm(uintt,uchara);//逆時逐個同步滅voidhwzjl(uintt,uchara);//橫往中間亮voidhwzjm(uintt,uchara);//橫往中間滅//voidswzjl(uintt,uchara);//豎往中間亮//voidswzjm(uintt,uchara);//豎往中間滅voidnzdl(uintt,uchara);//逆時逐段亮voidnzdgl(uintt,uchara);//逆時逐段一個點亮voidjgs(uintt,uchara);//間隔閃voidzg(uintt,uchara)//兩邊逐個亮{ uchari,j;for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; P0=0x7f;delay(t); for(i=0;i<7;i++) { P0=table1[i+1]; P2=table1[i]; delay(t); } P2=0x00;P1=0xfe; delay(t);for(i=0;i<7;i++) { P1=table[i+1]; P3=table1[i]; delay(t); } P3=0x00;delay(t); }}voidqs(uintt,uchara) //全部閃爍{ ucharj; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; delay(t); P0=P1=P2=P3=0x00; delay(t); } }voidzgxh(uintt,uchara)//逆時針逐個點亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(t); } for(i=0;i<8;i++) { P1=table[i]; delay(t); } for(i=0;i<8;i++) { P3=table[i]; delay(t); } for(i=0;i<8;i++) { P2=table[i]; delay(t); } }}voidnszgm(uintt,uchara)//逆時針逐個滅{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=table3[i];delay(t); } for(i=0;i<8;i++) { P1=table2[i];delay(t); } for(i=0;i<8;i++) { P3=table2[i];delay(t); } for(i=0;i<8;i++) { P2=table2[i];delay(t); } }}voidzgxh1(uintt,uchara)//順時針逐個點亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P2=table1[i]; delay(t); } for(i=0;i<8;i++) {P3=table1[i]; delay(t); } for(i=0;i<8;i++) { P1=table1[i]; delay(t); } for(i=0;i<8;i++) { P0=table[i]; delay(t); } }}voidsszgm(uintt,uchara)//順時針逐個滅{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P2=table3[i];delay(t); } for(i=0;i<8;i++) { P3=table3[i];delay(t); } for(i=0;i<8;i++) { P1=table3[i];delay(t); } for(i=0;i<8;i++) { P0=table2[i];delay(t); } }}voiddjs(uintt,uchara)//對角閃{ ucharj; for(j=0;j<a;j++) {P0=P1=P2=P3=0xff; P0=P3=0x00; delay(t); P0=P1=P2=P3=0xff; P1=P2=0x00; delay(t); } }voidlbzgm(uintt,uchara)//兩邊逐個滅{ uchari,j; for(j=0;j<a;j++) { P0=P2=0x00; P3=0x01;delay(t); for(i=7;i>1;i--) { P1=table[i-1];P3=table1[i-2]; delay(t); } P1=0xfe;P3=0xff;delay(t); P1=0xff;P2=0x01;delay(t); for(i=7;i>1;i--) { P0=table1[i-1]; P2=table1[i-2]; delay(t); } P0=0x7f;P2=0xff;delay(t); P0=0xff;delay(t); }}voidsztl(uintt,uchara)//順時逐個同步亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table[i];P1=P2=P3=table1[i];delay(t); } }}voidnztl(uintt,uchara)//逆時逐個同步亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; P1=P2=P3=table[i]; delay(t); } }}voidsztm(uintt,uchara)//順時逐個同步滅{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=table2[i]; P1=P2=P3=table3[i]; delay(t); } }}voidnztm(uintt,uchara)//逆時逐個同步滅{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table3[i];P1=P2=P3=table2[i];delay(t); } }}voidhwzjl(uintt,uchara)//橫往中間亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=P2=P1=table1[i]; P3=table[i];delay(t); } }}voidhwzjm(uintt,uchara)//橫往中間滅{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=P2=P1=table3[i]; P3=table2[i];delay(t); } }}voidswzjl(uintt,uchara)//豎往中間亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=P2=P1=table[i]; P3=table1[i];delay(t); } }}voidswzjm(uintt,uchara)//豎往中間滅{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0x00; for(i=0;i<8;i++) { P0=P2=P1=table2[i]; P3=table3[i];delay(t); } }}voidnzdl(uintt,uchara)//逆時逐段亮{ uchari,j; for(j=0;j<a;j++) { P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(t); } P0=0xff; for(i=0;i<8;i++) { P1=table[i]; delay(t); } P1=0xff; for(i=0;i<8;i++) { P3=table[i]; delay(t); } P3=0xff; for(i=0;i<8;i++) { P2=table[i]; delay(t); } P2=0xff; }}voidnzdgl(uintt,uchara)//逆時逐段一個點亮{ uchari,j,k,l; for(j=0;j<a;j++) { k=table1[0]; P0=k;l=table[0]; P1=P2=P3=l;delay(t); for(i=0;i<8;i++) { k=_crol_(k,-1); P0=k; l=_crol_(l,1); P1=P2=P3=l; delay(t); } }}voidjgs(uintt,uchara)//間隔閃{ ucharj; for(j=0;j<a;j++) { P0=0x55;P1=P2=P3=0xaa; delay(t); P0=0xaa;P1=P2=P3=0x55; delay(t); }}voidmain(){ uchari; while(1) { zg(100,1); //兩邊逐個亮 lbzgm(100,1); //兩邊逐個滅 jgs(300,10); djs(100,20);//對角閃 P1=P2=P3=0xff; for(i=0;i<3;i++) { P0=0x00;delay(800); P0=0xff;delay(800); } P0=0x00; for(i=0;i<3;i++) { P1=0x00;delay(800); P1=0xff;delay(800); } P1=0x00; for(i=0;i<3;i++) { P3=0x00;delay(800); P3=0xff;delay(800); } P3=0x00; for(i=0;i<3;i++) { P2=0x00;delay(800); P2=0xff;delay(800); } qs(500,3); for(i=0;i<6;i++) { zgxh(50,1); nszgm(50,1); } djs(100,20);//對角閃 for(i=0;i<3;i++) { zg(100,1); //兩邊逐個亮 lbzgm(100,1); //兩邊逐個滅 } qs(200,10);djs(100,50); for(i=0;i<5;i++) { sztl(200,1);//順時逐個同步亮 nztm(200,1); nztl(200,1); sztm(200,1);//順時逐個同步滅 } djs(300,10);//對角閃 nzdgl(300,10);//逆時逐段一個點亮 jgs(300,10);//間隔閃 for(i=0;i<3;i++) { zgxh(100,1); nszgm(100,1); } for(i=0;i<5;i++) { zgxh1(100,1); sszgm(100,1); }nzdl(200,3);//逆時逐段亮jgs(50,100);//間隔閃 P0=P1=P2=P3=0xff; for(i=0;i<8;i++) { P0=table1[i]; delay(200); } for(i=0;i<8;i++) { P1=table[i]; delay(200); } for(i=0;i<3;i++) { P0=P1=0x00;delay(200); P0=P1=0xff;delay(200); } for(i=0;i<8;i++) { P2=table1[i]; delay(200); } for(i=0;i<8;i++) { P3=table1[i]; delay(200); } for(i=0;i<3;i++) { P2=P3=0x00;delay(200); P2=P3=0xff;delay(200); } nzdgl(50,40);//逆時逐段一個點亮 for(i=0;i<4;i++) { zg(100,1);qs(100,10); lbzgm(100,1); } djs(50,100);//對角閃 for(i=0;i<3;i++) { zgxh(100,1); nszgm(100,1); }djs(1000,10); for(i=0;i<10;i++) { hwzjl(200,1);//橫往中間亮 hwzjm(200,1);//橫往中間滅 } djs(300,10);//對角閃for(i=0;i<10;i++) { swzjl(200,1);//豎往中間亮 swzjm(200,1);//豎往中間滅 } for(i=0;i<5;i++) { zgxh(100,1); nszgm(100,1); } djs(100,20);//對角閃 zg(300,1); lbzgm(300,1); for(i=0;i<5;i++) { zgxh1(100,1); sszgm(100,1); } for(i=0;i<5;i++) { sztl(200,1);//順時逐個同步亮 nztm(200,1); nztl(200,1); sztm(200,1);//順時逐個同步滅 } djs(500,20);//對角閃 djs(100,30);//對角閃 djs(50,50);//對角閃// djs(10,100);//對角閃 delay(1000); } }voiddelay(uintt) { uintx,y; for(x=t;x>0;x--) { for(y=120;y>0;y--); }}3.4電路功能仿真在各部分電路設(shè)計的基礎(chǔ)上,按照總體電路圖在Proteus上一一進(jìn)行器件選擇,并連接。將電路連接好后,為各個器件選擇合適的參數(shù),然后調(diào)入已編譯好的目標(biāo)代碼Hex文件,啟動仿真。根據(jù)LED燈是否發(fā)亮,判斷所設(shè)計的電路是否能夠?qū)崿F(xiàn)32個LED燈依次點亮、依次熄滅、對角閃亮、對角熄滅、間隔閃亮、間隔熄滅等多種功能。剛開始時,LED燈不亮,仔細(xì)檢查原來是將LED燈接反了,改正之后LED燈便能夠正常發(fā)光了。電路仿真的結(jié)果為32個LED燈依次發(fā)亮、依次熄滅,并能夠?qū)崿F(xiàn)多種亮滅功能。根據(jù)仿真結(jié)果可知電路原理及程序無誤,能夠進(jìn)行PCB設(shè)計[7]。如圖8所示。圖8電路仿真圖

總結(jié)在設(shè)計電路圖的過程中,經(jīng)過了多次分析和仿真驗證,并結(jié)合所給的器件清單最后確定了需要哪些器件來實現(xiàn)電路的功能,而且保證了所需要的元器件在給出的清單范圍內(nèi)。經(jīng)過Proteus軟件多次仿真和修改后,在仿真電路圖實現(xiàn)設(shè)計要求的前提下確定了最終的原理圖。然后在AltiumDesigner中畫出來所對應(yīng)的原理圖

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論