一、單片機基礎知識 單片機又稱單片微控制器它不是完成某一個邏輯功能的芯片而是把一個計算機系統集成到一個芯片上。概括的講一塊芯片就成了一臺計算機。 單片機具有體積小、功能強、應用面廣等優點目前正以前所未見的速度取代著傳統電子線路構成的經典系統蠶食著傳統數字電路與模擬電路固有的領地。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時學習使用單片機了解計算機原理與結構的最佳選擇。 現在這種單片機的使用領域已十分廣泛。彩電、冰箱、空調、錄像機、VCD、遙控器、 游戲機、電飯煲等無處不見單片機的影子單片機早已深深地融入我們每個人的生活之中。 單片機能大大地提高這些產品的智能性易用性及節能性等主要性能指標給我們的生活帶來舒適和方便的同時在工農業生產上也極大地提高了生產效率和產品質量。單片機按用途大體上可分為兩類一種是通用型單片機另一種是專用型單片機。 MCS-51 單片機是美國 INTEL 公司于 1980 年推出的產品與 MCS- 48 單片機相比它的 結構更先進功能更強在原來的基礎上增加了更多的電路單元和指令指令數達111 條 MCS-51 單片機可以算是相當成功的產品一直到現在MCS-51 系列或其兼容的單片機仍是 應用的主流產品各高校及專業學校的培訓教材仍與 MSC-51 單片機作為代表進行理論基礎學習。MCS-51 系列單片機主要包括 8031、8051 和 8751 等通用產品。 2 單片機的發展趨勢 單片機現在可以說是百花齊放百家爭鳴的時期世界上各大芯片制造公司都推出了自己的單片機從 8 位、16 位到 32 位數不勝數應有盡有有與主流 C51 系列兼容的也 有不兼容的但它們各具特色互成互補為單片機的應用提供了廣闊的天地。現在常規的單片機普遍都是將中央處理器CPU、隨機存取數據存儲RAM、只讀程序存儲器ROM、 并行和串行通信接口中斷系統、定時電路、時鐘電路集成在一塊單一的芯片上增強型的單片機集成了如 A/D 轉換器、PMW脈寬調制電路、WDT看門狗、有些單片機將 LCD 液晶驅動電路都集成在單一的芯片上這樣單片機包含的單元電路就更多功能就越強大。甚至單片機廠商還可以根據用戶的要求量身定做制造出具有自己特色的單片機芯片。 此外現在的產品普遍要求體積小、重量輕這就要求單片機除了功能強和功耗低外還要求其體積要小。現在的許多單片機都具有多種封裝形式其中 SMD表面封裝越來越受歡迎使得由單片機構成的系統正朝微型化方向發展。現在雖然單片機的品種繁多各具特色但仍以 89C51 為核心的單片機占主流。 2.1 框圖設計
2.4軟件設計 要求用 AT89S52 芯片控制跑馬燈流水燈整個系統有 8 種跑馬燈模式可以選擇K1 是選擇模式鍵同時將相應的模式在 LED 七段數碼管中顯示出來K2 可以對跑馬燈 的速度進行加速K3 可以對跑馬燈的速度進行減速。整個系統可以實現對跑馬燈模式的多層控制還有加減速。
本課程設計是采用80C51單片機設計的可以調控的跑馬燈通過keil進行c語言編程 通過protues進行軟件硬件仿真。本設計成果主要通過按鍵開關對跑馬燈進行控制包括跑馬燈模式的選擇、跑馬燈模式的顯示、跑馬燈速度變化控制。 1、C語言編程 1定義 #include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar ModeNo; uint Speed; uchar TCount=0; uchar Idx; uchar mb_Count=0; bit Dirtect=1; 2段碼表 uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; 3調速表 uint codesTable[]={0,1,3,5,7,9,15,100,200,230,300,350}; 4延時 void Delay(uint x) { uchar i; while(x--) for(i=0;i<120;i++); } 5檢測按鍵 uchar GetKey() { ............. return K; } 616支LED顯示 void Led_Demo(uint Led16) { ................. P0=(uchar)(Led16>>8); } 7定時器2 void T0_INT() interrupt 1 { ................... mb_Count=(mb_Count+1)%16; } 8鍵盤處理 void KeyProcess(uchar Key) { switch(Key) { .................... if(Idx<15) Speed=sTable[++Idx]; } } 9主程序 void main() { uchar Key; P0=P1=P2=P3=0xFF; ModeNo=0;Idx=4; P3=DSY_CODE[ModeNo]; IE=0x82; TMOD=0x00; TR0=1; while(1) { Key=GetKey(); if(Key!=0) KeyProcess(Key); } }
2、軟件硬件仿真 軟件調試是通過對程序的匯編、連接、執行來發現程序中存在的語法錯誤與邏輯錯誤并加以排除糾正的過程。本設計通過protues進行軟件硬件仿真設計的原理圖
無標題.png (62.52 KB, 下載次數: 23)
下載附件
2017-12-28 17:01 上傳
六、附錄 本課程設計的源程序 - #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int ucharModeNo; uint Speed; uchar TCount=0; uchar Idx; uchar mb_Count=0;
- bit Dirtect=1;
-
- uchar code DSY_CODE[]={0xC0,0XF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; uint codesTable[]={0,1,3,5,7,9,15,100,200,230,300,350};
-
-
- void Delay(uint x)
- { uchar i; while(x--)for(i=0;i<120;i++);
- }
-
- uchar GetKey() { uchar K;if(P2==0xFF) return 0;
- Delay(10);
- switch(P2)
- {
- case 0xFE: K=1;break; case 0xFD: K=2;break; case0xFB: K=3;break;
- default: K=0;
- }
- while (P2!=0xFF);
- return K; } void Led_Demo(uint Led16) {
- P1=(uchar)(Led16&0x00FF);
- P0=(uchar)(Led16>>8);
- }
-
- void T0_INT() interrupt 1
- {if(++TCount<Speed) return; TCount=0; switch(ModeNo) { case0:Led_Demo(0x0001<<mb_Count);break; case1:Led_Demo(0x8000>>mb_Count);break; case2:if(Dirtect)Led_Demo(0x000F<<mb_Count);
- Else
- Led_Demo(0xF000>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect;break; case3:if(Dirtect)Led_Demo(~(0x000F<<mb_Count)); else
- Led_Demo(~(0xF000>>mb_Count));if(mb_Count==15) Dirtect=!Dirtect; break; case4:if(Dirtect)Led_Demo(0x003F<<mb_Count);
- else
- Led_Demo(0xFC00>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect;break; case5:if(Dirtect)Led_Demo(0x0001<<mb_Count);
- else
- Led_Demo(0x8000>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect; break; case6:if(Dirtect)Led_Demo(~(0x0001<<mb_Count));
- else
- Led_Demo(~(0x8000>>mb_Count));if(mb_Count==15) Dirtect=!Dirtect;break; case7:if(Dirtect)Led_Demo(0xFFFE<<mb_Count);
- else
- Led_Demo(0x7FFF>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect;break; default:break; }mb_Count=(mb_Count+1)%16;
- }
- void KeyProcess(uchar Key)
- { switch(Key) {
- case 1:
- Dirtect=1;mb_Count=0;
- ModeNo=(ModeNo+1)%8;
- P3=DSY_CODE[ModeNo];break;
- case 2:
- if(Idx>1)Speed=sTable[--Idx];break;
- case 3:
- if(Idx<15) Speed=sTable[++Idx];
- }
- }
- void main() { uchar Key;
- P0=P1=P2=P3=0xFF;
- ModeNo=0;Idx=4;
- P3=DSY_CODE[ModeNo];
- IE=0x82;
- TMOD=0x00; TR0=1;while(1) { Key=GetKey(); if(Key!=0) KeyProcess(Key);
- }
- }
復制代碼
全部資料51hei下載地址:
基于單片機的跑馬燈控制系統設計.zip
(566.11 KB, 下載次數: 15)
2017-12-28 16:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|