亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dimmer.c

?? LED控制
?? C
字號:
/************************************************************************
主題:DMX512 按鍵調光---主控程序
單片機:STC12C5404
晶振:8MHZ  波特率-250KB/S
最后修改日期:2008-12-19
功能:按鍵調光,帶記憶功能 
      S1:P2.5--POWER (ON/OFF)
      S2;P2.6--UP
      S3:P2.7--DOWN 
************************************************************************/
#include    <intrins.h>
#include	<stdio.h>
#include	"stc12c5410.h"
#include	"CodingTable.h"

#define     uchar   unsigned    char
#define     uint    unsigned    int
typedef     unsigned char	INT8U;		/* 8 bit 無符號整型  */
typedef     unsigned int    INT16U;     /* 16 bit 無符號整型 */

#define		TRUE 	1
#define		FALSE 	0
#define     ON		1     
#define     OFF		0
#define		OVERTIME	0xF0
#define		NONE		0x00  

//#define		GREY_LEVEL_MAX	52			//最大灰度值
#define		GREY_LEVEL_MIN	0			//最小灰度值
#define     MAX_ADDR 		210  		//定義最大的需發送數據次數
#define     eeprom_began   	0x2800    	//定義EEPROM起始址

sbit	LED			= P2^0;       		//on/off指示燈
sbit   	KEY_POWER	= P2^5;       		//按鍵定義
sbit   	KEY_INC		= P2^6;
sbit   	KEY_DEC		= P2^7;
#define	KEY_MASK	0xE0

#define		EnableInterrupt()	EA = 1
#define		DisableInterrupt()	EA = 0

/***************************************************************************
**								全局變量								  **
****************************************************************************/

uchar   Cnt10us;						//延時10us定時器計數器
uchar   Cnt1ms;							//延時1ms定時器計數器

uchar   PowerState;						//電源開關狀態 
uchar   GreyLevel;						//LED的灰度值

extern INT8U byte_read(INT16U byte_addr);  //讀字節函數
extern INT8U write_flash_with_protect_in_one_sector(INT16U begin_addr, INT16U counter, INT8U array[]);

/************************************************************************
輸入參數:uint   ms級
返回參數:無  
備注    ;延時函數
 ************************************************************************/
void  Delay1ms(uchar t)
{
	if(t==0) return;
	Cnt1ms = t;
    TH1 = (65536-8000)/256;	// 8MHz,1T,8000個時鐘周期,定時時間為1ms
    TL1 = (65536-8000)%256;	
    
    TF1 = 0;
    TR1 = 1;				// 開定時器
    while(Cnt1ms);
    TR1 = 0;				// 關定時器1
}

/************************************************************************
函數說明:定時10us,使用定時器0  
備注    :定時時間為1us,1000個循環為1ms  
************************************************************************/
void  Delay10us(uchar t)
{
	if(t==0) return;
	Cnt10us = t;
    TH0 = (256-80);			// 8MHz,1T,80個時鐘周期,定時時間為10us
    TF0 = 0;
    TR0 = 1;      			// 開定時器
    while(Cnt10us);
    TR0 = 0;				// 關定時器0
}

/************************************************************************
函數說明:定時器0中斷服務程序 
備注    :中斷時間為10us ,模式2(8位自動重裝)
************************************************************************/
void ISR_Timer0(void) interrupt 1
{
	TF0 = 0;
	if(Cnt10us>0){ 
		Cnt10us--;	
	}
}

/************************************************************************
函數說明:定時器1中斷服務程序 
備注    :中斷時間為1ms,注意模式1(16位)需要軟件裝載計數器
************************************************************************/
void ISR_Timer1(void) interrupt 3 using 2
{
	TF1 = 0;
    
	TH1 = (65536-8000)/256;	//8MHz,1T,8000個時鐘周期,定時時間為1ms
    TL1 = (65536-8000)%256;	
	
	if(Cnt1ms>0){  
		Cnt1ms--;	
	}
}

/************************************************************************
初始化  : 定時器初始化
輸入參數:無 
返回參數:無  
備注    :無 
 ************************************************************************/
void Timer_Init(void)
{	
	AUXR |= 0xC0;    //T0,T1速度為12倍標準51 
	TMOD |=	0x12;		// 定時器0為8位自動重裝計數器,定時器1為16位計數器

	TF0 = 0;
	TF1 = 0;
	ET0   = 1;       //  允許定時器0中斷   
	ET1   = 1;       //  允許定時器1中斷   
}

/************************************************************************
初始化  : 串口初始化
輸入參數:無 
返回參數:無  
備注    :baud rate = 8MHz/32 = 250Kbps 
 ************************************************************************/
void UART_Init(void)
{
	PCON	|=	0x80;		// SMOD=1,double baud rate 
 	SCON	|=	0x80;		// Mode 2:9 bit,fixed baud rate(1/32 the oscillator frequency)
}

/************************************************************************
初始化  : IO口初始化
輸入參數:無 
返回參數:無  
備注    :無 
 ************************************************************************/
void Port_Init(void)
{
	P2M0 = 0xE0; P2M1 = 0x1F;   //強推挽輸出

	LED = OFF;
	KEY_POWER = ON;
	KEY_INC= ON;
	KEY_DEC = ON;
}

/************************************************************************
初始化  : 系統初始化
輸入參數:無 
返回參數:無  
備注    :無 
 ************************************************************************/
void Sys_Init(void)
{	
	Timer_Init();	//定時器初始化
	UART_Init();	//串口初始化
	Port_Init();	//IO端口初始化
}

/************************************************************************
輸入參數:無 
返回參數:無  
備注    :讀按鍵值--eeprom
 ************************************************************************/
void DataResume(void)
{
    PowerState = byte_read(eeprom_began);
    GreyLevel = byte_read(eeprom_began + 1);
}

/************************************************************************
輸入參數:無 
返回參數:無  
備注    :讀按鍵值--eeprom
 ************************************************************************/
void DataSave(void)
{
	uchar FlagWrEEPROM;
	uchar Temp[2];
	
	Temp[0] = PowerState;
	Temp[1] = GreyLevel;
	do{
		FlagWrEEPROM = write_flash_with_protect_in_one_sector(eeprom_began,2,&Temp[0]);  //寫EEPROM
	}while(!FlagWrEEPROM);
}

/************************************************************************
函數說明:發送DMX512數據(一幀)   
備注    :波特率為250Kbit/s  共發送210次數據(MAX_ADDR)  則發送一輪數據需
          44*210+88+8+8=9344us
************************************************************************/
void DMX512_SendData(uchar TxBuf)
{
    uchar i;
    
	TXD = 0;   			// Break
	Delay10us(10);		// Delay 100us instead 88us
	TXD = 1;			// Mark-after-break
    Delay10us(1);

	TB8 = 1;  			// the tenth bit that is the first stop bit
	for(i=0;i<MAX_ADDR;i++){
		TI = 0;			// 清發送中斷標志位	
        SBUF = TxBuf;	// 發送數據
        while(!TI);  	// 等待數據發送完畢
    }
    TXD = 1;   			// 置數據空閑位
}

void TurnOff_Output(void)
{
    uchar i;
	
	TXD = 0;   			// Break
	Delay10us(10);		// Delay 100us instead 88us
	TXD = 1;			// Mark-after-break
    Delay10us(1);

	TB8 = 1;  			// the tenth bit that is the first stop bit
	for(i=0;i<MAX_ADDR;i++){
		TI = 0;			// 清發送中斷標志位	
        SBUF = 0x00;	// 發送數據
        while(!TI);  	// 等待數據發送完畢
    }
    TXD = 1;   			// 置數據空閑位
}

/************************************************************************
輸入參數:無 
返回參數:BIT[2-0]對應DEC,INC,POWER,值為1表示按鍵按下  
備注    :KEY_POWER -> P2.5
		  KEY_INC 	-> P2.6
		  KEY_DEC 	-> P2.7
 ************************************************************************/
uchar KeyScan(void)
{
    uchar i, KeyValue;

	if((P2 & KEY_MASK)== KEY_MASK) return(NONE); 	//無按鍵按下
	Delay1ms(20);    								//有按鍵按下,則延時消抖
	if((P2 & KEY_MASK)== KEY_MASK) return(NONE); 	//誤觸發
	
	if(PowerState) LED = !LED;
	
	KeyValue = (~(P2>>5)) & 0x07;
	
	for(i=0;i<20;i++){
		Delay1ms(10);
		if((P2 & KEY_MASK)== KEY_MASK) break;		//按鍵松開	
	}
	
	if(PowerState) LED = !LED;
	
	if(i<20) return KeyValue;						//沒有超時
	else return OVERTIME;							//按鍵按下超過200ms
}


void  main(void)
{
	uchar KeyValue;		//按鍵返回值(可能為NONE,OVERTIME或有效按鍵值1~7)
	uchar i;
	
	Sys_Init();				//系統初始化
	DataResume();	//從EEPROM中讀取數據:電源開關狀態和LED灰度值
	EnableInterrupt();
	
	while(1)
	{
		KeyValue = KeyScan();											//掃描按鍵
		
		if (KeyValue==NONE){											//無按鍵按下
			if (PowerState){											//控制面板上的LED開關			
				LED = ON;
				DMX512_SendData(CodingTable[GreyLevel]);								//向調光器發送數據
			} else {
				LED = OFF;
				TurnOff_Output();										//關閉調光器輸出
			}
		}
		else if (KeyValue==OVERTIME){									//按鍵按下超時,快速調節模式
			if (!KEY_POWER){											//KEY_POWER鍵按下		
				while(!KEY_POWER);										//等待按鍵松開
				Delay1ms(20);
				while(!KEY_POWER);										//等待按鍵松開
				if(PowerState){
					PowerState = OFF;
					TurnOff_Output();
				}else{
					PowerState = ON;
					DMX512_SendData(CodingTable[GreyLevel]);
				}
				DataSave();												//記錄下控制參數	
			} 
			else if (!KEY_INC){											//KEY_INC鍵按下
				if(PowerState == OFF) continue;							//在電源關閉的情況下禁止調光
				i = 0;
				while(!KEY_INC){										//KEY_INC鍵持續按下過程中
					if(GreyLevel < GREY_LEVEL_MAX){
						GreyLevel++;
						DMX512_SendData(CodingTable[GreyLevel]);						//調光
						Delay1ms(20);									//此處延時影響連續調光時的平滑程度及調節速度
						if(++i >= 6){									//6分頻,周期120ms
							i = 0;
							LED = !LED;	
						}
					} else {
						GreyLevel = GREY_LEVEL_MAX;
						//DMX512_SendData(CodingTable[GreyLevel]);						//向調光器發送數據
						//Delay1ms(40);
						//LED = !LED;	
					} 
				}
				LED = ON;
				DataSave();	
			}
			else if (!KEY_DEC){											//KEY_DEC鍵按下
				if(PowerState == OFF) continue;							//在電源關閉的情況下禁止調光
				i = 0;
				while(!KEY_DEC){										//KEY_DEC鍵持續按下過程中
					if(GreyLevel > GREY_LEVEL_MIN){
						GreyLevel--;
						DMX512_SendData(CodingTable[GreyLevel]);						//調光
						Delay1ms(20);									//此處延時影響連續調光時的平滑程度及調節速度
						if(++i >= 6){									//6分頻,周期120ms
							i = 0;
							LED = !LED;	
						}
						
					} else {
						GreyLevel = GREY_LEVEL_MIN;	
						//DMX512_SendData(CodingTable[GreyLevel]);						//向調光器發送數據
						//Delay1ms(40);
						//LED = !LED;	
					}
				}
				LED = ON;
				DataSave();	
			}
		}
		else {															//單擊模式
			if(KeyValue & 0x01){										//KEY_POWER鍵按下
				if(PowerState){											//切換開關狀態
					PowerState = OFF;
					TurnOff_Output();
				}else{
					PowerState = ON;
					DMX512_SendData(CodingTable[GreyLevel]);								//向調光器發送數據
				}
			}
			else if(KeyValue & 0x02){									//KEY_INC鍵按下
				if(PowerState == ON){
					if(GreyLevel < GREY_LEVEL_MAX){
						GreyLevel++;
						DMX512_SendData(CodingTable[GreyLevel]);						//向調光器發送數據
					} else {
						GreyLevel = GREY_LEVEL_MAX;
						DMX512_SendData(CodingTable[GreyLevel]);						//向調光器發送數據
					}
				}
			} 
			else if(KeyValue & 0x04){									//KEY_DEC鍵按下
				if(PowerState == ON){
					if(GreyLevel > GREY_LEVEL_MIN){
						GreyLevel--;
						DMX512_SendData(CodingTable[GreyLevel]);						//向調光器發送數據
					} else {
						GreyLevel = GREY_LEVEL_MIN;	
						DMX512_SendData(CodingTable[GreyLevel]);						//向調光器發送數據
					}
				}
			}
			DataSave();													//重新保存LED控制參數
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天操天天色综合| 成人av免费网站| 成人免费视频caoporn| 欧美在线综合视频| 久久精品亚洲一区二区三区浴池| 亚洲少妇最新在线视频| 国产精选一区二区三区| 9191久久久久久久久久久| 亚洲日本在线a| 精品在线一区二区| 欧美精品tushy高清| 亚洲黄色录像片| 岛国精品在线观看| 精品1区2区在线观看| 丝袜亚洲精品中文字幕一区| 色狠狠色噜噜噜综合网| 国产精品久久久久久久岛一牛影视 | 99精品视频在线播放观看| 欧美sm极限捆绑bd| 奇米精品一区二区三区在线观看| 一本大道综合伊人精品热热| 中文字幕视频一区| 成人免费观看视频| 国产女人18毛片水真多成人如厕 | 一本到高清视频免费精品| 久久这里只精品最新地址| 日韩av电影天堂| 666欧美在线视频| 亚洲高清免费观看高清完整版在线观看| 成人午夜私人影院| 国产精品高清亚洲| 91原创在线视频| 亚洲天堂2014| voyeur盗摄精品| 最新成人av在线| 91黄色免费看| 亚洲1区2区3区视频| 欧美肥妇free| 毛片av一区二区| 亚洲精品在线电影| 国产91精品一区二区麻豆网站| 久久久久久亚洲综合| 国产成人8x视频一区二区| 中文子幕无线码一区tr| 91猫先生在线| 亚洲国产精品嫩草影院| 91精品国产91久久综合桃花| 久久国产尿小便嘘嘘| 久久九九99视频| 91在线视频免费观看| 一级做a爱片久久| 欧美日韩在线电影| 久久成人免费电影| 国产精品少妇自拍| 在线亚洲免费视频| 日韩在线一区二区三区| 久久久美女毛片| 91视频91自| 麻豆精品一区二区| 国产精品国产三级国产三级人妇| 色呦呦国产精品| 免费观看一级特黄欧美大片| 国产日产欧美一区| 欧美色老头old∨ideo| 久久精品国产99久久6| 最新日韩av在线| 91精品国产欧美一区二区成人| 国产不卡在线视频| 午夜电影网一区| 中文字幕第一区二区| 欧美日韩高清一区二区| 国产精品538一区二区在线| 一区二区三区色| 欧美精品一区二区三区四区| 在线免费精品视频| 国产酒店精品激情| 视频在线观看91| 成人欧美一区二区三区视频网页 | 在线观看不卡视频| 国产成+人+日韩+欧美+亚洲| 视频在线观看91| 亚洲欧美日韩一区二区三区在线观看| 51午夜精品国产| 在线视频国内一区二区| 国产成人在线网站| 免费在线视频一区| 亚洲午夜免费电影| 中文字幕一区av| 国产视频一区不卡| 日韩欧美中文字幕制服| 欧美色图12p| 色综合视频一区二区三区高清| 寂寞少妇一区二区三区| 午夜精品免费在线观看| 亚洲欧美日韩电影| 日本一区二区高清| 久久久久9999亚洲精品| 欧美成人精品3d动漫h| 欧美浪妇xxxx高跟鞋交| 色婷婷av一区二区三区之一色屋| 福利一区二区在线| 国产一区二区0| 精品一区二区免费视频| 免费在线观看成人| 偷拍与自拍一区| 亚洲第一激情av| 一区二区在线观看不卡| 亚洲同性gay激情无套| 国产精品传媒在线| 中文字幕在线不卡视频| 国产精品成人免费在线| 国产欧美日韩另类一区| 久久午夜羞羞影院免费观看| 欧美成人乱码一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 欧美不卡激情三级在线观看| 欧美一级高清片| 欧美变态tickle挠乳网站| 91精品国产入口| 精品福利一二区| 国产色一区二区| 亚洲图片另类小说| 亚洲一区二区三区国产| 亚洲一区二区3| 视频在线观看国产精品| 久久99热99| 粉嫩在线一区二区三区视频| 成人免费av网站| 91国产免费看| 欧美一区午夜视频在线观看| 欧美v日韩v国产v| 国产亚洲综合av| 亚洲欧美日韩一区二区 | 欧美激情自拍偷拍| 国产精品黄色在线观看| 亚洲线精品一区二区三区| 日韩精品视频网| 国产综合久久久久影院| 成人18视频日本| 欧美亚洲综合色| 精品国产免费久久| 中文字幕在线观看一区二区| 亚洲成人自拍网| 极品少妇xxxx精品少妇| 成人久久18免费网站麻豆 | 成人美女视频在线观看| 欧美亚洲自拍偷拍| 久久这里只有精品首页| 尤物在线观看一区| 蜜乳av一区二区三区| 777奇米四色成人影色区| 国产日韩欧美在线一区| 亚洲一区二区三区精品在线| 国产乱一区二区| 在线亚洲精品福利网址导航| 精品国产污网站| 亚洲激情男女视频| 狠狠久久亚洲欧美| 色老汉av一区二区三区| 亚洲精品在线电影| 亚洲地区一二三色| 不卡av免费在线观看| 日韩一区二区三区免费观看| 日韩一区日韩二区| 韩国精品在线观看| 欧美三区在线视频| 中文字幕在线一区免费| 美女被吸乳得到大胸91| 在线亚洲+欧美+日本专区| 久久久精品免费观看| 爽好久久久欧美精品| 91麻豆国产精品久久| 欧美国产精品专区| 久久99精品久久只有精品| 欧美中文字幕不卡| 国产精品理论片| 国产高清精品久久久久| 日韩一区二区在线观看视频| 亚洲一区在线电影| 99精品欧美一区二区三区小说| 久久视频一区二区| 蜜臀91精品一区二区三区 | 97精品久久久午夜一区二区三区 | 成人欧美一区二区三区视频网页| 国产专区欧美精品| 日韩写真欧美这视频| 亚洲电影一区二区三区| 色综合色狠狠天天综合色| 中文字幕在线观看不卡| 成人精品国产免费网站| 国产香蕉久久精品综合网| 国产一区二区在线视频| 91精品国产品国语在线不卡| 亚洲成人午夜影院| 欧美区视频在线观看| 亚洲成av人片一区二区梦乃| 欧美日韩一区中文字幕| 亚洲成人777| 在线91免费看| 美女任你摸久久|