本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
各位高手,我用一个按键做开和关,1分钟后自动关闭。但是在一分钟关闭后再按按键程序抓不住标志,蜂鸣器响了下,但是相对应的灯开了下马上关了,要再按第二下才可以开,如果不是自动1分钟关闭的话一般不会有这种情况,请各位高手接招,我把大部分程序都删掉了,只留了按键和自动关机部分:
#include <reg52.h> //包括一个 52 标准内核的头文件
#include <ctype.h>
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
sbit buzzer=P3^5; //蜂鸣器
sbit BACKGROUND_LED=P2^4; // 白色背光灯
sbit LED1=P1^1; // 上部灯
sbit LED2=P1^2; // 中间灯
sbit LED3=P1^3; // 下面灯
sbit LED4=P1^4; // 上面灯温度
sbit LED5=P1^5; // 中面灯温度
sbit LED6=P1^6; // 下面灯温度
sbit MOTOR=P2^7; //抽水马达
sbit HEATUP=P2^6; // 发热片
sbit KEY_STOP=P3^2; // 停止出水
sbit KEY_START=P3^4; //出水开关
sbit KEY_TEMP=P2^3; //水温设定
sbit KEY_MODE=P2^2; //出水容量设定
sbit KEY_POWER=P3^3; // 总开关
unsigned char key_count;
unsigned char key_count1;
unsigned char buzzer_count;
unsigned char mode_count;
unsigned char temp_count=0;
unsigned char AD_count;
unsigned char AD_count1;
unsigned char buzzer_count1;
unsigned char buzzer_count2;
unsigned char buzzer_count3;
unsigned char buzzer_count4;
bit KEY_POWER_flag=0;
bit buzzer_flag=0;
bit KEY_START_flag=0;
bit KEY_STOP_flag=0;
bit KEY_MODE_flag=0;
bit mode_time350=0;//出水量标志
bit mode_time250=0;//出水量标志
bit mode_time180=0;//出水量标志
bit out_flag=0;
bit out_flag1=0;
bit out_flag2=0;
bit mode_aa=0;//出水量标志 种的马达开标志
bit temp130=0;//出水量标志
bit adtime_falg=0;//出水量标志
bit off_flag=0;
bit KEY_TEMP_flag=0;
bit tempbb=1;//130度温度标志
bit on_flag;
bit motor_flag=0;
bit motor_onoff=0;
bit out_water=0;
bit out_water98=0;
bit out_water9898=0;
bit key1_flag=1;
bit key2_flag=1;
bit Minute1=0;
bit AD_start_flag;
sfr P3M0=0xB1;
sfr P3M1=0xB2;
sfr P2M0=0x95;
sfr P2M1=0x96;
sfr WDT_CONTR=0XE1;
/******************************定义AD转换模块****************************/
uchar code display_AD_channel_ID[8] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
sfr P1M0 = 0x91;
sfr P1M1 = 0x92;
sfr ADC_LOW2 = 0xBE;
sfr ADC_CONTR = 0xC5;
sfr ADC_DATA = 0xC6;
void delayms(unsigned int ms) // 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++); }
}
/********************************AD转换***********************************/
void main(void) // 主程序
{
WDT_CONTR=0X3B;//看门狗定时器1.048秒
TMOD=0x01;
ET0=1;
PT0=1;
TR0=1;
TF0=0;
EA=1;
TH0=0x9E;
TL0=0x58; //6MHz下50毫秒中断
tempbb=0;
BACKGROUND_LED=0; // 白色背光灯
KEY_POWER=1;
P2M0=0x00; //设定发热片和马达端口为强上拉
P2M1=0x00; //
while(1)
{
//***************************************开关机和一分钟自动关机程序*********************/
if(KEY_POWER==0)
{
delayms(40) ;
while (!KEY_POWER); //如果去掉这一句和下面一句按住按键会不停的计数
delayms(60) ;
buzzer_flag=1; //开蜂鸣器标志
delayms(60) ;
on_flag=!on_flag;
key_count1=0;//清计数器保持开机状态
}
//if(KEY_POWER_flag==1&&bb==1) //开机
if(on_flag==1)
{
BACKGROUND_LED=1; // 白色背光灯
KEY_POWER_flag=1;
LED1=1;
LED2=1;
LED3=1;
LED4=1; // 上面灯温度
LED5=1; // 中面灯温度
LED6=1; // 下面灯温度
off_flag=0;
if (Minute1==1) //1分钟到了关机
{
Minute1=0;
KEY_POWER_flag=0;
BACKGROUND_LED=0; // 白色背光灯关
buzzer_flag=1; //开蜂鸣器标志
on_flag=0;
bb=0;
LED1=1;
LED2=1;
LED3=1;
LED4=1; // 上面灯温度
LED5=1; // 中面灯温度
LED6=1; // 下面灯温度
}
}
if(on_flag==0)
//if(KEY_POWER_flag==1&&bb==0) //关机
{
BACKGROUND_LED=0; // 白色背光灯
KEY_POWER_flag=0;
KEY_START_flag=0;
off_flag=1;
LED1=1;
LED2=1;
LED3=1;
LED4=1; // 上面灯温度
LED5=1; // 中面灯温度
LED6=1; // 下面灯温度
}
WDT_CONTR=0X3B;//看门狗定时器1.048秒 6MHZ
}
}
/********************************中断延时 ***************************************/
void timer0 (void) interrupt 1
{
TH0=0x9E;
TL0=0x58; //6MHz下50毫秒中断
TF0=0;//清楚定时器中断溢出标志
out_flag=1;
out_flag1=1;
out_flag2=1;
motor_flag=1;
key_count++;
if(key_count>=20) //1秒定时
{key_count=0;
adtime_falg=1;
key_count1++;
if(key_count1>=60)
{key_count1=0;//1分钟定时
Minute1=1; }
}
if(motor_flag==1) //马达转停 程序
{
motor_onoff=0;
ii++;
if(ii>=10)motor_onoff=1;
if(ii>=14){ii=0; motor_flag=0; motor_onoff=0;}
}
AD_count++;
if(AD_count>=10){AD_count=0;AD_start_flag=1;}
if(buzzer_flag==1) //蜂鸣器驱动计时
{ buzzer_count++;
buzzer_count1++;
buzzer_count2++;
buzzer_count3++;
buzzer_count4++;
P3M0=0x00; //设定蜂鸣器端口为强上拉
P3M1=0x20;//
buzzer=1; //蜂鸣器 count flag clear 0 只运行一次下面动作,如AD
if(buzzer_count>=2)buzzer=0; //200毫秒
if(buzzer_count1>=4)buzzer=1;
if(buzzer_count2>=6)buzzer=0;
if(buzzer_count3>=8)buzzer=1;
if(buzzer_count4>=10)
{
buzzer=0;
buzzer_count=0;
buzzer_count1=0;
buzzer_count2=0;
buzzer_count3=0;
buzzer_count4=0;
buzzer_flag=0;
}
}
} |
|