單片機源程序如下:
- //============================================================================
- //======翼芯科技 LED七彩跳變+漸變轉換=======指撥開關SW2的1位撥向上============
- //============================================================================
- // 此源碼版權屬 翼芯科技 全權享有,如欲引用,敬請署名并告知
- //程序說明:本程序用于實現LED七彩跳變+漸變轉換,按KEY3為跳變,按KEY4為漸變,不同步.IC插到U9位置.指撥開關SW2的1位撥向上.
- //文件名稱:main.C
- //日期: 2011/01/23
- //版本: 1.0
- //C編譯器: keil 8.05
- //=============================================================================
- #include <STC12C5AXX.H>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RED1 = P0^0; //紅色IO口定義
- sbit GREEN1 = P0^1; //綠色IO口定義
- sbit BLUE1 = P0^2; //藍色IO口定義
- sbit KEY3 = P3^2; //按鍵3
- sbit KEY4 = P3^3; //按鍵4
- bit FLAG_MODE;
- uchar T_CNT3;
- uchar T_CNT4;
- uchar MODE;
- uchar code TAB1[7]={1,2,4,3,6,5,7}; //跳變數據
- uchar code TAB2[14]={1,3,3,2,2,6,6,4,4,5,5,7,7,1}; //跳變數據 {1,3,2,6,4,5,7,1}; //跳變數據
- uchar DPTR;
- uchar PWM_HL;
- uchar REPEAT;
- uchar PWM_H;
- uchar PWM_L;
- /******************************************************************
- - 功能描述:定時器0中斷,中斷時間為1MS,實現按鍵檢測.
- - 隸屬模塊:無
- - 函數屬性:無
- - 參數說明:無
- - 返回說明:無
- - 注:.....
- ******************************************************************/
- void TIME0_INT() interrupt 1
- {
- TH0 = (65535-2000)/256;
- TL0 = (65535-2000)%256;
- if (T_CNT3 !=0)
- {
- T_CNT3--;
- if (T_CNT3==0 && KEY3==0)
- {
- MODE=0;
- FLAG_MODE=1;
- }
- }
- else if (KEY3==0) T_CNT3=10;
- if (T_CNT4 !=0)
- {
- T_CNT4--;
- if (T_CNT4==0 && KEY4==0)
- {
- MODE=1;
- FLAG_MODE=1;
- }
- }
- else if (KEY4==0) T_CNT4=10;
-
- }
- /******************************************************************
- - 功能描述:紅綠藍LED輸出
- - 隸屬模塊:無
- - 函數屬性:無
- - 參數說明:無
- - 返回說明:無
- - 注:.....
- ******************************************************************/
- SET_RGB(uchar LED_REG)
- {
- uchar LEDDATA;
- LEDDATA=LED_REG;
- if(LEDDATA&0X01)
- RED1=1;
- else
- RED1=0;
- if(LEDDATA&0X02)
- GREEN1=1;
- else
- GREEN1=0;
- if(LEDDATA&0X04)
- BLUE1=1;
- else
- BLUE1=0;
- }
- /******************************************************************
- - 功能描述:延時函數
- - 隸屬模塊:無
- - 函數屬性:無
- - 參數說明:無
- - 返回說明:無
- - 注:.....
- ******************************************************************/
- delayms(uint x)
- {
- uint t;
- while(x--)
- for(t=1500;t>0;t--)
- {
- if(FLAG_MODE)
- {
- return;
- }
- }
- }
- /******************************************************************
- - 功能描述:延時函數
- - 隸屬模塊:無
- - 函數屬性:無
- - 參數說明:無
- - 返回說明:無
- - 注:.....
- ******************************************************************/
- delayus(uint x)
- {
- uint t;
- while(x--)
- for(t=15;t>0;t--);
- }
- /******************************************************************
- - 功能描述: PWM輸出
- - 隸屬模塊:無
- - 函數屬性:無
- - 參數說明:無
- - 返回說明:無
- - 注:.....
- ******************************************************************/
- SHADE()
- {
- uchar i,j;
- for(i=REPEAT;i>0;i--) //重復次數
- {
-
- for(j=PWM_HL;j>0;j--) //PWM減
- {
- if(FLAG_MODE)
- {
- return;
- }
- PWM_H=j; //PWM_H值
- PWM_L=PWM_HL-j+1; //PWM_L值
- SET_RGB(TAB2[DPTR]);
- for(;PWM_H>0;PWM_H--)
- delayus(1);
- SET_RGB(TAB2[DPTR+1]); //輸出
- for(;PWM_L>0;PWM_L--)
- delayus(1);
- } //j
- } //i
-
- }
-
- /******************************************************************
- - 功能描述:主函數
- - 隸屬模塊:無
- - 函數屬性:無
- - 參數說明:無
- - 返回說明:無
- - 注:.....
- ******************************************************************/
- void main()
- {
- TMOD = 0x01; //定時器0工作在16位的定時模式.
- TH0 = (65535-2000)/256; //定時器0高位設定
- TL0 = (65535-2000)%256; //定時器0低位設定
- IE = 0x82; //開總中斷和定時器0中斷
- TR0 = 1; //開定時器0
- //M1:M0 0:0為標準51;0:1輸出;1:0輸入;1:1開漏輸出
- P0M1=0X00; //P0口設為推挽輸出
- P0M0=0XFF;
- P0=0;
- MODE=0;
- FLAG_MODE=0;
- PWM_HL=250;
- REPEAT=1;
- while(1)
- {
- switch (MODE)
- {
- case 0:
- for(DPTR=0;DPTR<7;DPTR++) //跳變
- {
- SET_RGB(TAB1[DPTR]);
- delayms(1000); //延時1秒
- if(FLAG_MODE)
- {
- FLAG_MODE=0;
- break;
- }
- }break;
- case 1:
- for(DPTR=0;DPTR<14;DPTR=DPTR+2) //漸變
- {
- SHADE();
- delayms(1000); //延時1秒
- if(FLAG_MODE)
- {
- FLAG_MODE=0;
- break;
- }
- }break;
-
- }
- }
- }
復制代碼
所有資料51hei提供下載(原理圖):
http://www.zg4o1577.cn/bbs/dpj-137471-1.html
|