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

📄 main.c

📁 how to use st mcu c langugue,cosmic
💻 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 + -