⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 此程序是用CYPRESS单片机编写
💻 C
字号:

//-----------------------------------------------------------------------
// C main line
//-----------------------------------------------------------------------
	
#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules


//*************************************
//
// 定义中断处理程序
//
#pragma interrupt_handler Timer8_ISR	// Timer8溢出中断的中断向量


//*************************************
//
// 定义全局变量
//

unsigned int	iTEMP;
unsigned int	CLOCK_DATA_NEW,CLOCK_DATA_SET;		// 时钟数据(以分钟为单位)
unsigned int	BESPEAK_1_TIME_NEW,BESPEAK_1_TIME_SET;	// 预约一时间(00:00--23:59小时,24:00以上为--)
unsigned int	AD_VALUE[8];

unsigned long	lTEMP;

unsigned char	cTEMP,cTEMP_H,cTEMP_L;
unsigned char	FLAG0,FLAG1,FLAG2;
unsigned char	T_10MS,T_1S,T_3S,T_10S,T_SLEEP_1M,T_FLASH_500MS,T_CLOCK_500MS,T_HEAT_UP_1M,T_HEAT_UP_4H,T_50MS;
unsigned char	BUZZ_EN,BUZZ_NEW,BUZZ_COU;		// 蜂鸣器状态
unsigned char	AD_COUNT,AD_ROOM_TMP;
unsigned char	SET_TMP_NEW,SET_TMP_SET;
unsigned char	ERROR_NEW;		// 故障状态:0=无故障,1=漏电保护,2=超高温,3=温度传感器短/开路,4=防干烧
unsigned char	DISP_BIT,DISP_DATA_1,DISP_DATA_2,DISP_DATA_3,DISP_DATA_4,DISP_DATA_5,DISP_DATA_6;
unsigned char	KEY_CODE,KEY_COU,KEY_NEW,T_ON_OFF_4S,KEY_SET,KEY_SERIES_NEW,KEY_SERIES_COU,T_KEY_60S;
unsigned char	OFF_FUNCTION;		// 待机功能状态:0=待机默认,1=设定时钟
unsigned char	ON_FUNCTION;		// 工作功能状态:0=工作默认,1=设定水温,2=预约一
unsigned char	BESPEAK_DISP;		// 预约显示状态:0=预约温度,1=预约时间
unsigned char	BESPEAK_BIT;		// 预约状态:0=预约1无效,1=预约1有效
unsigned char	BESPEAK_UP_BIT;		// 预约时间到:0=预约1时间未到,1=预约1时间到
unsigned char	BESPEAK_1_TMP_NEW,BESPEAK_1_TMP_SET;
unsigned char	POWER_EN;
unsigned char	KEY_CREEPAGE,T_CHECK_500MS,CREEPAGE_COU;
unsigned char	ROOM_RISE,T_RISE_6S;

//FLAG0.0	;1=
//FLAG0.1	;1=
//FLAG0.2	;1=
//FLAG0.3	;1=
//FLAG0.4	;1=
//FLAG0.5	;1=
//FLAG0.6	;1=
//FLAG0.7	;1=

//FLAG1.0	;1=
//FLAG1.1	;1=
//FLAG1.2	;1=
//FLAG1.3	;1=
//FLAG1.4	;1=
//FLAG1.5	;1=
//FLAG1.6	;1=
//FLAG1.7	;1=


//*************************************
//
// 函数initializtion_deal()为:初始化处理子程序
//
void initializtion_deal()
{
	PGA_Start(PGA_MEDPOWER);	// Turn on PGA power
	ADCINC14_Start(ADCINC14_HIGHPOWER);// Turn on Analog section
	ADCINC14_GetSamples(0);		// Start ADC to read continuously
	Timer8_Start();
	Timer8_EnableInt();		// Enable Timer8 Interrupt
//	PWM16_WritePeriod(999);		// Set period to eight clocks
//	PWM16_WritePulseWidth(332);	// Set pulse width to generate a 50% duty cycle
//	PWM16_DisableInt();		// Ensure interrupt is disabled
//	PWM16_Start();			// Start the PWM16
}


//*************************************
//
// 函数ad_conv_deal()为:AD采样处理子程序
//
void ad_conv_deal()
{
	// (Do something useful with the data)
	while(ADCINC14_fIsDataAvailable()==0);	// Wait for data to be ready
	AD_VALUE[AD_COUNT] = ADCINC14_iGetData();		// Get Data
	ADCINC14_ClearFlag();			// Clear data ready flag
	
	AD_COUNT++;
	if(AD_COUNT>7)		// 采样4次后
	{
		AD_COUNT=0;
		lTEMP=AD_VALUE[0]+AD_VALUE[1]+AD_VALUE[2]+AD_VALUE[3]+AD_VALUE[4]+AD_VALUE[5]+AD_VALUE[6]+AD_VALUE[7];
		AD_VALUE[0]=lTEMP>>3;
	}
}


//*************************************
//
// 函数key_scan_deal()为:按键扫描处理子程序
//
void key_scan_deal()
{
	PRT0DR=0xFF;	// 将P0口置1
	//PRT0GS=0xD4;
	//PRT0DM2=0xD5;
	PRT0DM1=0xD5;
	PRT0DM0=0x2A;	// 将P0.2/P0.4/P0.6/P0.7置为输入口
	cTEMP=10;
	while(cTEMP!=0)
	{
		asm("NOP");
		cTEMP--;
	}
			//*****按键检测*****
	KEY_CODE=0;
	if((PRT0DR&0x04)==0)	KEY_CODE|=0x01;	// 工作/待机键
	if((PRT0DR&0x10)==0)	KEY_CODE|=0x02;	// 预约使用键
	if((PRT0DR&0x40)==0)	KEY_CODE|=0x04;	// 时钟/温度键
	if((PRT0DR&0x80)==0)	KEY_CODE|=0x08;	// 即时加热键
			
			//*****开始扫描*****
	if(KEY_CODE!=0)	//***有键按下***
	{
		KEY_COU++;
		if(KEY_COU>=2)
		{
			KEY_COU=5;
			if(KEY_CODE==0x01)
			{
				KEY_NEW=1;			// 工作/待机键
				T_ON_OFF_4S++;
				if(T_ON_OFF_4S>=250)
				{
					T_ON_OFF_4S=250;
					KEY_SET=5;		// 童锁键,即按下工作/待机键>4s
				}
			}
			else if(KEY_CODE==0x02)	KEY_NEW=2;	// 预约使用键
			else if(KEY_CODE==0x04)
			{
				KEY_NEW=3;			// 时钟/温度键
				if(KEY_SERIES_NEW==0)
				{
					KEY_SERIES_NEW=1;
				}
			}
			else if(KEY_CODE==0x08)	KEY_NEW=4;	// 即时加热键
			else			KEY_NEW=0;
		}
	}
	else		//***无键按下***
	{
		if(T_ON_OFF_4S<250&&KEY_COU>=5&&KEY_SERIES_NEW<2)
		{
			KEY_SET=KEY_NEW;	// 不是童锁键,并且其它按键有效,在释放时工作
		}
		else	KEY_SET=0;
		KEY_COU=0;
		KEY_NEW=0;
		T_ON_OFF_4S=0;
		FLAG0&=0xFC;	// FLAG0.0/FLAG0.1=0
		KEY_SERIES_NEW=0;
		KEY_SERIES_COU=0;
	}
	//PRT0GS=0;
	//PRT0DM2=0x01;
	PRT0DM1=0x01;
	PRT0DM0=0xFE;	// 将P0.2/P0.4/P0.6/P0.7置为输出口
}


//*************************************
//
// 函数key_deal()为:按键处理子程序
//
void key_deal()
{
	if(KEY_SET==0)	return;
	if((FLAG0&0x08)!=0&&KEY_SET!=5)	return;	// FLAG0.3=1或非童锁键退出
	if((FLAG0&0x01)==0)
	{
		FLAG0|=0x01;		// FLAG0.0=1
		if(KEY_SET==1)		//*****工作/待机键*****
		{
			FLAG0&=0xDF;	// FLAG0.5=0;
			if(POWER_EN==0)	POWER_EN=1;
			else		POWER_EN=0;
		}
		else if(KEY_SET==2)	//*****预约使用键*****
		{
			
		}
		else if(KEY_SET==3)	//*****时钟/温度键*****
		{
			
		}
		else if(KEY_SET==4)	//*****即时加热键*****
		{
			
		}
		else if(KEY_SET==5)	//*****童锁键*****
		{
			FLAG0^=0x08;	// FLAG0.3取反
		}
	}
	KEY_SET=0;
}


//*************************************
//
// 函数delay_deal()为:延时处理程序
//
void delay_deal()
{
	if((FLAG0&0x40)!=0)	//*****闪烁显示500ms计时(FLAG0.6)*****
	{
		T_FLASH_500MS++;
		if(T_FLASH_500MS>=31)
		{
			T_FLASH_500MS=0;
			FLAG0^=0x04;	// FLAG0.2取反
		}
	}
	
	if((FLAG0&0x80)==0)	//*****时钟运行(FLAG0.7==0)*****
	{
		T_CLOCK_500MS++;	//***时钟小数点闪烁500ms计时***
		if(T_CLOCK_500MS>=31)
		{
			T_CLOCK_500MS=0;
			FLAG1^=0x01;	// FLAG1.0取反
		}
	}
	else
	{
		FLAG1|=0x01;	// FLAG1.0=1
		T_CLOCK_500MS=0;
	}
	
	if((FLAG0&0x20)!=0)	//*****即时加热4小时计时(FLAG0.5==1)*****
	{
		if(T_HEAT_UP_1M>=60)
		{
			T_HEAT_UP_1M=0;
			T_HEAT_UP_4H++;
			if(T_HEAT_UP_4H>=240)
			{
				T_HEAT_UP_4H=0;
				FLAG0&=0xDF;	// FLAG0.5=0;
			}
		}
	}
	else
	{
		T_HEAT_UP_1M=0;
		T_HEAT_UP_4H=0;
	}
}


//*************************************
//
// 函数main()为:主程序
//
void main()
{
	// Insert your main routine code here.
	initializtion_deal();
	M8C_EnableGInt;		// Enable Global Interrupts 
	while(1)
	{
		while(T_10MS>=40)	// 10ms判断
		{
			T_10MS=0;
			M8C_ClearWDT;	// Watchdog clear
			
			ad_conv_deal();		// AD采样处理函数
			key_scan_deal();	// 按键扫描处理函数
			key_deal();		// 按键处理函数
		}
	}
}


//*************************************
//
// 函数Timer8_ISR()为:Timer8中断处理程序
//
void Timer8_ISR()	// 250us记时
{
	T_10MS++;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -