📄 main1.c
字号:
//头文件定义
#include <C8051F000.h> //寄存器定义
#include <intrins.h> //内部函数
#include "stdio.h"
#include "math.h"
#include "System_Init.h"
#include "I2c.h"
#define uchar unsigned char
#define uint unsigned int
//内部调用
void Delay(uint sum);
void Delay_Ms(uint add);
void Display(void);
void Read_Data(void);
void Save_Data(void);
sbit led1 = P0^6;
sbit led2 = P0^7;
sbit led3 = P3^5;
sbit led4 = P3^4;
sbit ledd = P3^1;
sbit ledt = P3^2;
sbit ledv = P3^3;
sbit yuyin = P0^4;
sbit sss = P0^3;
//--------------------------------------------
//全局变量
//--------------------------------------------
bit Save_Flag;
bit Volt_Flag;
bit Date_Flag;
bit Time_Flag;
bit Alarm_Flag;
bit Disp_Flag;
bit Clea_Flag;
bit Soun_Flag;
bit Edit_Flag;
//uint i, j, m;
uint Voltage, Adc_Data;
long Voltage_Count;
uchar Second;
uchar Minite;
uchar Hour;
uchar Month;
uchar Date;
uchar Last_Minite;
uchar Last_Hour;
uchar Last_Month;
uchar Last_Date;
uint Mstcnt;
uchar Dispbitcnt;
uint tcnt;
uint Last_Voltage, Save_Voltage;
uchar Minite_Sure;
uchar Count;
uint m;
xdata uchar Led_Data[10]={0x3F, 0x21, 0x9B, 0xB3, 0xA5, 0xB6, 0xBE, 0x23, 0xBF, 0xB7};
xdata uchar Display_Buf[20];
xdata uchar E2p_Buf[10];
//主程序
main()
{
uint i;
//系统文件调用
EA = 0; //关中断
System_Init();
EA = 1; //开中断
Save_Flag=1;
Read_Data();
for(i=0;i<20;i++)
{
Display_Buf[i]=8;
}
Delay_Ms(10);
yuyin = 1;
Read_Data();
Clea_Flag = 0;
Soun_Flag = 0;
//主进程
while(1)
{
if(Save_Flag==1)
{
Save_Data();
Read_Data();
Save_Voltage = Last_Voltage;
Save_Flag=0;
}
else if(Edit_Flag==1)
{
if(Minite_Sure<=57)
{
if(Minite>=(Minite_Sure+2))
{
Volt_Flag = 0;
Date_Flag = 0;
Time_Flag = 0;//
Edit_Flag = 0;
}
}
else
{
if(Minite==0)
{
Volt_Flag = 0;
Date_Flag = 0;
Time_Flag = 0;//
Edit_Flag = 0;
}
}
}
}
}
//延时
void Delay(uint sum)
{
uint i, j;
for(i=0;i<sum;i++)
{
for(j=0;j<500;j++);
}
}
void Delay_Ms(uint add)
{
uint i, j;
for(i=0;i<add;i++)
{
for(j=0;j<50;j++);
}
}
//TIME3中断
void Timer3_Isr(void) interrupt 14
{
TMR3CN&=~0x80; //清中断标志
if(Save_Flag==0)
{
//按键1采集
AMX0SL = 0x03;
ADBUSY=1;
while(!ADCINT);
ADCINT=0;
Adc_Data = ADC0H*256 + ADC0L;//Key_Sure
if(Adc_Data<=0xFF)
{
Volt_Flag = 0;
Date_Flag = 0;
Time_Flag = 0;
for(m=0;m<20;m++)
{
Display();
}
Minite = Last_Minite;
Hour = Last_Hour;
Month = Last_Month;
Date = Last_Date;
Save_Flag = 1;
Clea_Flag = 0;
Edit_Flag = 0;
}
//按键2采集
AMX0SL = 0x05;
ADBUSY=1;
while(!ADCINT);
ADCINT=0;
Adc_Data = ADC0H*256 + ADC0L;//Key_Date
if(Adc_Data<=0xFF)
{
Minite_Sure = Minite;
Last_Month = Month;
Last_Date = Date;
Last_Minite = Minite;
Last_Hour = Hour;
Volt_Flag = 0;
Date_Flag = 1;
Time_Flag = 0;
for(m=0;m<10;m++)
{
Display();
}
Clea_Flag = 1;
Edit_Flag = 1;
Mstcnt = 400;
}
//按键3采集
AMX0SL = 0x07;
ADBUSY=1;
while(!ADCINT);
ADCINT=0;
Adc_Data = ADC0H*256 + ADC0L;//Key_Time
if(Adc_Data<=0xFF)
{
Minite_Sure = Minite;
Last_Month = Month;
Last_Date = Date;
Last_Minite = Minite;
Last_Hour = Hour;
Volt_Flag = 0;
Date_Flag = 0;
Time_Flag = 1;
for(m=0;m<10;m++)
{
Display();
}
Clea_Flag = 1;
Edit_Flag = 1;
Mstcnt = 800;
}
//按键4采集
AMX0SL = 0x02;
ADBUSY=1;
while(!ADCINT);
ADCINT=0;
Adc_Data = ADC0H*256 + ADC0L;//Key_Voltage
if(Adc_Data<=0xFF)
{
Minite_Sure = Minite;
Last_Month = Month;
Last_Date = Date;
Last_Minite = Minite;
Last_Hour = Hour;
Volt_Flag = 1;
Date_Flag = 0;
Time_Flag = 0;
for(m=0;m<20;m++)
{
Display();
}
Edit_Flag = 1;
Clea_Flag = 1;
Mstcnt = 0;
}
//按键5采集
AMX0SL = 0x04;
ADBUSY=1;
while(!ADCINT);
ADCINT=0;
Adc_Data = ADC0H*256 + ADC0L;//Key_Left
if(Adc_Data<=0xFF)
{
Minite_Sure = Minite;
for(m=0;m<50;m++)
{
Display();
}
if(Volt_Flag==1)
{
if(Last_Voltage>1400)
{
Last_Voltage = 0;
}
else
{
Last_Voltage = Last_Voltage + 100;
}
}
else if(Date_Flag==1)
{
if(Last_Month>=12)
{
Last_Month = 1;
}
else
{
Last_Month++;
}
}
else if(Time_Flag==1)
{
if(Last_Hour>=23)
{
Last_Hour = 0;
}
else
{
Last_Hour++;
}
}
Edit_Flag = 1;
Clea_Flag = 1;
}
//按键6采集
AMX0SL = 0x06;
ADBUSY=1;
while(!ADCINT);
ADCINT=0;
Adc_Data = ADC0H*256 + ADC0L;//Key_Right
if(Adc_Data<=0xFF)
{
Minite_Sure = Minite;
for(m=0;m<50;m++)
{
Display();
}
if(Volt_Flag==1)
{
if(Last_Voltage<=10)
{
Last_Voltage = 1500;
}
else
{
Last_Voltage = Last_Voltage-10;
}
}
else if(Date_Flag==1)
{
if(Last_Date<=1)
{
Last_Date = 31;
}
else
{
Last_Date--;
}
}
else if(Time_Flag==1)
{
if(Last_Minite<=0)
{
Last_Minite = 59;
}
else
{
Last_Minite--;
}
}
Edit_Flag = 1;
Clea_Flag = 1;
}
//电压采集
AMX0SL = 0x00;
ADBUSY=1;
while(!ADCINT);
ADCINT=0;
Adc_Data = ADC0H*256 + ADC0L;
if(Voltage<Save_Voltage)
{
Alarm_Flag = 1;
}
else
{
Alarm_Flag = 0;
}
if(Voltage<500)
{
Disp_Flag = 0;
yuyin = 0;
ledv = 1;
ledd = 1;
ledt = 1;
}
else
{
Disp_Flag = 1;
}
//电压的显示
if(Volt_Flag==1)
{
Display_Buf[0] = Last_Voltage/1000;
Display_Buf[1] = (Last_Voltage%1000)/100;
Display_Buf[2] = (Last_Voltage%100)/10;
Display_Buf[3] = Last_Voltage%10;
}
else
{
Voltage_Count = Voltage_Count + Adc_Data/1.639;
Count++;
if(Count>=128)
{
Voltage = Voltage_Count>>7;
Display_Buf[0] = Voltage/1000;
Display_Buf[1] = (Voltage%1000)/100;
Display_Buf[2] = (Voltage%100)/10;
Display_Buf[3] = Voltage%10;
Count = 0;
Voltage_Count = 0;
}
}
if(Disp_Flag==1)
{
Display();
ledv = 1;
ledd = 1;
ledt = 1;
}
else
{
P2 = 0x00;
ledv = 1;
ledd = 1;
ledt = 1;
}
if(Date_Flag==1)
{
Display_Buf[4] = Last_Month/10;
Display_Buf[5] = Last_Month%10;
Display_Buf[6] = Last_Date/10;
Display_Buf[7] = Last_Date%10;
}
else
{
Display_Buf[4] = Month/10;
Display_Buf[5] = Month%10;
Display_Buf[6] = Date/10;
Display_Buf[7] = Date%10;
}
if(Time_Flag==1)
{
Display_Buf[8] = Last_Hour/10;
Display_Buf[9] = Last_Hour%10;
Display_Buf[10] = Last_Minite/10;
Display_Buf[11] = Last_Minite%10;
}
else
{
Display_Buf[8] = Hour/10;
Display_Buf[9] = Hour%10;
Display_Buf[10] = Minite/10;
Display_Buf[11] = Minite%10;
}
}
}
//时间定时
void Timer0_Isr(void) interrupt 1 using 0
{
TL0 = 0x00;//D7
TH0 = 0x80;//FE
//sss = 1;
//yuyin = 1;
tcnt++;
if(tcnt>=91)
{
tcnt=0;
Second++;
if(Second>=60)
{
Second=0;
Minite++;
if(Minite>=60)
{
Minite=0;
Hour++;
if(Hour>=24)
{
Hour=0;
Date++;
if(Date>=31)
{
Date=1;
Month++;
if(Month>=13)
{
Month=1;
}
}
}
}
}
}
//Delay_Ms(2);//Delay(1);
//sss = 0;
//
//yuyin = 0;
}
//显示
void Display(void)
{
Mstcnt++;
if(Volt_Flag==1&&Mstcnt>=390)
{
Mstcnt = 0;
}
else if(Date_Flag==1&&Mstcnt>=790)
{
Mstcnt = 400;
}
else if(Time_Flag==1&&Mstcnt>=1190)
{
Mstcnt = 800;
}
if(Mstcnt<400)
{
ledv = 0;
ledd = 1;
ledt = 1;
if(Clea_Flag==0&&Alarm_Flag==1)
{
if(Mstcnt>=60)
{
led1 = 1;
yuyin = 1;
}
else
{
led1 = 0;
yuyin = 1;
}
}
else
{
led1 = 0;
yuyin = 0;
}
led2 = 1;
led3 = 1;
led4 = 1;
P2=Led_Data[Display_Buf[0]];//显示电压
Delay(5);
led1 = 1;
if(Clea_Flag==0&&Alarm_Flag==1)
{
if(Mstcnt>=60)
{
led2 = 1;
}
else
{
led2 = 0;
}
}
else
{
led2 = 0;
}
led3 = 1;
led4 = 1;
P2=Led_Data[Display_Buf[1]];//显示电压
Delay(10);
led1 = 1;
led2 = 1;
if(Clea_Flag==0&&Alarm_Flag==1)
{
if(Mstcnt>=60)
{
led3 = 1;
}
else
{
led3 = 0;
}
}
else
{
led3 = 0;
}
led4 = 1;
P2=Led_Data[Display_Buf[2]]+0x40;//显示电压
Delay(10);
led1 = 1;
led2 = 1;
led3 = 1;
if(Clea_Flag==0&&Alarm_Flag==1)
{
if(Mstcnt>=60)
{
led4 = 1;
}
else
{
led4 = 0;
}
}
else
{
led4 = 0;
}
P2=Led_Data[Display_Buf[3]];//显示电压
Delay(10);
led4 = 1;
if(Alarm_Flag==1)
{
if(Mstcnt>=200)
{
Mstcnt = 0;
}
}
}
else if(Mstcnt<800&&Alarm_Flag==0)
{
ledv = 1;
ledd = 0;
ledt = 1;
led1 = 0;
led2 = 1;
led3 = 1;
led4 = 1;
P2=Led_Data[Display_Buf[4]];//显示日期
Delay(5);
led1 = 1;
led2 = 0;
led3 = 1;
led4 = 1;
P2=Led_Data[Display_Buf[5]]+0x40;//显示日期
Delay(10);
led1 = 1;
led2 = 1;
led3 = 0;
led4 = 1;
P2=Led_Data[Display_Buf[6]];//显示日期
Delay(10);
led1 = 1;
led2 = 1;
led3 = 1;
led4 = 0;
P2=Led_Data[Display_Buf[7]];//显示日期
Delay(10);
led4 = 1;
}
else if(Mstcnt<1200&&Alarm_Flag==0)
{
ledv = 1;
ledd = 1;
ledt = 0;
led1 = 0;
led2 = 1;
led3 = 1;
led4 = 1;
P2=Led_Data[Display_Buf[8]];//显示时间
Delay(5);
led1 = 1;
led2 = 0;
led3 = 1;
led4 = 1;
P2=Led_Data[Display_Buf[9]]+0x40;//显示时间
Delay(10);
led1 = 1;
led2 = 1;
led3 = 0;
led4 = 1;
P2=Led_Data[Display_Buf[10]];//显示时间
Delay(10);
led1 = 1;
led2 = 1;
led3 = 1;
led4 = 0;
P2=Led_Data[Display_Buf[11]];//显示时间
Delay(10);
led4 = 1;
}
else
{
Mstcnt = 0;
}
}
//开机读取数据
void Read_Data(void)
{
E2p_Buf[0] = SM_Receive(0xA0,0x0002);
E2p_Buf[1] = SM_Receive(0xA0,0x0003);
E2p_Buf[2] = SM_Receive(0xA0,0x0004);
E2p_Buf[3] = SM_Receive(0xA0,0x0005);
E2p_Buf[4] = SM_Receive(0xA0,0x0006);
E2p_Buf[5] = SM_Receive(0xA0,0x0007);
Last_Voltage = E2p_Buf[0]*256 + E2p_Buf[1];
if(Last_Voltage>1500)
{
Last_Voltage = 1500;
}
Month = E2p_Buf[2];
if(Month>12)
{
Month = 12;
}
Date = E2p_Buf[3];
if(Date>31)
{
Date = 31;
}
Hour = E2p_Buf[4];
if(Hour>23)
{
Hour = 23;
}
Minite = E2p_Buf[5];
if(Minite>59)
{
Minite = 59;
}
}
//定时保存数据
void Save_Data(void)
{
E2p_Buf[0] = Last_Voltage/256;
E2p_Buf[1] = Last_Voltage%256;
E2p_Buf[2] = Month;
E2p_Buf[3] = Date;
E2p_Buf[4] = Hour;
E2p_Buf[5] = Minite;
SM_Send(0xA0,0x0002,E2p_Buf[0]);
SM_Send(0xA0,0x0003,E2p_Buf[1]);
SM_Send(0xA0,0x0004,E2p_Buf[2]);
SM_Send(0xA0,0x0005,E2p_Buf[3]);
SM_Send(0xA0,0x0006,E2p_Buf[4]);
SM_Send(0xA0,0x0007,E2p_Buf[5]);
/*
if(E2prom_Addr>=32760)
{
E2prom_Addr = 20;
}
E2p_Buf[0] = Voltage/256;
E2p_Buf[1] = Voltage%256;
E2p_Buf[2] = Month;
E2p_Buf[3] = Date;
E2p_Buf[4] = Hour;
E2p_Buf[5] = Minite;
SM_Send(0xA0,E2prom_Addr,E2p_Buf[0]);
E2prom_Addr = E2prom_Addr + 1;
SM_Send(0xA0,E2prom_Addr,E2p_Buf[1]);
E2prom_Addr = E2prom_Addr + 1;
SM_Send(0xA0,E2prom_Addr,E2p_Buf[2]);
E2prom_Addr = E2prom_Addr + 1;
SM_Send(0xA0,E2prom_Addr,E2p_Buf[3]);
E2prom_Addr = E2prom_Addr + 1;
SM_Send(0xA0,E2prom_Addr,E2p_Buf[4]);
E2prom_Addr = E2prom_Addr + 1;
SM_Send(0xA0,E2prom_Addr,E2p_Buf[5]);
E2prom_Addr = E2prom_Addr + 1;
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -