標(biāo)題: 單片機(jī)跑馬燈控制系統(tǒng)仿真 [打印本頁(yè)]
作者: 驅(qū)蚊器無群 時(shí)間: 2017-12-28 17:03
標(biāo)題: 單片機(jī)跑馬燈控制系統(tǒng)仿真
一、單片機(jī)基礎(chǔ)知識(shí) 單片機(jī)又稱單片微控制器它不是完成某一個(gè)邏輯功能的芯片而是把一個(gè)計(jì)算機(jī)系統(tǒng)集成到一個(gè)芯片上。概括的講一塊芯片就成了一臺(tái)計(jì)算機(jī)。
單片機(jī)具有體積小、功能強(qiáng)、應(yīng)用面廣等優(yōu)點(diǎn)目前正以前所未見的速度取代著傳統(tǒng)電子線路構(gòu)成的經(jīng)典系統(tǒng)蠶食著傳統(tǒng)數(shù)字電路與模擬電路固有的領(lǐng)地。它的體積小、質(zhì)量輕、價(jià)格便宜、為學(xué)習(xí)、應(yīng)用和開發(fā)提供了便利條件。同時(shí)學(xué)習(xí)使用單片機(jī)了解計(jì)算機(jī)原理與結(jié)構(gòu)的最佳選擇。
現(xiàn)在這種單片機(jī)的使用領(lǐng)域已十分廣泛。彩電、冰箱、空調(diào)、錄像機(jī)、VCD、遙控器、
游戲機(jī)、電飯煲等無處不見單片機(jī)的影子單片機(jī)早已深深地融入我們每個(gè)人的生活之中。 單片機(jī)能大大地提高這些產(chǎn)品的智能性易用性及節(jié)能性等主要性能指標(biāo)給我們的生活帶來舒適和方便的同時(shí)在工農(nóng)業(yè)生產(chǎn)上也極大地提高了生產(chǎn)效率和產(chǎn)品質(zhì)量。單片機(jī)按用途大體上可分為兩類一種是通用型單片機(jī)另一種是專用型單片機(jī)。
MCS-51 單片機(jī)是美國(guó) INTEL 公司于 1980 年推出的產(chǎn)品與 MCS- 48 單片機(jī)相比它的
結(jié)構(gòu)更先進(jìn)功能更強(qiáng)在原來的基礎(chǔ)上增加了更多的電路單元和指令指令數(shù)達(dá)111 條 MCS-51 單片機(jī)可以算是相當(dāng)成功的產(chǎn)品一直到現(xiàn)在MCS-51 系列或其兼容的單片機(jī)仍是
應(yīng)用的主流產(chǎn)品各高校及專業(yè)學(xué)校的培訓(xùn)教材仍與 MSC-51 單片機(jī)作為代表進(jìn)行理論基礎(chǔ)學(xué)習(xí)。MCS-51 系列單片機(jī)主要包括 8031、8051 和 8751 等通用產(chǎn)品。
2 單片機(jī)的發(fā)展趨勢(shì)
單片機(jī)現(xiàn)在可以說是百花齊放百家爭(zhēng)鳴的時(shí)期世界上各大芯片制造公司都推出了自己的單片機(jī)從 8 位、16 位到 32 位數(shù)不勝數(shù)應(yīng)有盡有有與主流 C51 系列兼容的也
有不兼容的但它們各具特色互成互補(bǔ)為單片機(jī)的應(yīng)用提供了廣闊的天地。現(xiàn)在常規(guī)的單片機(jī)普遍都是將中央處理器CPU、隨機(jī)存取數(shù)據(jù)存儲(chǔ)RAM、只讀程序存儲(chǔ)器ROM、
并行和串行通信接口中斷系統(tǒng)、定時(shí)電路、時(shí)鐘電路集成在一塊單一的芯片上增強(qiáng)型的單片機(jī)集成了如 A/D 轉(zhuǎn)換器、PMW脈寬調(diào)制電路、WDT看門狗、有些單片機(jī)將 LCD
液晶驅(qū)動(dòng)電路都集成在單一的芯片上這樣單片機(jī)包含的單元電路就更多功能就越強(qiáng)大。甚至單片機(jī)廠商還可以根據(jù)用戶的要求量身定做制造出具有自己特色的單片機(jī)芯片。 此外現(xiàn)在的產(chǎn)品普遍要求體積小、重量輕這就要求單片機(jī)除了功能強(qiáng)和功耗低外還要求其體積要小。現(xiàn)在的許多單片機(jī)都具有多種封裝形式其中 SMD表面封裝越來越受歡迎使得由單片機(jī)構(gòu)成的系統(tǒng)正朝微型化方向發(fā)展。現(xiàn)在雖然單片機(jī)的品種繁多各具特色但仍以 89C51 為核心的單片機(jī)占主流。
2.1 框圖設(shè)計(jì)
2.4軟件設(shè)計(jì)
要求用 AT89S52 芯片控制跑馬燈流水燈整個(gè)系統(tǒng)有 8 種跑馬燈模式可以選擇K1 是選擇模式鍵同時(shí)將相應(yīng)的模式在 LED 七段數(shù)碼管中顯示出來K2 可以對(duì)跑馬燈
的速度進(jìn)行加速K3 可以對(duì)跑馬燈的速度進(jìn)行減速。整個(gè)系統(tǒng)可以實(shí)現(xiàn)對(duì)跑馬燈模式的多層控制還有加減速。
本課程設(shè)計(jì)是采用80C51單片機(jī)設(shè)計(jì)的可以調(diào)控的跑馬燈通過keil進(jìn)行c語言編程 通過protues進(jìn)行軟件硬件仿真。本設(shè)計(jì)成果主要通過按鍵開關(guān)對(duì)跑馬燈進(jìn)行控制包括跑馬燈模式的選擇、跑馬燈模式的顯示、跑馬燈速度變化控制。
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調(diào)速表
uint codesTable[]={0,1,3,5,7,9,15,100,200,230,300,350};
4延時(shí)
void Delay(uint x) { uchar i; while(x--) for(i=0;i<120;i++);
}
5檢測(cè)按鍵
uchar GetKey()
{
............. return K; }
616支LED顯示
void Led_Demo(uint Led16)
{
.................
P0=(uchar)(Led16>>8);
}
7定時(shí)器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、軟件硬件仿真 軟件調(diào)試是通過對(duì)程序的匯編、連接、執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯(cuò)誤與邏輯錯(cuò)誤并加以排除糾正的過程。本設(shè)計(jì)通過protues進(jìn)行軟件硬件仿真設(shè)計(jì)的原理圖
無標(biāo)題.png (62.52 KB, 下載次數(shù): 23)
下載附件
2017-12-28 17:01 上傳
六、附錄 本課程設(shè)計(jì)的源程序
- #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);
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
基于單片機(jī)的跑馬燈控制系統(tǒng)設(shè)計(jì).zip
(566.11 KB, 下載次數(shù): 15)
2017-12-28 16:57 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: wuxishun 時(shí)間: 2017-12-28 18:35
很受用的資料
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |