- 打卡等级:初来乍到
- 打卡总天数:3
- 最近打卡:2025-07-24 11:26:01
已绑定手机
新手上路
- 积分
- 33
|
#include "all.h"
uint haomiao_flga=0;
bit jdq_flga=0;
uint TADA=0;
uchar xdata gaowei=0;
uchar xdata diwei=0;
#define LVDF 0x20 //PCON.5,低压检测中断标志位
bit IAP_flga=0;
static uchar dingshiqikaiqibiao=0;
uint t_data=0;//秒钟数据
//volatile uchar anjiangzhuantai_flag=0;//按键状态标志
void Timer1_Isr(void) interrupt 3//定时器 1 灯闪烁运行程序
{
t_data++;//秒钟数据++
if(t_data>500)
{
P02=~P02;
t_data=0;
haomiao_flga++;
if(haomiao_flga>59)
{
haomiao_flga=0;
aa++;
TADA++;
}
}
}
void Timer1_Init(void) //1毫秒@11.0592MHz//定时器1中断函数初始化函数
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xCD; //设置定时初始值
TH1 = 0xD4; //设置定时初始值
TF1 = 0; //清除TF1标志
}
void LVD_ISR() interrupt 6//单片机低压中断函数
{
PCON &= ~LVDF;
// TADA=4567;
IAP_flga=1;
}
//当按键时间按下时间大于2000ms时则当前时间则清零,否则视为无效信号
void qinglingdangqianshijian()//控制当前当前显示时间清零
{
static uint dangqianyanshi=0;
if(P20==0)
{
dangqianyanshi++;
if(dangqianyanshi>2000)//
{
dangqianyanshi=0;
aa=0;
time=0;
P03=0;
P04=0;
t_data=0;
jdq_flga=0;
}
}
else
{
dangqianyanshi=0;
}
}
void panduanshezhiyudangqianshuju()//判断两者的数值是否相等, 若相等则停止定时器, 继电器吸合
{
if(((time*100)+aa)==TADA)
{
P02=1;
if(jdq_flga==0)
{
P03=1;
P04=1;
}
ET1 = 0; //使能定时器0中断
jdq_flga=1;
}
else
{
ET1 = 1; //使能定时器0中断
}
}
void TADA_fenpeihanshu()//将DATA分别赋值
{
static xdata gaowei=0;
static xdata diwei=0;
gaowei=TADA/100;
diwei=TADA%100;
}
void main()
{
P0M0 = 0x0C; P0M1 = 0x00;
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P02=0;
Timer1_Init();
EA=1;
P04=0;
PCON &= ~LVDF; //??????LVD?????
ELVD = 1;
P03=0;
IapErase(0x0400);
IapProgram(0x0400, TADA);
TADA=IapRead(0x0400);
// time=IapReadByte(0x2000); //读取EEPROM2000地址数据
// aa=IapReadByte(0x2001); //读取EEPROM2001地址数据
// gaowei=IapReadByte(0x2002); //读取EEPROM2002地址数据
// diwei=IapReadByte(0x2003); //EEPROM2003地址数据
while (1)
{
TADA_fenpeihanshu();
if(P23==0)//开启定时器
{
dingshiqikaiqibiao++;//定时器开启静态变量
if(dingshiqikaiqibiao>100)
{
dingshiqikaiqibiao=0;
TR1 = 1; //定时器1开始计时
ET1 = 1; //使能定时器1中断
}
}
display4();
if(P23==1)//关闭定时器
{
dingshiqikaiqibiao++;
if(dingshiqikaiqibiao>100)
{
dingshiqikaiqibiao=0;
TR1 = 0; //定时器1t计时
ET1 = 0; //使能定时器1中断
P02=1;
}
}
if(aa>59)
{
aa=0;
time++;
if(time>99)
{
time=0;
}
}
display();
qinglingdangqianshijian();
panduanshezhiyudangqianshuju();
}
}
IapErase(0x0400);操作都是官方的案例 , 我把IapProgram(0x0400, TADA);这个放到低压中断函数中去,上电就显示65536, 感觉是没写进去, 但单片机工作电源部分已经加了一个3000uf大电容,且输入电源与单片机工作电源接入了5819二极管,但放到主函数里面去就是正常的
|
|