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

📄 main.c

📁 基于MC908LK24 MCU的热量表程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908LK24.h> /* include peripheral declarations */

#include "s1.h"

//#include "s.h"

#define SP_CR (*((char *)0x010))
#define RTC_COMR (*((char *)0x040))


#define DDR_F (*((char *)0x00B))
#define PORTF (*((char *)0x00A))

#define DDR_D (*((char *)0x007))
#define PORTD (*((char *)0x003))



#define DDR_A (*((char *)0x004))
#define PORTA (*((char *)0x000))


#define LED_F (*((char *)0x00F))
#define CONFIG_2 (*((char *)0x01D))

#define LCD_CLK (*((char *)0x04F))
#define LCD_CR (*((char *)0x051))

#define LDAT_1 (*((char *)0x052))
#define LDAT_2 (*((char *)0x053))
#define LDAT_3 (*((char *)0x054))
#define LDAT_4 (*((char *)0x055))
#define LDAT_5 (*((char *)0x056))
#define LDAT_6 (*((char *)0x057))
#define LDAT_7 (*((char *)0x058))
#define LDAT_8 (*((char *)0x059))
#define LDAT_9 (*((char *)0x05A))
#define LDAT_10 (*((char *)0x05B))
#define LDAT_11 (*((char *)0x05C))
#define LDAT_12 (*((char *)0x05D))
#define LDAT_13 (*((char *)0x05E))
#define LDAT_14 (*((char *)0x05F))
#define LDAT_15 (*((char *)0x060))
#define LDAT_16 (*((char *)0x061))
#define LDAT_17 (*((char *)0x062))

#define INT_SCR (*((char *)0x01E))

#define KB_SCR (*((char *)0x01B))
#define KB_IER (*((char *)0x01C))

#define P_TCL (*((char *)0x036))
#define P_BWC (*((char *)0x037))
#define P_MSH (*((char *)0x038))
#define P_MSL (*((char *)0x039))
#define P_MRS (*((char *)0x03A))
#define P_MDS (*((char *)0x03B))


#define RTC_COMR (*((char *)0x040))
#define RTC_CDTA (*((char *)0x041))
#define RTC_CR1 (*((char *)0x042))
#define RTC_CR2 (*((char *)0x043))
#define RTC_SR (*((char *)0x044))
#define RTC_ALMR (*((char *)0x045))
#define RTC_ALHR (*((char *)0x046))
#define RTC_SECR (*((char *)0x047))
#define RTC_MINR (*((char *)0x048))
#define RTC_HRR (*((char *)0x049))
#define RTC_DAYR (*((char *)0x04A))
#define RTC_MTHR (*((char *)0x04B))
#define RTC_YRR (*((char *)0x04C))
#define RTC_DOWR (*((char *)0x04D))
#define RTC_CHRR (*((char *)0x04E))

#define D0	0XE0
#define D1	0X00
#define D2	0XA0
#define D3	0X80
#define D4	0X40
#define D5	0XC0
#define D6	0XE0
#define D7	0X80
#define D8	0XE0
#define D9	0XC0

#define D0B	0X0B
#define D1B	0X0A
#define D2B	0X0D
#define D3B	0X0F
#define D4B	0X0E
#define D5B	0X07
#define D6B	0X07
#define D7B	0X0A
#define D8B	0X0F
#define D9B	0X0F




#define MAXMODE 4


#define FLOW_TIMES	10	//0.001M3=10 TIMES
#define FLOW_T		10  //0.01M3

unsigned long flow=0;
unsigned char temp2_flow=0;
unsigned char temp_flow=0;

unsigned long kwh=0;


unsigned int data[3];

unsigned char xxi;
unsigned char MODE=0;
unsigned char MODE_STATUS=0;
unsigned char OLDMODE=255;



unsigned char year=1;
unsigned char month=1;
unsigned char day=8;
unsigned char hour=9;
unsigned char min=57;
unsigned char second=0;
unsigned char week=1;

#pragma CODE_SEG DEFAULT	//标志代码段的开始
void read_18b20(void);
void change_time(void);
void TIME(void);
void delay(unsigned long data);
void CAL_KWH(void);



void CAL_KWH()
{
	unsigned long in_han,out_han;
	
//	rou=1;

	read_18b20();
	if(data[0]>(data[1]+10))
	{
	in_han=han[data[0]];
	out_han=han[data[1]];
	
	in_han=in_han-out_han;
	
	in_han=in_han/1000;
	
	kwh=kwh+in_han;	

	}

}




void change_time(char i)
{

	
		if(i==0)
		{

		RTC_COMR=0x00;
		RTC_COMR=0x01;
		RTC_COMR=0x03;
		RTC_COMR=0x02;
	
		RTC_SECR=0;//second;
		
		RTC_COMR=0x02;
		RTC_COMR=0x02;		
		}


		if(i==1)
		{
		
		min=RTC_MINR;
		min++;
		if(min>=60){min=0;}
		
		RTC_COMR=0x00;
		RTC_COMR=0x01;
		RTC_COMR=0x03;
		RTC_COMR=0x02;
	
		RTC_MINR=min;
		
		RTC_COMR=0x02;
		RTC_COMR=0x02;		
		}


		if(i==2)
		{


		hour=RTC_HRR;
		hour++;
		if(hour>=24){hour=0;}


		RTC_COMR=0x00;
		RTC_COMR=0x01;
		RTC_COMR=0x03;
		RTC_COMR=0x02;
	
		RTC_HRR=hour;
		
		RTC_COMR=0x02;
		RTC_COMR=0x02;		
		}

	



		
		
	//TIME();
		
		
		
}






void delay(unsigned long data)
{
    __RESET_WATCHDOG(); /* kicks the dog */
	while(data){
	data--;
	}


}

void delay2(unsigned int data)
{
    __RESET_WATCHDOG(); /* kicks the dog */
	while(data){
	data--;
	}


}


void delay3(unsigned char data)
{
    __RESET_WATCHDOG(); /* kicks the dog */
	while(data){
	data--;
	}


}


interrupt void IRQ_ISR(void) { 

	temp_flow++;
	if(temp_flow>=FLOW_TIMES){flow++;temp_flow=0;temp2_flow++;}
	if(temp2_flow>=FLOW_T){temp2_flow=0;}

}

interrupt void KEY_ISR(void) { 

	//delay(1);
	if(!(PORTA&0x01)){MODE++;if(MODE>MAXMODE){MODE=0;}}
	if(!(PORTA&0x02)){if(MODE==3){change_time(0);}}
	if(!(PORTA&0x04)){if(MODE==3){change_time(1);}}
	if(!(PORTA&0x08)){if(MODE==3){change_time(2);}}
	
}


void w1_init(char x)
{
	if(x==1)
	{
	
	PORTD=PORTD&(~0x08);
	DDR_D=DDR_D|0x08;
	delay(6);
	DDR_D=DDR_D&(~0x08);
	delay(6);

	}

	if(x==2)
	{
	
	PORTD=PORTD&(~0x04);
	DDR_D=DDR_D|0x04;
	delay(6);
	DDR_D=DDR_D&(~0x04);
	delay(6);

	}


	if(x==3)
	{
	
	PORTD=PORTD&(~0x02);
	DDR_D=DDR_D|0x02;
	delay(6);
	DDR_D=DDR_D&(~0x02);
	delay(6);


	}



}


void w1_tx(char data,char x)
{

	if(x==1)
	{
		if(data)
		{
		PORTD=PORTD&(~0x08);
		DDR_D=DDR_D|0x08;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		DDR_D=DDR_D&(~0x08);	
		delay3(4);
		
		}
		else
		{
		PORTD=PORTD&(~0x08);
		DDR_D=DDR_D|0x08;
		delay2(5);		
		DDR_D=DDR_D&(~0x08);

		}
	
	}

	if(x==2)
	{
		if(data)
		{
		PORTD=PORTD&(~0x04);
		DDR_D=DDR_D|0x04;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		DDR_D=DDR_D&(~0x04);	
		delay3(4);
		}
		else
		{
		PORTD=PORTD&(~0x04);
		DDR_D=DDR_D|0x04;
		delay2(5);		
		DDR_D=DDR_D&(~0x04);
		}
	
	}



	if(x==3)
	{
		if(data)
		{
		PORTD=PORTD&(~0x02);
		DDR_D=DDR_D|0x02;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		asm NOP;
		DDR_D=DDR_D&(~0x02);	
		delay3(4);
		}
		else
		{
		PORTD=PORTD&(~0x02);
		DDR_D=DDR_D|0x02;
		delay2(5);		
		DDR_D=DDR_D&(~0x02);
		}
	}

}

void w1_write(unsigned char data,char x)

{	char i;
	for(i=0;i<8;i++)
	{
		if(data&0x01){w1_tx(1,x);}else{w1_tx(0,x);}
		data=data>>1;
	}
}


