天堂草原最受欢迎的角色,天堂动漫,天堂在线,色天堂下载,天堂中文在线资源,亚洲男人天堂

技術熱線: 4007-888-234
設計開發

專注差異化嵌入式產品解決方案 給智能產品定制注入靈魂給予生命

開發工具

提供開發工具、應用測試 完善的開發代碼案例庫分享

技術支持

從全面的產品導入到強大技術支援服務 全程貼心伴隨服務,創造無限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產品競爭力

新聞中心

提供最新的單片機資訊,行業消息以及公司新聞動態

LED流水燈

更新時間: 2019-03-26
閱讀量:1882

LED流水燈
 

/****************************************************************************
*                   (C) Copyright 2008,單片機初學者
*                          All Rights reserved.
* 項 目 名 稱 :  EDN51超級流水燈          
* 本 文件名稱 :  ledshow3.c  
* 當 前 版 本 :  V1.0       
* 完 成 日 期 :  2008年4月7日
* 描       述 :
*                 此程序實現,8個燈從第一個開始依次漸亮,直到最后一個。再從最
*   后一個起漸暗,直到第一個。如此循環往復。這才是真正的流水燈
*            
*****************************************************************************/

# include

/****************************定義一下,方便使用*******************************/

# define led P0     //led接在P0口
# define Ton 40        //基準脈寬0.04ms
# define true 1


code unsigned char stop[3] _at_ 0x3B;   //Mon51用,絕對地址引用

unsigned char LEDflag = 0;    //全局變量,最大255,保存T0中斷次數
static unsigned char ledon[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

/*****************************************************************************
** 函數名稱: timer_init()
** 入口參數:無
** 出口參數:無
** 功能描述: 定時器初始化,T0模式2,8為自動載入
*****************************************************************************/
void timer_init()    //定時器初始化
{
 TMOD = 0x02;    //T0 方式2,8位自動載入
 TH0 =  256 - Ton;   //T0初始值
 TL0 =  256 - Ton;   //重載值
 TR0 = true;     //啟動T0
 ET0 = true;     //開T0,T1中斷
 EA = true;     //全局中斷允許
}

/*****************************************************************************
** 函數名稱: time0_int()
** 入口參數:中斷1
** 出口參數:無
** 功能描述: 使用工作組3,使用工作組0的時候會出錯,根據反匯編分析,應該是中斷和led
** show的函數用了同一組寄存器,導致變量被修改,程序運行混亂
*****************************************************************************/
void time0_int() interrupt 1 using 3  //T0中斷函數,中斷1,使用工作組3
{
 LEDflag++;      //修改LEDflag
}


/*****************************************************************************
** 函數名稱: led_show4()
** 入口參數:無
** 出口參數:無
** 功能描述: 聲明臨時變量i,j,j用來控制數組ledon的下標,點亮不同的led,i用來控制
**    亮度, 實現led亮度漸變
*****************************************************************************/

led_show4()
{
 unsigned char i = 0,j = 0;  // i初始化

 for(j = 0;j<=7;j++){
 i = 0;       // i初始化
 while(i!=255)     // 由暗變亮
 {
  if(LEDflag == 0)  // 點亮
  {
  led = ledon[j];
  }
  if(LEDflag == i)  // 熄滅
  {
  led = 0xff;
  }
  if(LEDflag == 255)    //修改變量
  {
   i++;      
  }
 }
 }

 for(j=7;j>=0;j--){
 i = 0;       // i初始化    
 while(i!=255)     // 由亮變暗
 {
  if(LEDflag == 0)  // 熄滅
  {
  led = 0xff;
  }
  if(LEDflag == i)  // 點亮
  {
  led = ledon[j];
  }
  if(LEDflag == 255)  //修改變量
  {
   i++;
  }
 }  
 }  
}

void main()
{
 timer_init();
 while(1)
 {

  led_show4();

 }
}

联系我们: 景洪市| 仙桃市| 新密市| 岐山县| 岳普湖县| 宁陕县| 海原县| 阳泉市| 彭山县| 兴安盟| 柳州市| 广昌县| 甘德县| 吴堡县| 宜春市| 南皮县| 九台市| 全椒县| 马山县| 南涧| 岳阳市| 遂川县| 博野县| 怀集县| 琼海市| 红河县| 康定县| 东乡族自治县| 云浮市| 江源县| 舟山市| 达孜县| 金平| 岑巩县| 应用必备| 全州县| 广灵县| 惠水县| 七台河市| 白沙| 塘沽区|