📄 main.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 + -