unsigned char w1_read(char x)
{unsigned char data,i;
	
	data=0;
	

	if(x==1)
	{
		for(i=0;i<8;i++)
		{	data=data>>1;
			PORTD=PORTD&(~0x08);
			DDR_D=DDR_D|0x08;
			asm NOP;
			asm NOP;
			asm NOP;
			asm NOP;
			asm NOP;
			DDR_D=DDR_D&(~0x08);
			if(PORTD&0X08){data=data|0x80;}	
			delay3(5);
			
		}
	}



	if(x==2)
	{
		for(i=0;i<8;i++)
		{	data=data>>1;
			PORTD=PORTD&(~0x04);
			DDR_D=DDR_D|0x04;
			asm NOP;
			asm NOP;
			asm NOP;
			asm NOP;
			asm NOP;
			DDR_D=DDR_D&(~0x04);
			if(PORTD&0X04){data=data|0x80;}	
			delay3(5);
			
		}
	}


	if(x==3)
	{
		for(i=0;i<8;i++)
		{	data=data>>1;
			PORTD=PORTD&(~0x02);
			DDR_D=DDR_D|0x02;
			asm NOP;
			asm NOP;
			asm NOP;
			asm NOP;
			asm NOP;
			DDR_D=DDR_D&(~0x02);
			if(PORTD&0X02){data=data|0x80;}	
			delay3(5);
			
		}
	}


	return data;

}

void LCD_CL(char x)
{
	if(x==1){LDAT_1=LDAT_1&(~D8);LDAT_2=LDAT_2&(~D8B);}
	if(x==2){LDAT_2=LDAT_2&(~D8);LDAT_3=LDAT_3&(~D8B);}
	if(x==3){LDAT_3=LDAT_3&(~D8);LDAT_4=LDAT_4&(~D8B);}
	if(x==4){LDAT_4=LDAT_4&(~D8);LDAT_5=LDAT_5&(~D8B);}
	if(x==5){LDAT_5=LDAT_5&(~D8);LDAT_6=LDAT_6&(~D8B);}
	if(x==6){LDAT_6=LDAT_6&(~D8);LDAT_7=LDAT_7&(~D8B);}
	if(x==7){LDAT_7=LDAT_7&(~D8);LDAT_8=LDAT_8&(~D8B);}
	if(x==8){LDAT_8=LDAT_8&(~D8);LDAT_9=LDAT_9&(~D8B);}



}

void LCD_DISP(char n,char x)
{
	char z;
	
	if(n==0){n=D0;z=D0B;}
	if(n==1){n=D1;z=D1B;}
	if(n==2){n=D2;z=D2B;}
	if(n==3){n=D3;z=D3B;}
	if(n==4){n=D4;z=D4B;}
	
	if(n==5){n=D5;z=D5B;}
	if(n==6){n=D6;z=D6B;}
	if(n==7){n=D7;z=D7B;}
	if(n==8){n=D8;z=D8B;}
	if(n==9){n=D9;z=D9B;}
		
	
	if(x==1){LDAT_1=LDAT_1|n;LDAT_2=LDAT_2|z;}
	if(x==2){LDAT_2=LDAT_2|n;LDAT_3=LDAT_3|z;}
	if(x==3){LDAT_3=LDAT_3|n;LDAT_4=LDAT_4|z;}
	if(x==4){LDAT_4=LDAT_4|n;LDAT_5=LDAT_5|z;}
	if(x==5){LDAT_5=LDAT_5|n;LDAT_6=LDAT_6|z;}
	if(x==6){LDAT_6=LDAT_6|n;LDAT_7=LDAT_7|z;}
	if(x==7){LDAT_7=LDAT_7|n;LDAT_8=LDAT_8|z;}
	if(x==8){LDAT_8=LDAT_8|n;LDAT_9=LDAT_9|z;}




}


void LCD_TEMP(unsigned int datc)
{
	unsigned char i;
	i=datc%10;
	LCD_DISP(i,8);
	datc=datc/10;
	i=datc%10;
	LCD_DISP(i,7);
	datc=datc/10;
	i=datc%10;
	LCD_DISP(i,6);
	



}






void IN_TEMP(void)
{	
	char sec;

	unsigned int olddata=0;
	
	sec=0;
	
	

	LDAT_1=0X00;
  	LDAT_2=0X00;
  	LDAT_3=0X10; 
  	LDAT_4=0X00;
  	LDAT_5=0X00;
  	LDAT_6=0X00;
  	LDAT_7=0X00;
  	LDAT_8=0X10;
  	LDAT_9=0X00;
  	LDAT_10=0X02;
  	LDAT_11=0X00;
  	LDAT_12=0X00;
  	LDAT_13=0X00;
  	LDAT_14=0X00;

⌨️ 快捷键说明

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