版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 電子技術(shù)應(yīng)用課程設(shè)計</p><p> 課題: 基于51單片機(jī)的彩燈制作 </p><p> 專業(yè)班級: </p><p> 學(xué)生姓名: </p><p> 學(xué)號: &
2、lt;/p><p> 指導(dǎo)老師: </p><p> 日期: 2012年9月 24日-9月28日 </p><p><b> 系統(tǒng)描述</b></p><p><b> 實驗?zāi)康?lt;/b></p><p> 為掌
3、握和熟悉STC80C51 4個I/O口的應(yīng)用及對I/O的一般控制方法,了解4094芯片的8位串行輸入轉(zhuǎn)為8位并行輸出的工作方式,利用STC80C51 4個I/O口實現(xiàn)32個LED控制和用P3.1、P3.2、P1.0及4094實現(xiàn)串口控制8個彩燈。通過完成這一包括電路設(shè)計和程序開發(fā)的完整過程,了解開發(fā)一單片機(jī)應(yīng)用系統(tǒng)的全過程,為今后的設(shè)計打下基礎(chǔ)。</p><p><b> 硬件分析</b>
4、</p><p> STC80C51共有4個I/O口,可控制32個彩燈,在實現(xiàn)過程中要控制的彩燈分為4個部分,每一部分均由8個彩燈組成。第1部分由P0口控制;第2部分由P1口控制;第3部分由P2口控制;第4部分由P3口控制。另外8個彩燈由以P3.0、P3.1、P1.0控制的4094芯片組成的電路控制,這兩組彩燈分別由兩個程序控制,各不影響。</p><p> 在并口控制彩燈的實現(xiàn)中,由
5、于芯片STC80C51供電能力有限,所以在單片機(jī)控制的彩燈處各加上拉電阻,以防供電能力不足而導(dǎo)致的電路設(shè)計缺陷。</p><p> 在串口控制彩燈的實現(xiàn)中,P3.0為數(shù)據(jù)輸入口,P3.1為時鐘輸入口,驅(qū)動P3.0口的數(shù)據(jù)到4094芯片。4094為串口數(shù)據(jù)輸入轉(zhuǎn)換為8位并口數(shù)據(jù)輸出。P1.O為4094串口輸入轉(zhuǎn)變?yōu)閿?shù)據(jù)輸出的使能控制,當(dāng)P1.0為高電平時,4094串口輸入變?yōu)椴⒖谳敵?;P1.0為低電平時,4094
6、輸出的數(shù)據(jù)不變。同樣,4094控制的彩燈也各加上拉電阻。</p><p> 由于STC80C51 4個I/O的每個串口都有對彩燈的控制,同時P3.0、P3.1、P1.0又對串口8個彩燈控制,P3.0、P3.1、P1.0在實現(xiàn)功能控制中有沖突,所以在這次彩燈設(shè)計中采用了一個跳線功能(相當(dāng)于一個二路開關(guān)功能)。當(dāng)開關(guān)打到一端時,P3.0、P3.1、P1.0控制并口彩燈;而當(dāng)開關(guān)打到另一端時,P3.0、P3.1、P1
7、.0控制串口彩燈,所以實現(xiàn)過程中采取的是兩個主程序,以實現(xiàn)其功能。</p><p><b> 電路設(shè)計</b></p><p> STC80C51 4個I/O分別對應(yīng)控制32個LED彩燈,4094芯片將串口數(shù)據(jù)輸入轉(zhuǎn)換為8位并口數(shù)據(jù)輸出。為保護(hù)這兩個IC片,我們增加了一個穩(wěn)壓模塊,將輸入電壓范圍為6~9V穩(wěn)定在5V左右。</p><p>&
8、lt;b> 電路原理圖 </b></p><p><b> 系統(tǒng)硬件框圖</b></p><p><b> 2.系統(tǒng)原理圖設(shè)計</b></p><p> Proteus 仿真原理圖</p><p><b> 3.PCB布線設(shè)計</b></p&g
9、t;<p> 三.單片機(jī)彩燈控制應(yīng)用程序設(shè)計</p><p><b> 程序流程圖</b></p><p> 并口控制彩燈程序流程圖 串口控制彩燈程序流程圖</p><p><b> 調(diào)試與測試 </b></p><p> 畫完P(guān)CB圖并印刷
10、電路板之后,我們便開始焊接元件和調(diào)試。剛開始通電時,發(fā)現(xiàn)所有LED燈都不亮,包括穩(wěn)壓模塊的指示燈。通電幾分鐘后,穩(wěn)壓塊和STC80C51都開始發(fā)燙,我們急忙關(guān)掉電源,檢查電路。后來發(fā)現(xiàn)是穩(wěn)壓模塊并沒有接在電源的入口處,于是我們改正后,又重新接上電源,這回LED彩燈終于綻放了它的光彩??墒牵€是有些美中不足,有些LED燈光芒很微弱甚至不亮,我們猜測是焊接得不好或者是虛焊,于是又重新把不亮的LED燈重新焊接。之后再進(jìn)行調(diào)試,LED彩燈果真按
11、著程序閃動變換。</p><p><b> 成品圖片</b></p><p><b> 附1.元件清單:</b></p><p> 附2.系統(tǒng)詳細(xì)軟件代碼:</p><p><b> 1.彩燈并口程序</b></p><p> //******
12、*******包含的頭文件****************</p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> //*************變量定義****************</p><p> #define DELAY_TI
13、ME 550</p><p> unsigned char change,change1,change2;</p><p> unsigned char i,j;</p><p> sbit P00=P0^0;</p><p> sbit P01=P0^1;</p><p> sbit P02=P0^2;&l
14、t;/p><p> sbit P03=P0^3;</p><p> sbit P04=P0^4;</p><p> sbit P05=P0^5;</p><p> sbit P06=P0^6;</p><p> sbit P07=P0^7;</p><p> sbit P17=P1^7;
15、</p><p> sbit P27=P2^7;</p><p> sbit P32=P3^2;</p><p> sbit P33=P3^3;</p><p> sbit P34=P3^4;</p><p> sbit P35=P3^5;</p><p> sbit P36=P3^
16、6;</p><p> sbit P37=P3^7;</p><p> //*************函數(shù)聲明****************</p><p> void de_lay(void);</p><p> void lig_rotate1(void);</p><p> void lig_rota
17、te0(void);</p><p> void lig_circle(void);</p><p> void lig_jump(void);</p><p> void lig_circle_light(void);</p><p> void lig_all_put_out(void);</p><p>
18、 void Delay_us(int time);</p><p> void Delay_ms(int time);</p><p> //*************主程序開始****************</p><p> void main()</p><p><b> {</b></p>
19、<p><b> while(1)</b></p><p><b> {</b></p><p> lig_all_put_out();</p><p> Delay_ms(200);</p><p> lig_rotate0();</p><p>
20、lig_rotate1();</p><p> for(j=0;j<5;j++)</p><p> lig_circle();</p><p> for(j=0;j<4;j++)</p><p> lig_jump();</p><p> for(j=0;j<4;j++)</p>
21、<p><b> {</b></p><p> lig_circle_light();</p><p> lig_all_put_out();</p><p><b> }</b></p><p> for(j=0;j<4;j++)</p><p&g
22、t; lig_jump();</p><p><b> }</b></p><p><b> }</b></p><p> //************使彩燈由P0.0-P3.7順時針依次點亮*****************</p><p> void lig_rotate0(void)
23、</p><p><b> {</b></p><p> change=0xff;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> change<<=1;</p><
24、p> P0=change;</p><p> Delay_ms(DELAY_TIME);</p><p><b> }</b></p><p> change=0xff;</p><p> for(i=0;i<=7;i++)</p><p><b> {</
25、b></p><p> change>>=1;</p><p> P2=change;</p><p> Delay_ms(DELAY_TIME);</p><p><b> }</b></p><p> change=0xff;</p><p>
26、; for(i=0;i<=7;i++)</p><p><b> {</b></p><p> change>>=1;</p><p> P3=change;</p><p> Delay_ms(DELAY_TIME);</p><p><b> }<
27、/b></p><p> change=0xff;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> change>>=1;</p><p> P1=change;</p><p>
28、; Delay_ms(DELAY_TIME);</p><p><b> }</b></p><p><b> }</b></p><p> //*************使彩燈由P0.0-P3.7順時針依次熄滅****************</p><p> void lig_rota
29、te1(void)</p><p><b> {</b></p><p><b> P00=1;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P01=1;</b></p><p> Delay
30、_ms(DELAY_TIME);</p><p><b> P02=1;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P03=1;</b></p><p> Delay_ms(DELAY_TIME);</p><p>
31、;<b> P04=1;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P05=1;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P06=1;</b></p&g
32、t;<p> Delay_ms(DELAY_TIME);</p><p><b> P07=1;</b></p><p> Delay_ms(DELAY_TIME);</p><p> change=0x00;</p><p> for(i=0;i<=7;i++)</p>&l
33、t;p><b> {</b></p><p> change>>=1;</p><p> change+=0x80;</p><p> P2=change;</p><p> Delay_ms(DELAY_TIME);</p><p><b> }</
34、b></p><p> change=0x00;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> change>>=1;</p><p> change+=0x80;</p><p&
35、gt; P3=change;</p><p> Delay_ms(DELAY_TIME);</p><p><b> }</b></p><p> change=0x00;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b&
36、gt;</p><p> change>>=1;</p><p> change+=0x80;</p><p> P1=change;</p><p> Delay_ms(DELAY_TIME);</p><p><b> }</b></p><p>
37、<b> }</b></p><p> //***********使P0,P1,P2,P3分別控制的所有的燈順時針點亮*************</p><p> void lig_circle(void)</p><p><b> {</b></p><p> change1=0xaa;
38、</p><p> change2=0x55;</p><p><b> P0=0x00;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P0=0xff;</b></p><p><b> P2=0x00;
39、</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P2=0xff;</b></p><p><b> P3=0x00;</b></p><p> Delay_ms(DELAY_TIME);</p><p>&
40、lt;b> P3=0xff;</b></p><p><b> P1=0x00;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P1=0xff;</b></p><p><b> }</b></
41、p><p> //*************彩燈間隔點亮******************</p><p> void lig_jump(void)</p><p><b> {</b></p><p> P1=P3=0xaa;</p><p> P2=P0=0x55;</p>
42、<p> Delay_ms(900);</p><p> P1=P3=0x55;</p><p> P2=P0=0xaa;</p><p> Delay_ms(900);</p><p><b> }</b></p><p> //***********使P0,P1,P2
43、,P3分別控制的所有的燈逆時針點亮******************</p><p> void lig_circle_light(void)</p><p><b> {</b></p><p> change1=0xaa;</p><p> change2=0x55;</p><p>
44、;<b> P1=0x00;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P1=0xff;</b></p><p><b> P3=0x00;</b></p><p> Delay_ms(DELAY_TIME);&l
45、t;/p><p><b> P3=0xff;</b></p><p><b> P2=0x00;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P2=0xff;</b></p><p><b&g
46、t; P0=0x00;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> P0=0xff;</b></p><p><b> }</b></p><p> //************熄滅所有的燈****************&l
47、t;/p><p> void lig_all_put_out(void)</p><p><b> {</b></p><p> P1=P2=P3=P0=0xff;</p><p><b> }</b></p><p> //************us時間延時****
48、***********</p><p> void Delay_us(int time)</p><p><b> {</b></p><p> while(time--)_nop_();</p><p><b> }</b></p><p> //********
49、*****ms時間延時***************</p><p> void Delay_ms(int time)</p><p><b> {</b></p><p> while(time--)Delay_us(20);</p><p><b> }</b></p>&
50、lt;p><b> 彩燈串口程序</b></p><p> //*************包含的頭文件*****************</p><p> #include<reg52.h></p><p> #include<intrins.h></p><p> //*****
51、********宏定義*****************</p><p> #define uchar unsigned char</p><p> #define DELAY_TIME 600</p><p> //************函數(shù)聲明******************</p><p> void Effect1(vo
52、id);</p><p> void Effect2(void);</p><p> void Effect3(uchar n);</p><p> void Effect4(void);</p><p> void lig_put_out(void);</p><p> void Init_Programm
53、e(void);</p><p> void Delay_us(int time);</p><p> void Delay_ms(int time);</p><p> //*************變量聲明*****************</p><p> uchar change,change1,change2;</p&
54、gt;<p> sbit P10=P1^0;</p><p> uchar i,j;</p><p> //**************主函數(shù)****************</p><p> void main()</p><p><b> {</b></p><p>
55、 Init_Programme();</p><p><b> while(1)</b></p><p><b> {</b></p><p> Effect1();</p><p> Effect2();</p><p> Effect3(5);</p>
56、;<p> Effect4();</p><p><b> }</b></p><p><b> }</b></p><p> //*************小燈漸亮*****************</p><p> void Effect1(void)</p>
57、<p><b> {</b></p><p> change=0xff;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> change<<=1;</p><p> SBU
58、F=change;</p><p><b> TI=0;</b></p><p> while(!TI);</p><p><b> P10=1;</b></p><p><b> P10=0;</b></p><p> Delay_ms(DE
59、LAY_TIME);</p><p><b> }</b></p><p> lig_put_out();</p><p><b> }</b></p><p> //*************小燈漸滅*****************</p><p> void
60、Effect2(void)</p><p><b> {</b></p><p> change=0x00;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> change>>=1;<
61、;/p><p> change+=0x80;</p><p> SBUF=change;</p><p><b> TI=0;</b></p><p> while(!TI);</p><p><b> P10=1;</b></p><p>&l
62、t;b> P10=0;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> }</b></p><p> lig_put_out();</p><p><b> }</b></p><p> //***
63、**********小燈間隔亮與滅*****************</p><p> void Effect3(uchar n)</p><p><b> {</b></p><p> change=0x55;</p><p> change1=0xaa;</p><p> for(i
64、=0;i<n;i++)</p><p><b> {</b></p><p> SBUF=change;</p><p><b> TI=0;</b></p><p> while(!TI);</p><p><b> P10=1;</b>
65、;</p><p><b> P10=0;</b></p><p> Delay_ms(DELAY_TIME);</p><p> SBUF=change1;</p><p><b> TI=0;</b></p><p> while(!TI);</p>
66、<p><b> P10=1;</b></p><p><b> P10=0;</b></p><p> Delay_ms(DELAY_TIME);</p><p><b> }</b></p><p> lig_put_out();</p>
67、<p><b> }</b></p><p> //**************小燈的混合效果****************</p><p> void Effect4(void)</p><p><b> {</b></p><p> int time=1000;<
68、/p><p> change=change1=change2=0xfe;</p><p> for(i=0;i<55;i++)</p><p><b> {</b></p><p> SBUF=change;</p><p><b> TI=0;</b></
69、p><p> while(!TI);</p><p><b> P10=1;</b></p><p><b> P10=0;</b></p><p> change1<<=1;</p><p> change2>>=7;</p>&
70、lt;p> change=change1|change2;</p><p> change1=change2=change;</p><p><b> time-=15;</b></p><p> Delay_ms(time);</p><p><b> }</b></p>
71、;<p> change=0xfe;</p><p> change1=0xff;</p><p> for(i=0;i<=7;i++)</p><p><b> {</b></p><p> for(j=0;j<5;j++)</p><p><b>
72、 {</b></p><p> SBUF=change;</p><p><b> TI=0;</b></p><p> while(!TI);</p><p><b> P10=1;</b></p><p><b> P10=0;</
73、b></p><p> Delay_ms(400);</p><p> SBUF=change1;</p><p><b> TI=0;</b></p><p> while(!TI);</p><p><b> P10=1;</b></p>&
74、lt;p><b> P10=0;</b></p><p> Delay_ms(400);</p><p><b> }</b></p><p> change<<=1;</p><p><b> }</b></p><p>
75、 Effect3(5);</p><p><b> }</b></p><p> //**************程序的初始化****************</p><p> void Init_Programme(void)</p><p><b> {</b></p>&
76、lt;p> SCON=0x00;</p><p><b> ES=0;</b></p><p><b> P10=0;</b></p><p> SBUF=Oxff;</p><p><b> TI=0;</b></p><p> wh
77、ile(!TI);</p><p><b> P10=1;</b></p><p><b> P10=0;</b></p><p><b> }</b></p><p> //**************熄滅所有的燈****************</p>
78、<p> void lig_put_out(void)</p><p><b> {</b></p><p> SBUF=0xff;</p><p><b> TI=0;</b></p><p> while(!TI);</p><p><b>
79、; P10=1;</b></p><p><b> P10=0;</b></p><p><b> }</b></p><p> //**************us時間延時****************</p><p> void Delay_us(int time)<
80、;/p><p><b> {</b></p><p> while(time--)_nop_();</p><p><b> }</b></p><p> //***************ms時間延時***************</p><p> void Dela
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機(jī)技術(shù)課程設(shè)計--彩燈控制器的設(shè)計
- 單片機(jī)技術(shù)課程設(shè)計--彩燈控制器的設(shè)計
- 基于單片機(jī)彩燈控制課程設(shè)計
- 電子技術(shù)課程設(shè)計---彩燈控制器
- 單片機(jī)技術(shù)課程設(shè)計--彩燈控制器的設(shè)計.doc
- 單片機(jī)彩燈控制課程設(shè)計
- 電子技術(shù)課程設(shè)計報告---彩燈控制器
- 模擬電子技術(shù)課程設(shè)計-彩燈控制器設(shè)計
- 基于at-89c51單片機(jī)課程設(shè)計彩燈控制器
- 循環(huán)彩燈系統(tǒng)設(shè)計-電子技術(shù)課程設(shè)計
- 基于單片機(jī)課程設(shè)計--彩燈設(shè)計
- 循環(huán)彩燈系統(tǒng)設(shè)計-電子技術(shù)課程設(shè)計
- 數(shù)字電子技術(shù)課程設(shè)計-彩燈控制器的設(shè)計
- 單片機(jī)課程設(shè)計---節(jié)日彩燈控制
- 單片機(jī)課程設(shè)計---基于51單片機(jī)的電子鐘設(shè)計
- 單片機(jī)技術(shù)課程設(shè)計--電子秒表設(shè)計
- 彩燈單片機(jī)課程設(shè)計
- 單片機(jī)課程設(shè)計-- 基于51單片機(jī)的電子時鐘系統(tǒng)
- 單片機(jī)課程設(shè)計--基于51單片機(jī)的簡易電子琴
- 電子技術(shù)課程設(shè)計---基于stc51單片機(jī)實現(xiàn)八路搶答器與
評論
0/150
提交評論