<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)的走馬燈C語言程序

          51單片機(jī)的走馬燈C語言程序

          作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          #include
          unsigned char RunMode;
          void Delay1ms(unsigned int count)
          {
          unsigned int i,j;
          for(i=0;i
          for(j=0;j<120;j++);
          }
          unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0~7
          0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
          void Display(unsigned char Value)
          {
          P3 = LEDDisplayCode[Value];
          }
          void LEDFlash(unsigned char Count)
          {
          unsigned char i;
          bit Flag;
          for(i = 0; i
          {
          Flag = !Flag;
          if(Flag)
          Display(RunMode);
          else
          Display(0x10);
          Delay1ms(100);
          }
          Display(RunMode);
          }
          unsigned char GetKey(void)
          {
          unsigned char KeyTemp,CheckValue,Key = 0x00;
          CheckValue = P2&0x32;
          if(CheckValue==0x32)
          return 0x00;
          Delay1ms(10);
          KeyTemp = P2&0x32;
          if(KeyTemp==CheckValue)
          return 0x00;
          if(!(CheckValue&0x02))
          Key|=0x01;
          if(!(CheckValue&0x10))
          Key|=0x02;
          if(!(CheckValue&0x20))
          Key|=0x04;
          return Key;
          }
          unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
          void InitialTimer2(void)
          {
          T2CON = 0x00; //16 Bit Auto-Reload Mode
          TH2 = RCAP2H = 0xFC; //重裝值,初始值 TL2 = RCAP2L = 0x18;
          ET2=1; //定時(shí)器 2 中斷允許
          TR2 = 1; //定時(shí)器 2 啟動(dòng)
          EA=1;
          }
          unsigned int code SpeedCode[]={ 1, 2, 3, 5, 8, 10, 14, 17, 20, 30,
          40, 50, 60, 70, 80, 90, 100, 120, 140, 160,
          180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
          void SetSpeed(unsigned char Speed)
          {
          SystemSpeed =SpeedCode[Speed];
          }
          void LEDShow(unsigned int LEDStatus)
          {
          P1 = ~(LEDStatus&0x00FF);
          P0 = ~((LEDStatus>>8)&0x00FF);
          }
          void InitialCPU(void)
          {
          RunMode = 0x00;
          TimerCount = 0;
          SystemSpeedIndex = 10;
          P1 = 0x00;
          P0 = 0x00;
          P2 = 0xFF;
          P3 = 0x00;
          Delay1ms(500);
          P1 = 0xFF;
          P0 = 0xFF;
          P2 = 0xFF;
          P3 = 0xFF;
          SetSpeed(SystemSpeedIndex);
          Display(RunMode);
          }
          //Mode 0
          unsigned int LEDIndex = 0;
          bit LEDDirection = 1,LEDFlag = 1;
          void Mode_0(void)
          {
          LEDShow(0x0001<
          LEDIndex = (LEDIndex+1);
          }
          //Mode 1
          void Mode_1(void)
          {
          LEDShow(0x8000>>LEDIndex);
          LEDIndex = (LEDIndex+1);
          }
          //Mode 2
          void Mode_2(void)
          {
          if(LEDDirection)
          LEDShow(0x0001<
          else
          LEDShow(0x8000>>LEDIndex);
          if(LEDIndex==15)
          LEDDirection = !LEDDirection;
          LEDIndex = (LEDIndex+1);
          }
          //Mode 3
          void Mode_3(void)
          {
          if(LEDDirection)
          LEDShow(~(0x0001<
          else
          LEDShow(~(0x8000>>LEDIndex));
          if(LEDIndex==15)
          LEDDirection = !LEDDirection;
          LEDIndex = (LEDIndex+1);
          }
          //Mode 4
          void Mode_4(void)
          {
          if(LEDDirection)
          {
          if(LEDFlag)
          LEDShow(0xFFFE<
          else
          LEDShow(~(0x7FFF>>LEDIndex));
          }
          else
          {
          if(LEDFlag)
          LEDShow(0x7FFF>>LEDIndex);
          else
          LEDShow(~(0xFFFE<
          }
          if(LEDIndex==15)
          {
          LEDDirection = !LEDDirection;
          if(LEDDirection) LEDFlag = !LEDFlag;
          }
          LEDIndex = (LEDIndex+1);
          }
          //Mode 5
          void Mode_5(void)
          {
          if(LEDDirection)
          LEDShow(0x000F<
          else
          LEDShow(0xF000>>LEDIndex);
          if(LEDIndex==15)
          LEDDirection = !LEDDirection;
          LEDIndex = (LEDIndex+1);
          }
          //Mode 6
          void Mode_6(void)
          {
          if(LEDDirection)
          LEDShow(~(0x000F<
          else
          LEDShow(~(0xF000>>LEDIndex));
          if(LEDIndex==15)
          LEDDirection = !LEDDirection;
          LEDIndex = (LEDIndex+1);
          }
          //Mode 7
          void Mode_7(void)
          {
          if(LEDDirection)
          LEDShow(0x003F<
          else
          LEDShow(0xFC00>>LEDIndex);
          if(LEDIndex==9)
          LEDDirection = !LEDDirection;
          LEDIndex = (LEDIndex+1);
          }
          //Mode 8
          void Mode_8(void)
          {
          LEDShow(++LEDIndex);
          }
          void TimerEventRun(void)
          {
          if(RunMode==0x00)
          {
          Mode_0();
          }
          else if(RunMode ==0x01)
          {
          Mode_1();
          }
          else if(RunMode ==0x02)
          {
          Mode_2();
          }
          else if(RunMode ==0x03)
          {
          Mode_3();
          }
          else if(RunMode ==0x04)
          {
          Mode_4();
          }
          else if(RunMode ==0x05)
          {
          Mode_5();
          }
          else if(RunMode ==0x06)
          {
          Mode_6();
          }
          else if(RunMode ==0x07)
          {
          Mode_7();
          }
          else if(RunMode ==0x08)
          {
          Mode_8();
          }
          }
          void Timer2(void) interrupt 5 using 3
          {
          TF2 = 0; //中斷標(biāo)志清除( Timer2 必須軟件清標(biāo)志!)
          if(++TimerCount>=SystemSpeed)
          {
          TimerCount = 0;
          TimerEventRun();
          }
          }
          unsigned char MusicIndex = 0;
          void KeyDispose(unsigned char Key)
          {
          if(Key&0x01)
          {
          LEDDirection = 1;
          LEDIndex = 0;
          LEDFlag = 1;
          RunMode = (RunMode+1)%9;
          Display(RunMode);
          }
          if(Key&0x02)
          {
          if(SystemSpeedIndex>0)
          {
          --SystemSpeedIndex;
          SetSpeed(SystemSpeedIndex);
          }
          else
          {
          LEDFlash(6);
          }
          }
          if(Key&0x04)
          {
          if(SystemSpeedIndex<28)
          {
          ++SystemSpeedIndex;
          SetSpeed(SystemSpeedIndex);
          }
          else
          {
          LEDFlash(6);
          }
          }
          }
          main()
          {
          unsigned char Key;
          InitialCPU();
          InitialTimer2();
          while(1)
          {
          Key = GetKey();
          if(Key!=0x00)
          {
          KeyDispose(Key);
          }
          }
          }


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();