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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機32位心形流水燈課程設計報告與源碼(word格式 可編輯)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:313389 發表于 2018-4-21 21:41 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  


課程設計說明書


         課程名稱:       《單片機技術》     

         設計題目:       心形流水燈設計

         學    院:   電子信息與電氣工程學院

         學生姓名:

         學    號:

         專業班級:

         指導教師:   

課程設計任務書

設計題目
心形流水燈設計
學生姓名

所在學院
電子信息與電氣工程學院
專業、年級、班

設計要求:

  • 設計一個用單片機控制的的心形流水燈系統;
  • LED燈數量為32個;
  • 可以實現循環點亮、依次熄滅的基本功能;
  • 可以實現對角閃亮、間隔閃亮、順時針閃亮、逆時針閃亮等多種功能。

學生應完成的任務:

完成心形流水燈電路設計,利用Keil軟件編寫程序,Proteus軟件進行電路功能仿真,利用Altium Designer軟件繪制電路原理圖,設計制作電路的PCB板,對電路進行安裝、調試,并提交課程設計報告。


工作計劃:

4月20日—4月22日,擬定系統硬件方案;4月23—4月24日,完成系統軟件設計;4月25日—4月26日,編寫程序;4月27日—4月28日,燒錄程序并制作系統硬件電路;4月29日—4月30日,書寫課程設計報告并提交。

任務下達日期:        2015年4月20日
任務完成日期:        2015年4月30日

                               指導教師(簽名):           學生(簽名):

心形流水燈設計

摘  要:設計了一個心形流水燈電路,該電路可以實現32個LED燈循環閃亮、依次熄滅、對角閃亮、對角熄滅、間隔閃亮、間隔熄滅等多種功能。該電路主要由單片機芯片STC89C52、電源電路、時鐘電路、復位電路和顯示電路組成。利用Keil軟件編寫C語言程序,并生成目標代碼Hex文件。使用Proteus軟件設計仿真電路,并調入已編譯好的目標代碼,即可在仿真圖中看到模擬實物的運行狀態和過程。使用Altium Designer軟件對電路進行原理圖設計和PCB設計,并對該電路行安裝和調試,調試結果可以實現流水燈的多種亮滅循環的功能。本人主要負責程序設計。











目錄

1. 設計背景

1.1 流水燈在生活中的應用

1.2 單片機在生產及生活中的應用

2. 設計方案              1

2.1 方案對比

2.2  STC89C52芯片功能

2.3 方案論證              4

3. 方案實施

3.1 電路原理圖設計

3.2 程序設計

3.3 電路功能仿真              10

3.4 電路PCB設計

3.5 安裝與調試

4. 結果與結論

5. 收獲與致謝

6. 參考文獻

7. 附件

7.1 元器件清單

7.2 電路仿真圖

7.3 電路原理圖

7.4 PCB布線圖

7.5 實物圖

7.6 程序代碼                        


1.設計背景

1.1 流水燈在生活中的應用

隨著現代科學技術的持續進步和發展以及人們生活水平的不斷提高,以大規模、超大規模集成電路為首的電子工藝技術的使用也越來越廣泛,結合單片機技術設計的電子電路也層出不窮。 LED彩燈由于其豐富的燈光色彩、低廉的造價以及控制簡單等特點而得到了廣泛的應用,用彩燈來裝飾街道和城市建筑物已經成為一種時尚。利用控制電路可使彩燈按一定的規律不斷的改變狀態,不僅可以獲得良好的觀賞效果,而且可以省電。

    彩燈的運用已經遍布于人們的生活中,從歌舞廳到卡拉OK包房,從節日的祝賀到日常生活中的點綴,這些不僅說明了我們對生活的要求有了質的飛躍,也說明科技在現實生活中的運用有了較大的發展。在這一設計中我們將運用單片機技術,與單片機芯片STC89C52的功能,對心形流水燈系統進行設計,來實現流水燈的多種亮與滅的循環,給人帶來美感。

1.2單片機在生產及生活中的應用

單片微計算機自20世紀70年代問世以來,已對人類生活產生了巨大的影響。尤其是美國Intel公司生產的MCS-51系列單片機,由于其具有集成度高、可靠性強、系統結構簡單、價格低廉、易于使用等優點,在世界范圍內已經得到了廣泛的普及和應用。也正是由于單片機的這些特點,它的出現是集成電路技術與微型計算機技術高速發展的產物,給工業自動化等領域帶來了一場重大的革命。

單片機體積小,很容易嵌入到系統之中,以實現各種方式的檢測、計算或控制,而一般的微型計算機無法做到。由于單片機本身就是一個微型計算機,因此只要在單片機的外部適當的增加一些必要的外圍擴展電路,就可以靈活的構成各種應用系統,如工業自動檢測監控系統、數據采集系統、自動控制系統、智能儀器儀表等。除此之外,單片機在家用電器中的應用也很普及,例如,洗衣機、電冰箱、空調機、電風扇、電視機、微波爐、加濕機、消毒柜等,在這些設備中嵌入了單片機之后,其功能和性能大大提高,并可實現智能化和最優化控制。

