專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

手動(dòng)可調(diào)變速的流水燈程序

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月15日   【字體:

/*********** 2011.7 JQ--V0.1 宏晶公司STC單片機(jī)開發(fā)板 ************

$ 程序作用:手動(dòng)可調(diào)變速的流水燈的效果

$ 程序作者: JQ(QQ:489555226  Email:489555226@qq.com)

$ 程序版本: JQ--V0.1

$ 編制日期: 2011-07-01

$ 編譯器:Keil C uVision2

$ 所用芯片:STC89C52,11.0592M晶振

$ 程序開發(fā)板:JQ--V0.1版本

$ 程序通俗易懂  注釋詳細(xì)  結(jié)構(gòu)化模塊是51單片機(jī)初學(xué)愛好者的理想選擇

******************** JQ--V0.1 宏晶公司STC單片機(jī)開發(fā)板 **********************/

#include<reg52.h>      //52單片機(jī)頭文件定義

#define uchar unsigned char    //數(shù)據(jù)類型uchar的宏定義
#define uint  unsigned int   //數(shù)據(jù)類型uint的宏定義

#define led P0          //P0口宏定義
void init();
uchar count,speed,num;  //全局變量定義

sbit key =P3^2;

void delay(uint k);

uchar code huayang[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,};//0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0x00,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0x55,0x55,0x00};   //花樣跑馬燈數(shù)組定義  隨便改變數(shù)組里面的值就可以改變花樣(該數(shù)組有27個(gè)數(shù)值)
void main(void)   //主函數(shù)
{
 uchar i;
 init();
 while(1)         //while死循環(huán)
 {
  for(i=0;i<8;i++)     //0-26共27次循環(huán)依次取出數(shù)組中的數(shù)(i小于多少由數(shù)組中的數(shù)決定)
  {
   led=huayang[i];   //把取出的數(shù)以總線的方式賦給led即P0口
  }
 }
}

 

void init()   //初始化
{
 speed=0;
 TMOD=0x01;   //定時(shí)器T0的應(yīng)用   后面會(huì)詳細(xì)講
 TH0=(65536-speed)/256;
 TL0=(65536-speed)%256;
 EA=1;
 ET0=1;
 TR0=1;
}


void timer0() interrupt 1   //定時(shí)器T0中斷   后面會(huì)詳細(xì)講
{
  TH0=(65536-speed)/256;
  TL0=(65536-speed)%256;
  count++;
  if(count==5000)
  {
   count=0;

   if(key==0)      //按鍵消抖
   { delay(5);
    if(key==0)
     num++;
     while(!key);   //松手檢測(cè)  只要當(dāng)key==1時(shí)才會(huì)退出這個(gè)while循環(huán)!

     if(num==1)
     {
      speed=50;  //速度調(diào)節(jié)(也就是改變定時(shí)器的初值。
     }

     if(num==2)
     {
      speed=100;
     }

     if(num==3)
     {
      speed=150;
     }
    

     if(num==4)
     {
      speed=200;
     }
   }
  }
 if(num==5)  num=0;
 
}

 
void delay(uint k)   //延時(shí)子函數(shù)
{
   while(--k);
}


//這過程序用到了定時(shí)器  后面會(huì)跟大家詳細(xì)講解的! 謝謝大家。!
//對(duì)于調(diào)速函數(shù)可以進(jìn)行修改,使其變得更加的簡潔,speed=num*50;if(num==6)  num=0;//防止程序出錯(cuò),所以進(jìn)行了限制!

關(guān)閉窗口

相關(guān)文章