📄 main.c
字号:
#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 + -