2.設計方案

2.1 方案對比

1、單片機芯片的比較與選擇

單片機作為該電路的主要控制器芯片,即整個系統的控制核心部分,主要是負責控制LED燈的不同變化速度以及變化效果。因此對單片機芯片的選擇,必須要求其功耗低、數據轉換速率快。

方案一:采用STC89C52單片機。STC89C52單片機是一種低耗、可編程、高性能的8位微控制處理器,其內部包括微處理器、具有8K的系統可編程Flash存儲器、 看門狗定時器、輸入/輸出口、中斷系統等,其具有價格低廉、技術成熟、操作簡單等特點,滿足本系統的要求。

方案二:選擇TI公司生產的MSP430F149系列單片機系統。此款單片機具有低電壓、超低功耗的特點,工作電壓在3.6-1.8V之間,具有強大的功能和高效的運算處理能力。

方案選擇:由于STC89C52芯片價格便宜,支持在線下載程序而且MSP430F149系列單片機的功能已經遠遠高于我們本系統,操作不便。

    綜合考慮,我們選擇方案一。

2、LED燈控制方式的比較與選擇

方案一:選用單片機I/O口一對一直接控制LED燈,正好控制32個LED燈。

方案二:采用74HC573鎖存器控制LED燈,當運用兩片74HC573鎖存器就可以控制32個LED燈,只占用了單片機的10個I/O口,這樣可以減少I/O口數量。

為了操作方便,減少復雜的步驟,我們采取方案一。

2.2  STC89C52芯片功能

STC89C52是STC公司生產的一種低功耗、高性能的微控制器,具有8K的系統可編程Flash存儲器,其具有傳統51單片機不具備的功能,在經典的MCS-51內核上做了很多的改進,使得STC89C52在處理嵌入式控制應用系統時更加高效、靈活。STC89C52具有以下標準功能:4個外部中斷、全雙工串行口、一個7向量4級中斷結構、3個16位定時器/計數器、8K字節Flash、512字節RAM(隨機存儲器)、看門狗定時器,其12周期和6周期可以任意選擇,其工作電壓在3V~5.5V之間,工作頻率在0~40MHZ,實際工作頻率可達48MHZ。其管腳的封裝圖如圖1所示。


圖1  單片機管腳封裝圖

1、電源引腳

(1)VCC(38腳):芯片電源,接+5V;

(2)GND(16腳):接地端;

2、時鐘引腳

(1)XTAL1(15腳):片內振蕩器反相放大器和時鐘發生器電路的輸入端。當使用片內振蕩器時,該引腳連接外部石英晶體和微調電容;當采用外接時鐘源時,該引腳接外部時鐘振蕩器的信號。

(2)XTAL2(14腳):片內振蕩器反相放大器的輸出端。當使用片內振蕩器時,該引腳連接外部石英晶體和微調電容;當采用外部時鐘源時,該引腳懸空。
3、控制引腳
(1)ALE(27腳):用來鎖存P0口送出的低8位地址

(2)PSEN(26腳:外部ROM讀選通信號。
(3)RST(4腳):復位信號輸入端。
(4)EA’/Vpp(29腳):內外ROM選擇/片內EPROM編程電源。
4、并行I/O引線

(1)P0口:8位,漏極開路的雙向I/O口。

當STC89C52擴展外部存儲器及I/O接口芯片時,P0口作為地址總線(低8位)及數據總線的分時復用端口。P0口也可作為通用的I/O口使用,但需要上拉電阻,這時為準雙向口。當作為通用的I/O輸入時,應先向端口輸出鎖存器寫入1,P0口可驅動8個TTL負載。

(2)P1口:8位,準雙向I/O口,具有內部上拉電阻。

P1是專為用戶使用的準雙向I/O口。當作為通用的I/O口輸入時,應先向端口鎖存器輸入1,P1口可驅動4個LS型TTL負載。

(3)P2口:8位,準雙向I/O口,具有內部上拉電阻。

當STC89C52擴展外部存儲器及I/O口時,P2作為高8位地址總線用,輸出高8位地址。P2口也可作為普通的I/O口使用。當作為普通的I/O口使用時,應先向端口鎖存器輸入1,P1口可驅動4個LS型TTL負載。

(4)P3口:8位,準雙向I/O口,具有內部上拉電阻。

P3口可作為普通的I/O口使用,當作為普通的I/O輸入時,應先向端口輸出鎖存器輸入1,P3口可驅動4個LS型TTL負載。P3 口還可提供第二功能,其第二功能定義見表1。

表1   P3 口第二功能定義表

引腳

第二功能

說明

P3.0

RXD

串行數據輸入口

P3.1

TXD

串行數據輸出口

P3.2

INT0’

外部中斷0輸入

P3.3

INT1’

外部中斷1輸入

P3.4

T0

定時器0外部計數輸入

P3.5

T1

定時器1外部計數輸入

P3.6

WR’

外部數據存儲器寫選通輸入

P3.7

RD’

外部數據存儲器讀選通輸入

      

(4)P4口:可實現位尋址。

2.3 方案論證

按照單片機系統擴展與系統配置狀況,單片機應用系統可分為最小系統、最小功耗系統及典型系統等。STC89C52單片機是本次課程設計運用的主要元件。心形流水燈設計使用一個帶有32個發光二極管的單片機最小應用系統,即為發光二極管、晶振、復位、電源等電路和必要的軟件組成的單個單片機。如果要讓接在P0、P1、P2、P3口的LED燈亮起來,只要將P0、P1、P2、P3口的電平變為低電平就可以了。因此,要實現流水燈功能,要將LED依次點亮、熄滅,32只LED燈便會一亮一暗做流水燈了。由于人眼的視覺暫留效應以及單片機執行每條指令的時間很短,在控制LED亮滅的時候應該延時一段時間,否則就看不到"流水"效果了。硬件設計框圖如圖2所示。



                                    圖2  硬件設計框圖

  • 方案實施

3.1 電路原理圖設計

1、電源電路

本次課程設計,單片機正常工作要求輸出電壓為穩定的5V,輸出電壓能夠適應所帶負載的啟動項能。并且電路還必須簡單可靠,能夠輸出足夠大的電流,但是不至于會燒壞元器件。我們采用USB取電,4.8V鋰電池供電。電源電路如圖所示,C1和C2起到濾波作用,R18和R19的作用是平衡電路中的電流,以免在只有1個LED燈亮時燒壞元器件。電源電路如圖3所示。

圖3  電源電路圖

2、時鐘電路

單片機內有一個由反相放大器所構成的振蕩電路,XTAL1和XTAL2分別為振蕩電路的輸入端和輸出端。在XTAL1和XTAL2引腳上外接石英晶體和微調電容構成并聯振蕩回路。晶振頻率設置為11.0592MHZ,作用是產生時鐘信號。單片機晶振提供的時鐘頻率越高,那么單片機運行速度就越快,單片接的一切指令的執行都是建立在單片機晶振提供的時鐘頻率。電容值為30pF,可以起到頻率微調作用。時鐘電路如圖4所示。

圖4  時鐘電路圖

3、復位電路

單片機RST接口為復位信號輸入端,高電平有效。在該引腳上加上持續時間大于兩個機器周期的高電平,就可以使單片機復位。在單片機正常工作時,此引腳應為小于或等于0.5V的低電平。復位電路接單片機RST端口,在RST輸入端出現高電平時實現復位和初始化。復位電路如5所示。

圖5  復位電路

4、顯示電路

    單片機的P0口為8位的漏極開路的雙向I/O口,當P0口作為普通的I/O口使用時,需要上拉電阻,這時為準雙向口。P1 、P2、 P3 都為8位的準雙向口,具有內部上拉電阻。圖6為顯示電路,單片機I/O口一對一直接控制LED燈,顯示電路中的32個電阻既為上拉電阻,也起到電路分壓作用,防止燒壞元器件。顯示電路如圖6 所示。

                                    圖6  顯示電路圖

3.2 程序設計

  • Keil軟件介紹

本次課程設計,我們采用Keil軟件進行C語言編程。Keil軟件是美國Keil Software公司開發的,它適合WindowsXP、Win7等系統,具有可視化操作界面,使用方便簡單,并且支持C51語言、匯編語言以及兩者混合編程等多種方式的單片機設計,KeilC51在兼容標準C語言的基礎上,又增加了很多與51系列單片機硬件相關的編譯特性,其生成的程序代碼運行的速度快,所需的存儲器空間小。

Keil軟件已被完全集成到一個功能強大的全新環境中,該開發環境集成了文件編譯處理、編譯鏈接、項目管理、工具引用、和仿真軟件模擬器等多種功能。Keil軟件具有豐富的庫函數,同時也帶有功能強大的集成開發調試工具,可以自動識別所編寫程序的語法錯誤,編譯效率也很高, 能將源文件編譯為二進制機器語言代碼,其軟件調試仿真功能也很強大,能通過單步、設置斷點等功能讓編程者了解CPU正在進行的程序,并能監控各變量以及各寄存器是否符合編程者的要求。

  • 程序編寫

單片機的應用系統由硬件和軟件組成,在硬件原理圖搭建完成上電之后,暫時還不能看到流水燈循環點亮的現象,還需要編寫程序控制單片機管腳電平的高低變化,來實現LED燈的各種亮滅功能。

先將P0、P1、P2、P3全部置1,即通入高電平,用16進制表示為0XFFH,則32個LED燈全部處于熄滅狀態。然后給P0口賦值0X7FH,即只有P0.0處于低電平時,LED1燈點亮。使用延時函數delay,并設置延時時間為2秒,延時時間一到P0口的值就變為0X3FH,即P0.0和P0.1都為高電平,LED2也開始點亮,如此循環P0口控制的8個LED燈全部點亮,當高電平變為低電平時,LED燈熄滅。P1、P2、P3口控制的LED燈閃亮和熄滅原理同P0口一樣,所以就可以看到LED燈的流水效果了。程序流程圖如圖7所示。


圖7 程序設計流程圖

  • 程序調試

    在程序設計好了之后,需要建立工程、寫C源文件、連接工程、獲得目標代碼Hex文件,所以程序的調試就顯得至關重要。剛開始程序總是編譯出錯,請教了老師之后才知道是程序的編寫存在語法錯誤,我們就仔細閱讀并檢查所編寫的程序,發現在給I/O 口的狀態賦初值時,多加了一個分號,導致語法錯誤,編譯不能正確通過。經過反復的檢查、編譯、調試,程序最終沒有錯誤,可以將程序代碼文件調入Proteus軟件,進行電路功能仿真。

3.3 電路功能仿真

在各部分電路設計的基礎上,按照總體電路圖在Proteus上一一進行器件選擇,并連接。將電路連接好后,為各個器件選擇合適的參數,然后調入已編譯好的目標代碼Hex文件,啟動仿真。根據LED燈是否發亮,判斷所設計的電路是否可以實現32個LED燈依次點亮、依次熄滅、對角閃亮、對角熄滅、間隔閃亮、間隔熄滅等多種功能。剛開始時,LED燈不亮,仔細檢查原來是將LED燈接反了,改正之后LED燈便可以正常發光了。電路仿真的結果為32個LED燈依次發亮、依次熄滅,并可以實現多種亮滅功能。根據仿真結果可知電路原理及程序無誤,可以進行PCB設計。

3.4 電路PCB設計

    在原理圖及仿真圖設計成功的情況下,設置正確的PCB外形和尺寸,按照課程設計所給的要求,設置環境參數。接著向PCB文件中導入網絡表及元件的封裝等數據,然后設置工作參數。根據要求設置布線規則。在上述準備工作都完成就緒的情況下,對原件進行布局,使盡量少的線重疊,以減少布線時跳線的出現。

3.5 安裝與調試

在安裝時要考慮LED燈正負極有沒有接反,所以安裝前,請教了老師怎樣辨認正負極。然后安裝好所有的元件后,按照電路圖逐一檢查電路有沒有漏焊的問題,接下來用萬用表逐一檢查有沒有虛焊、線路斷路或線路短路的問題。在線路沒有問題的情況下連接電源調試,加入電源以后, 32個LED燈可以循環點亮、依次熄滅,可以達到預期的效果。

4. 結果與結論

在設計電路圖的過程中,經過了多次分析和仿真驗證,并結合所給的器件清單最后確定了需要哪些器件來實現電路的功能,并且保證了所需要的元器件在給出的清單范圍內。經過Proteus軟件多次仿真和修改后,在仿真電路圖實現設計要求的前提下確定了最終的原理圖。然后在Altium Designer中畫出來所對應的原理圖,再導入到PCB設計的環境中,進行PCB設計。在經過小組內多次討論和聽取指導老師的意見后確定了PCB的最終布局,布線完成后打印輸出制成印刷電路板。將所有的元器件放到相應的封裝位置,查無誤后進行焊接。焊接完成,接入電源后,心形流水燈實現了32個LED燈依次點亮、依次熄滅,對角點亮、間隔點亮燈多種功能。電路能夠正常工作,得到了老師的肯定。

    總體說來,電路布局合理,采用了模塊化的布局方式即先布局各個功能模塊,再將各個功能模塊連接在一起組成最終的電路,但是電路還是存在一定的不合理之處,在布局合理美觀方面存在一些沖突,由于布線太過寬松,整體尺寸稍大。

5. 獲與致謝

經過為期兩周的課程設計,我收獲很多。在本次課程設計中,我們遇到了很多困難,比如電路圖畫錯、編程出現錯誤、軟件不會使用、元器件虛焊斷焊以及焊錯等。在這期間,我還是努力認真的去檢查和修改,雖然這個過程非常艱難,但還是值得我回味的。在整個課程設計過程中,我查閱了相關書籍和文獻資料,從中學習了一些單片機的工作原理以及怎樣去設計一個電子電路,還參照了一些以前做過的課程設計。這次課程設計,加深了我對以前學過的課本知識的理解和認識,以前有些課本上的理論知識總是弄不懂,這次通過自己親自動手去實踐,很多問題就通俗易懂了。本次課程設計,真正提高了自己的各項能力,比如獨立思考解決問題的能力,與人協作的能力,親自動手實踐的能力,真正的提高了自己的實踐技能,培養了自己的創新能力,為今后完成更高質量的項目打下了基礎。

這次我們能夠順利完成課程設計,是與老師們的辛勤勞動分不開的,所以在此,特別感謝課程設計輔導老師趙路華老師和單片機任課老師丁瑩亮老師,感謝他們在設計中的耐心指導和提出的寶貴建議,同時也感謝小組搭檔,和我共同度過這為期兩周的課程設計。

6. 參考文獻

[1] 林志琦.基于Proteus的單片機可視化軟硬件仿真[M] .北京:北京航空航天大學出版社,2006.

[2] 何立民.MCS-51單片機應用系統設計[M] .北京:北京航空航天大學出版社,1990.

[3] 張毅剛.單片機原理及應用[M] .北京:高等教育出版社,2004.

[4] 谷樹忠,劉文洲,姜航.Altium Designer教程-原理圖、PCB設計與仿真.北京:電子工業出版社,2010.

[5] 張陽天,韓異凡.Protel DXP電路設計[M].北京:高等教育出版社,2005.

7. 附件

7.1 元器件清單

    元器件清單如表2所示。

元器件名稱

型號規格

數量

備注

單片機

STC89C52

1

貼片

晶振

11.0592MHZ

1


電容

10uF

1

電解電容

30pF

2

瓷介電容

0.1uF

2


      電阻

100

36


10K

4


LED燈


32


USB接口


1



表2 元器件清單表

7.2 電路仿真圖

    電路仿真圖如圖8所示。

圖8  電路仿真圖

7.3 電路原理圖

    電路原理圖如圖9所示。

圖9 電路原理圖

7.4 PCB布線圖

    PCB布線圖如圖10所示。

圖10  PCB布線圖

7.5 實物圖

    實物圖如圖11所示。

圖11 實物圖

7.6 程序代碼


單片機源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #define              uint unsigned int
  4. #define              uchar unsigned char
  5. uchar code table[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐個點亮0~7
  6. uchar code table1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐個點亮7~0
  7. uchar code table2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐個滅0~7
  8. uchar code table3[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐個滅7~0
  9. void delay(uint t);              //延時
  10. void zg(uint t,uchar a);//兩邊逐個亮
  11. void qs(uint t,uchar a);//全部閃爍
  12. void zgxh(uint t,uchar a);  // 逆時針逐個點亮
  13. //void zgxh1(uint t,uchar a);  // 順時針逐個點亮
  14. void djs(uint t,uchar a);  //對角閃
  15. void lbzgm(uint t,uchar a);//兩邊逐個滅
  16. //void sszgm(uint t,uchar a); // 順時針逐個滅
  17. void nszgm(uint t,uchar a); // 逆時針逐個滅
  18. void sztl(uint t,uchar a);//順時逐個同步亮
  19. void nztl(uint t,uchar a);//逆時逐個同步亮
  20. void sztm(uint t,uchar a);//順時逐個同步滅
  21. void nztm(uint t,uchar a);//逆時逐個同步滅
  22. void hwzjl(uint t,uchar a); //橫往中間亮
  23. void hwzjm(uint t,uchar a); //橫往中間滅
  24. //void swzjl(uint t,uchar a); //豎往中間亮
  25. //void swzjm(uint t,uchar a); //豎往中間滅
  26. void nzdl(uint t,uchar a); //逆時逐段亮
  27. void nzdgl(uint t,uchar a);   //逆時逐段一個點亮
  28. void jgs(uint t,uchar a);   //間隔閃
  29. void zg(uint t,uchar a)//兩邊逐個亮
  30. {
  31.               uchar i,j;
  32.       for(j=0;j<a;j++)
  33.               {
  34.                               P0=P1=P2=P3=0xff;
  35.                               P0=0x7f;delay(t);
  36.                               for(i=0;i<7;i++)
  37.                               {
  38.                               P0=table1[i+1];
  39.                               P2=table1[i];
  40.                               delay(t);            
  41.                               }
  42.                               P2=0x00;P1=0xfe;
  43.                               delay(t);
  44.           for(i=0;i<7;i++)
  45.                               {
  46.                                             P1=table[i+1];
  47.                                           P3=table1[i];
  48.                                           delay(t);
  49.                               }
  50.                               P3=0x00;delay(t);
  51.                 }
  52. }
  53. void qs(uint t,uchar a)              //全部閃爍
  54. {
  55.               uchar j;
  56.               for(j=0;j<a;j++)
  57.               {
  58.                  P0=P1=P2=P3=0xff;
  59.                  delay(t);
  60.                  P0=P1=P2=P3=0x00;
  61.                  delay(t);
  62.               }               
  63. }
  64. void zgxh(uint t,uchar a)  // 逆時針逐個點亮
  65. {
  66.               uchar i,j;
  67.               for (j=0;j<a;j++)
  68.               {
  69.                             P0=P1=P2=P3=0xff;
  70.                             for (i=0;i<8;i++)
  71.                             {
  72.                                           P0=table1[i];
  73.                                           delay(t);
  74.                             }
  75.                             for(i=0;i<8;i++)
  76.                             {
  77.                                           P1=table[i];
  78.                                           delay(t);
  79.                             }
  80.                             for(i=0;i<8;i++)
  81.                             {
  82.                                           P3=table[i];
  83.                                           delay(t);
  84.                             }
  85.                             for(i=0;i<8;i++)
  86.                             {
  87.                                           P2=table[i];
  88.                                           delay(t);
  89.                             }
  90.               }
  91. }

  92. void nszgm(uint t,uchar a) // 逆時針逐個滅
  93. {
  94.               uchar i,j;
  95.               for(j=0;j<a;j++)
  96.               {
  97.                             P0=P1=P2=P3=0x00;
  98.                             for (i=0;i<8;i++)
  99.                             {
  100.                                           P0=table3[i];delay(t);            
  101.                             }
  102.                             for (i=0;i<8;i++)
  103.                             {
  104.                                           P1=table2[i];delay(t);            
  105.                             }
  106.                             for (i=0;i<8;i++)
  107.                             {
  108.                                           P3=table2[i];delay(t);            
  109.                             }
  110.                             for (i=0;i<8;i++)
  111.                             {
  112.                                           P2=table2[i];delay(t);            
  113.                             }
  114.               }
  115. }
  116. void zgxh1(uint t,uchar a)  // 順時針逐個點亮
  117. {
  118.               uchar i,j;
  119.               for (j=0;j<a;j++)
  120.               {
  121.                             P0=P1=P2=P3=0xff;
  122.                             for (i=0;i<8;i++)
  123.                             {
  124.                                           P2=table1[i];
  125.                                           delay(t);
  126.                             }
  127.                             for(i=0;i<8;i++)
  128.                             {
  129.         P3=table1[i];
  130.                                           delay(t);
  131.                             }
  132.                             for(i=0;i<8;i++)
  133.                             {
  134.                                           P1=table1[i];
  135.                                           delay(t);
  136.                             }
  137.                             for(i=0;i<8;i++)
  138.                             {
  139.                                           P0=table[i];
  140.                                           delay(t);
  141.                             }
  142.               }
  143. }
  144. void sszgm(uint t,uchar a) // 順時針逐個滅
  145. {
  146.               uchar i,j;
  147.               for(j=0;j<a;j++)
  148.               {
  149.                             P0=P1=P2=P3=0x00;
  150.                             for (i=0;i<8;i++)
  151.                             {
  152.                                           P2=table3[i];delay(t);            
  153.                             }
  154.                             for (i=0;i<8;i++)
  155.                             {
  156.                                           P3=table3[i];delay(t);            
  157.                             }
  158.                             for (i=0;i<8;i++)
  159.                             {
  160.                                           P1=table3[i];delay(t);            
  161.                             }
  162.                             for (i=0;i<8;i++)
  163.                             {
  164.                                           P0=table2[i];delay(t);            
  165.                             }
  166.               }
  167. }
  168. void djs(uint t,uchar a)  //對角閃
  169. {
  170.               uchar j;
  171.               for(j=0;j<a;j++)
  172.               {
  173.         P0=P1=P2=P3=0xff;
  174.                             P0=P3=0x00;
  175.                             delay(t);
  176.                             P0=P1=P2=P3=0xff;
  177.                             P1=P2=0x00;
  178.                             delay(t);
  179.               }
  180.             
  181. }
  182. void lbzgm(uint t,uchar a)//兩邊逐個滅
  183. {
  184.                 uchar i,j;
  185.                 for (j=0;j<a;j++)
  186.                 {
  187.                               P0=P2=0x00;
  188.                             P3=0x01;delay(t);
  189.                             for(i=7;i>1;i--)
  190.                             {
  191.                                           P1=table[i-1];P3=table1[i-2];
  192.                                           delay(t);
  193.                             }
  194.                             P1=0xfe;P3=0xff;delay(t);
  195.                             P1=0xff;P2=0x01;delay(t);
  196.                             for(i=7;i>1;i--)
  197.                             {
  198.                                           P0=table1[i-1];
  199.                                           P2=table1[i-2];
  200.                                           delay(t);
  201.                             }
  202.                             P0=0x7f;P2=0xff;delay(t);
  203.                             P0=0xff;delay(t);
  204.                 }
  205. }
  206. void sztl(uint t,uchar a)//順時逐個同步亮
  207. {
  208.               uchar i,j;
  209.               for(j=0;j<a;j++)
  210.               {
  211.                             P0=P1=P2=P3=0xff;
  212.                             for(i=0;i<8;i++)
  213.                             {
  214.                                           P0=table[i];
  215. P1=P2=P3=table1[i];
  216.    delay(t);
  217.                             }
  218.               }
  219. }

  220. void nztl(uint t,uchar a)//逆時逐個同步亮
  221. {
  222.               uchar i,j;
  223.               for(j=0;j<a;j++)
  224.               {
  225.                             P0=P1=P2=P3=0xff;
  226.                             for(i=0;i<8;i++)
  227.                             {
  228.                                           P0=table1[i];
  229.                                           P1=P2=P3=table[i];
  230.                                           delay(t);
  231.                             }
  232.               }
  233. }
  234. void sztm(uint t,uchar a)//順時逐個同步滅
  235. {
  236.               uchar i,j;
  237.               for(j=0;j<a;j++)
  238.               {
  239.                             P0=P1=P2=P3=0x00;
  240.                             for(i=0;i<8;i++)
  241.                             {
  242.                                           P0=table2[i];
  243.                                           P1=P2=P3=table3[i];
  244.                                           delay(t);
  245.                             }
  246.               }
  247. }
  248. void nztm(uint t,uchar a)//逆時逐個同步滅
  249. {
  250.               uchar i,j;
  251.               for(j=0;j<a;j++)
  252.               {
  253.                             P0=P1=P2=P3=0xff;
  254.                             for(i=0;i<8;i++)
  255.                             {
  256.                                           P0=table3[i];
  257. P1=P2=P3=table2[i];
  258. delay(t);
  259.                             }
  260.               }
  261. }
  262. void hwzjl(uint t,uchar a) //橫往中間亮
  263. {
  264.               uchar i,j;
  265.               for (j=0;j<a;j++)
  266.               {
  267.                             P0=P1=P2=P3=0xff;
  268.                             for(i=0;i<8;i++)
  269.                             {
  270.                                           P0=P2=P1=table1[i];
  271.                                           P3=table[i];delay(t);            
  272.                             }
  273.               }
  274. }
  275. void hwzjm(uint t,uchar a) //橫往中間滅
  276. {
  277.               uchar i,j;
  278.               for (j=0;j<a;j++)
  279.               {
  280.                             P0=P1=P2=P3=0x00;
  281.                             for(i=0;i<8;i++)
  282.                             {
  283.                                           P0=P2=P1=table3[i];
  284.                                           P3=table2[i];delay(t);            
  285.                             }
  286.               }
  287. }
  288. void swzjl(uint t,uchar a) //豎往中間亮
  289. {
  290.               uchar i,j;
  291.               for (j=0;j<a;j++)
  292.               {
  293.                             P0=P1=P2=P3=0xff;
  294.                             for(i=0;i<8;i++)
  295.                             {
  296.                                           P0=P2=P1=table[i];
  297.                                           P3=table1[i];delay(t);            
  298.                             }
  299.               }
  300. }
  301. void swzjm(uint t,uchar a) //豎往中間滅
  302. {
  303.               uchar i,j;
  304.               for (j=0;j<a;j++)
  305.               {
  306.                             P0=P1=P2=P3=0x00;
  307.                             for(i=0;i<8;i++)
  308.                             {
  309.                                           P0=P2=P1=table2[i];
  310.                                           P3=table3[i];delay(t);            
  311.                             }
  312.               }
  313. }
  314. void nzdl(uint t,uchar a) //逆時逐段亮
  315. {
  316.               uchar i,j;
  317.               for (j=0;j<a;j++)
  318.               {
  319.                             P0=P1=P2=P3=0xff;
  320.                             for(i=0;i<8;i++)
  321.                             {
  322.                                           P0=table1[i];
  323.                                           delay(t);
  324.                             }
  325.                             P0=0xff;
  326.                             for(i=0;i<8;i++)
  327.                             {
  328.                                           P1=table[i];
  329.                                           delay(t);
  330.                             }
  331.                             P1=0xff;
  332.                             for(i=0;i<8;i++)
  333.                             {
  334.                                           P3=table[i];
  335.                                           delay(t);
  336.                             }
  337.                             P3=0xff;
  338.                             for(i=0;i<8;i++)
  339.                             {
  340.                                           P2=table[i];
  341.                                           delay(t);
  342.                             }
  343.                             P2=0xff;                           
  344.               }
  345. }
  346. void nzdgl(uint t,uchar a)   //逆時逐段一個點亮
  347. {
  348.               uchar i,j,k,l;
  349.               for (j=0;j<a;j++)
  350.               {
  351.                             k=table1[0];
  352.                             P0=k;l=table[0];
  353.                             P1=P2=P3=l;delay(t);
  354.                             for(i=0;i<8;i++)
  355.                             {
  356.                                           k=_crol_(k,-1);
  357.                                           P0=k;
  358.                                           l=_crol_(l,1);
  359.                                           P1=P2=P3=l;
  360.                                           delay(t);
  361.                             }
  362.               }
  363. }
  364. void jgs(uint t,uchar a)   //間隔閃
  365. {
  366.               uchar j;
  367.               for (j=0;j<a;j++)
  368.               {
  369.                             P0=0x55;P1=P2=P3=0xaa;
  370.                             delay(t);
  371.                             P0=0xaa;P1=P2=P3=0x55;
  372.                             delay(t);            
  373.               }
  374. }
  375. void main()
  376. {
  377.               uchar i;

  378.               while(1)
  379.               {
  380.               zg(100,1);                                          //兩邊逐個亮
  381.               lbzgm(100,1);                            //兩邊逐個滅
  382.               jgs(300,10);
  383.               djs(100,20);  //對角閃
  384.               P1=P2=P3=0xff;
  385.               for(i=0;i<3;i++)
  386.               {
  387.               P0=0x00;delay(800);
  388.               P0=0xff;delay(800);
  389.               }
  390.               P0=0x00;
  391.               for(i=0;i<3;i++)
  392.               {
  393.               P1=0x00;delay(800);
  394.               P1=0xff;delay(800);
  395.               }
  396.               P1=0x00;
  397.               for(i=0;i<3;i++)
  398.               {
  399.               P3=0x00;delay(800);
  400.               P3=0xff;delay(800);
  401.               }
  402.               P3=0x00;
  403.               for(i=0;i<3;i++)
  404.               {
  405.               P2=0x00;delay(800);
  406.               P2=0xff;delay(800);
  407.               }
  408.               qs(500,3);
  409.               for(i=0;i<6;i++)
  410.               {
  411.               zgxh(50,1);
  412.               nszgm(50,1);
  413.               }
  414.               djs(100,20);  //對角閃
  415.               for(i=0;i<3;i++)
  416.               {
  417.               zg(100,1);                                          //兩邊逐個亮
  418.               lbzgm(100,1);                            //兩邊逐個滅
  419.               }
  420.               qs(200,10);djs(100,50);
  421.               for(i=0;i<5;i++)
  422.               {
  423.                             sztl(200,1); //順時逐個同步亮
  424.                             nztm(200,1);
  425.                             nztl(200,1);
  426.                             sztm(200,1); //順時逐個同步滅
  427.               }
  428.               djs(300,10);  //對角閃
  429.               nzdgl(300,10);   //逆時逐段一個點亮
  430.               jgs(300,10);   //間隔閃
  431.               for(i=0;i<3;i++)
  432.               {
  433.               zgxh(100,1);
  434.               nszgm(100,1);
  435.               }
  436.               for(i=0;i<5;i++)
  437.               {
  438.               zgxh1(100,1);
  439.               sszgm(100,1);
  440.               }
  441.    nzdl(200,3); //逆時逐段亮
  442.    jgs(50,100);   //間隔閃
  443.               P0=P1=P2=P3=0xff;
  444.               for (i=0;i<8;i++)
  445.               {
  446.                             P0=table1[i];
  447.                             delay(200);
  448.               }
  449.               for (i=0;i<8;i++)
  450.               {
  451.                             P1=table[i];
  452.                             delay(200);
  453.               }
  454.               for(i=0;i<3;i++)
  455.               {
  456.                             P0=P1=0x00;delay(200);
  457.                             P0=P1=0xff;delay(200);
  458.               }

  459.               for (i=0;i<8;i++)
  460.               {
  461.                             P2=table1[i];
  462.                             delay(200);
  463.               }
  464.               for (i=0;i<8;i++)
  465.               {
  466.                             P3=table1[i];
  467.                             delay(200);
  468.               }
  469.               for(i=0;i<3;i++)
  470.               {
  471.                             P2=P3=0x00;delay(200);
  472.                             P2=P3=0xff;delay(200);
  473.               }            
  474.               nzdgl(50,40);   //逆時逐段一個點亮
  475.               for(i=0;i<4;i++)
  476.               {
  477.               zg(100,1);qs(100,10);
  478.               lbzgm(100,1);
  479. ……………………

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

所有資料51hei提供下載:
心形流水燈設計報告.doc (560.54 KB, 下載次數: 104)


評分

參與人數 3黑幣 +13 收起 理由
stu + 3 共享資料的黑幣獎勵!
ASDFG3 + 5 贊一個!
南風木木 + 5 贊一個!

查看全部評分

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

使用道具 舉報

沙發
ID:314732 發表于 2018-4-23 20:34 | 只看該作者
很厲害 想頂一下
回復

使用道具 舉報

板凳
ID:353235 發表于 2018-7-1 01:53 來自手機 | 只看該作者
不錯可以把原理圖和程序發給我嗎?郵箱:1298714905@qq.com
回復

使用道具 舉報

地板
ID:112406 發表于 2018-11-10 12:13 | 只看該作者
很實用的教程
回復

使用道具 舉報

5#
ID:772069 發表于 2020-6-7 18:15 | 只看該作者
贊一個
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区高清 | 在线观看国产视频 | 天天操 夜夜操 | 亚洲一区二区三区免费视频 | a在线免费观看视频 | 日一日操一操 | 99国产精品久久久久老师 | 中文字幕三区 | 99热在线免费 | 国产伦精品一区二区三区视频金莲 | 黄色大片在线免费观看 | 久久国产综合 | 97人澡人人添人人爽欧美 | 久在线 | 欧美一区二区三区在线 | 九九九视频在线观看 | 91精品国产欧美一区二区 | 99精品网| 日韩国产精品一区二区三区 | 亚洲永久免费 | 中国一级特黄毛片大片 | 日韩毛片网 | 国产午夜精品视频 | 中文字幕国产第一页 | 九九久久精品视频 | 欧美video | 国产一区二区久久久 | 男女视频在线观看网站 | 99久久久久久99国产精品免 | 国产一区二区三区在线 | 97免费视频在线观看 | 久久久久国产精品一区二区 | www性色| 欧美三区视频 | 国产日产欧产精品精品推荐蛮挑 | 国产一区二区三区久久久久久久久 | 精品熟人一区二区三区四区 | 日韩在线看片 | 国产精久久久久久久妇剪断 | 酒色成人网 | 亚洲一区有码 |