欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(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ì)的原理圖            




六、附錄
本課程設(shè)計(jì)的源程序
  1. #include<reg52.h>
  2. #define uchar unsigned char                                                                        
  3. #define uint unsigned int ucharModeNo; uint Speed; uchar TCount=0; uchar Idx; uchar mb_Count=0;
  4. bit Dirtect=1;                                                                                                  
  5.       
  6. 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};
  7.       
  8.       
  9. void Delay(uint x)                                                                                            
  10. { uchar i; while(x--)for(i=0;i<120;i++);
  11. }                                                                                                                     
  12.       
  13. uchar GetKey() { uchar K;if(P2==0xFF) return 0;
  14. Delay(10);
  15. switch(P2)
  16. {                                                                                                                       
  17. case 0xFE: K=1;break;         case 0xFD: K=2;break;     case0xFB: K=3;break;         
  18. default:   K=0;
  19. }                                                                                                                       
  20. while (P2!=0xFF);                                                                                             
  21. return K; }  void Led_Demo(uint Led16) {
  22. P1=(uchar)(Led16&0x00FF);
  23. P0=(uchar)(Led16>>8);
  24. }
  25.       
  26. void T0_INT() interrupt 1
  27. {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);
  28. Else
  29. Led_Demo(0xF000>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect;break; case3:if(Dirtect)Led_Demo(~(0x000F<<mb_Count)); else         
  30. Led_Demo(~(0xF000>>mb_Count));if(mb_Count==15) Dirtect=!Dirtect; break; case4:if(Dirtect)Led_Demo(0x003F<<mb_Count);
  31. else                                                                                                                  
  32. Led_Demo(0xFC00>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect;break; case5:if(Dirtect)Led_Demo(0x0001<<mb_Count);
  33. else                                                                                                                  
  34. Led_Demo(0x8000>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect; break; case6:if(Dirtect)Led_Demo(~(0x0001<<mb_Count));
  35. else                                                                                                                  
  36. Led_Demo(~(0x8000>>mb_Count));if(mb_Count==15) Dirtect=!Dirtect;break; case7:if(Dirtect)Led_Demo(0xFFFE<<mb_Count);
  37. else                                                                                                                  
  38. Led_Demo(0x7FFF>>mb_Count);if(mb_Count==15) Dirtect=!Dirtect;break; default:break; }mb_Count=(mb_Count+1)%16;
  39. }
  40.   void KeyProcess(uchar Key)
  41. { switch(Key) {     
  42. case 1:
  43. Dirtect=1;mb_Count=0;
  44. ModeNo=(ModeNo+1)%8;
  45. P3=DSY_CODE[ModeNo];break;                                                                     
  46. case 2:
  47. if(Idx>1)Speed=sTable[--Idx];break;                                                               
  48. case 3:
  49. if(Idx<15) Speed=sTable[++Idx];
  50. }
  51. }
  52.   void main() { uchar Key;
  53. P0=P1=P2=P3=0xFF;
  54. ModeNo=0;Idx=4;
  55. P3=DSY_CODE[ModeNo];
  56. IE=0x82;
  57. TMOD=0x00; TR0=1;while(1) { Key=GetKey(); if(Key!=0) KeyProcess(Key);
  58. }
  59. }
復(fù)制代碼

全部資料51hei下載地址:
基于單片機(jī)的跑馬燈控制系統(tǒng)設(shè)計(jì).zip (566.11 KB, 下載次數(shù): 15)



作者: wuxishun    時(shí)間: 2017-12-28 18:35
很受用的資料




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1