📄 main.c
字号:
/**************** (c) 2002 STMicroelectronics **********************************
PROJECT : TIMER USE
COMPILER : Cxst7 (Cosmic)
MODULE : main.c
VERSION : V 1.0
CREATION DATE : 05/06/02
AUTHOR : A.L. (CMG Micro Application)
*********************************************************************************
DESCRIPTION : Main Routine of exercice 6c
LED exercise, third part in C langage
Switch LED from Port(x) to Port(x+1)
Using an external interrupt on PB3 divide or double by 2
the timer frequency
*********************************************************************************
MODIFICATIONS :
********************************************************************************/
#define KEY_IN1 PCDR.B7
#define KEY_IN2 PADR.B3
#define KEY_IN3 PADR.B4
#define KEY_IN4 PADR.B6
#define KEY_IN5 PADR.B7
#define RELAY PBDR.B4
#define RELAY1 PBDR.B0//B4?
#define LED_5 PFDR.B6
#define LED_4 PFDR.B7
#define LED_3 PCDR.B1
#define LED_2 PCDR.B0
#define LED_1 PFDR.B4
#define BEEP PFDR.B1
// Include files
#include "Map72324.h" // ST7Flite0 memory and registers mapping
#include "lib_bits.h" // Predifined libraries working at bit level
#include "bitdef.h" // This file defines the names of the bits
unsigned char RAM1;//出货时间超过10s故障
unsigned char RUN_TIME,RUN_MINUTE,RUN_SECOND,RUN_MS;
unsigned char KEY_TAB[5];
unsigned char KEY_BUF,HOURS_BUF,KEY_3S,KEY_VALUE;
unsigned char ScanTab[3]={0,0,0};//scantab buf,used for judge scan remove 抖动
unsigned char Key_Value=0;//when key press; key_value=the value key press;
unsigned char Delay_Flag=0,Delay_3S=0;//every 3 second judge if key_press and let led on or off
unsigned char RunTime=60;
unsigned char RunMinute=0;
unsigned int RunMs=0;
void HIWARE_INIT(void)
{
//unsigned char i; //不要在这里使用rsp命令,
_asm("sim");
#asm
CLR X
CLR A
LOOP: LD (0x80,X),A
INC X
CP X,#0x7F
JRULT LOOP
CLR X
CLR A
#endasm
MCCSR=0X02;
TACR2=0X00; //2ms once
TACR1=0X40;
TAOC1HR=0X07;
TAOC2HR=0X07;
TAOC1LR=0XD0;
TAOC2LR=0XD0;
TBCR2=0X00;
TBCR1=0X40;
TBOC1HR=0X07;
TBOC1LR=0XD0;
TBOC2HR=0X07;
TBOC2LR=0XD0;
RAM1=0X10;
}
void IO_INIT(void)
{
PADDR=0xFF;
PAOR=0xFF;
PDDDR=0XFF;
PDOR=0XFF;
PDDR=0XFF;
PBDDR=0XFF;
PBOR=0Xff;
PCDDR=0XFF;
PCOR=0XFF;
PEDDR=0XFF;
PEOR=0XFF;
PEDR=0XFF;
PFDDR=0XFF;
PFOR=0XFF;
RELAY=0;
LED_1=0;
LED_2=0;
LED_3=0;
LED_4=0;
LED_5=0;
EICR=0;
EICR=0XFF;
RunTime=60;
}
void Action(void)
{
switch (Key_Value)
{
case 1 :
{
if(RELAY)
{
if(LED_1)
{
if(RunMinute>=30)
{
RunMinute=RunMinute-30;
}
else
RunMinute=0;
LED_1=0;
RunTime=RunTime-30;
}
else
{
LED_1=1;
RunMinute=RunMinute+30;
RunTime=RunTime+30;
}
}
Key_Value=0;
}break;
case 2 :
{
if(RELAY)
{
if(LED_2)
{
if(RunMinute>=60)
{
RunMinute=RunMinute-60;
}
else
RunMinute=0;
LED_2=0;
RunTime=RunTime-60;
}
else
{
LED_2=1;
RunMinute=RunMinute+60;
RunTime=RunTime+60;
}
}
Key_Value=0;
}break;
case 3 :
{
if(RELAY)
{
if(LED_3)
{
if(RunMinute>=120)
{
RunMinute=RunMinute-120;
}
else
RunMinute=0;
LED_3=0;
RunTime=RunTime-120;
}
else
{
LED_3=1;
RunMinute=RunMinute+120;
RunTime=RunTime+120;
}
}
Key_Value=0;
}break;
case 4 :
{
if(RELAY==0)
{
RELAY=1;
if(RunTime==60)
LED_2=1;
RunMinute=RunTime;
}
Key_Value=0;
}break;
case 5 :
{
LED_5=!LED_5;
Key_Value=0;
}break;
default :
{
Key_Value=0;
}break;
};
if(RunMinute==0)
{
RELAY=0;
}
}
void KeyScanJudge(void)
{
static unsigned char KeyScan_Buf=0;
if(ScanTab[0],KeyScan_Buf)
{
if(ScanTab[1],KeyScan_Buf)
{
SetBit(ScanTab[2],KeyScan_Buf);
}
else
{
SetBit(ScanTab[1],KeyScan_Buf);
}
}
else
{
if(ValBit(ScanTab[1],KeyScan_Buf) && ValBit(ScanTab[2],KeyScan_Buf))
{
Key_Value=KeyScan_Buf;
}
ClrBit(ScanTab[1],KeyScan_Buf);
ClrBit(ScanTab[2],KeyScan_Buf);
}
KeyScan_Buf++;
if(KeyScan_Buf>5) KeyScan_Buf=0x00;
}
void KeyScan(void)
{
//KEY_IN1 SCAN
if(KEY_IN1)
{
ClrBit(ScanTab[0],1);
}
else
{
SetBit(ScanTab[0],1);
}
//KEY_IN2 SCAN
if(KEY_IN2)
{
ClrBit(ScanTab[0],2);
}
else
{
SetBit(ScanTab[0],2);
}
//KEY_IN3 SCAN
if(KEY_IN1)
{
ClrBit(ScanTab[0],3);
}
else
{
SetBit(ScanTab[0],3);
}
//KEY_IN4 SCAN
if(KEY_IN1)
{
ClrBit(ScanTab[0],4);
}
else
{
SetBit(ScanTab[0],4);
}
//KEY_IN5 SCAN
if(KEY_IN1)
{
ClrBit(ScanTab[0],5);
}
else
{
SetBit(ScanTab[0],5);
}
}
void main(void)
{
HIWARE_INIT();
IO_INIT();
_asm("rim");
while(1)
{
Action();
}
} // main loop
/*-------------------------------------------------------------------------------
ROUTINE NAME : arcomp_rt
INPUT/OUTPUT : None
DESCRIPTION : Interrupt to be executed when the counter reaches the value stored
in DCR0H and DCR0L register, so CMPF0 (compare flag) is set.
COMMENTS :
-------------------------------------------------------------------------------*/
@interrupt void TMA_RT(void)
{
unsigned int I;
I=TACSR;
I=TAOC1LR;
I=TAOC1HR;
I=(I<<8);
I=I+TAOC1LR;
I=I+0X07D0;
TAOC1LR=I;
TAOC1HR=(I>>8);
TAOC2HR=TAOC1HR;
TAOC2LR=TAOC1LR;
KeyScan();
if(RELAY)
{
RunMs++;
if(RunMs>499)
{
RunMinute--;
RunMs=0;
}//500*2=1000ms=1second
}
else
{
RunMs=0;
}
}
/*-------------------------------------------------------------------------------
ROUTINE NAME : eit1_rt
INPUT/OUTPUT : None
DESCRIPTION : Interrupt to be executed when falling edge on PA7.
Divide or double by 2 the timer frequency
COMMENTS :
-------------------------------------------------------------------------------*/
@interrupt void TMB_RT(void)
{
unsigned int I;
I=TBCSR;
I=TBOC1LR;
I=TBOC1HR;
I=(I<<8);
I=I+TBOC1LR;
I=I+0X07D0;
TBOC1LR=I;
TBOC1HR=(I>>8);
TBOC2HR=TBOC1HR;
TBOC2LR=TBOC1LR;
KeyScanJudge();
}
@interrupt void MCC_RT(void)
{
unsigned char i;
i=MCCSR;
}
@interrupt void EX_RT(void)
{
EICR=0;
EICR=0xff;
}
/*** (c) 2002 STMicroelectronics ****************** END OF FILE ***************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -