历史上的今天

今天是:2024年11月06日(星期三)

2019年11月06日 | PIC12F508项目程序

发布者:rnm888 来源: 51hei关键字:PIC12F508  配置位  计数器 手机看文章 扫描二维码
随时随地手机看文章

#include

#include "main.h"

__CONFIG(MCLRDIS&WDTDIS&PROTECT&INTRC);       //设置配置位(MCLR脚复位禁止,看门狗关,无代码保护,内部RC振荡)

volatile unsigned char Key_Flag=0;      /*****用于识别按键是否按下的标志*****/

volatile unsigned char Fluid_Flag=0;    //流量标志

volatile unsigned char Press_Flag=0;    //压力标志

volatile unsigned char Test_Count=0;    //转存计数器计数值

volatile unsigned char Time_Flag=0;     //时间次数标志

/*****延时毫秒级函数*****/

void Delay_Ms(unsigned char Ms_Time)

{

   unsigned char t;

   while(Ms_Time--)

   {

    for(t=0;t<165;t++);

   }

}

/*****延时秒级函数*****/

void Delay_Sec(unsigned char Sec_Time)

{

unsigned char m;

for(m=0;m{

  Delay_Ms(251);

  Delay_Ms(251);

  Delay_Ms(251);

  Delay_Ms(252);

}

}

/*********按键扫描函数**********/

void Key_Scan(void)

{

Key_Flag=0;               //扫描键盘之前先将按键标志清零

    if(Key==0)

{

  Delay_Ms(10);         //延时去抖

  if(Key==0)

  {

   while(!Key);      //等待K1键释放

   Key_Flag=1;

  }

}

}

/*********流量压力监测函数**********/

void DetectWater(void)

{

unsigned char Num=30;              //压力检测次数

unsigned char Press_Count=0;       //压力计数器

Press_Flag=0;

Fluid_Flag=0;

TMR0=0x00;


do

{

  if(Press_In==1)                //有压力,则压力计数器加1

  {

   Press_Count++;

  }

  

  Delay_Ms(100);                 //延时

  Num--;                         //压力检测次数减1

  

}while(Num);                       //压力检测完成


if(Press_Count>=20)                //压力数据处理

{

  Press_Flag=1;

}

else

{

  Press_Flag=0;

}


Test_Count=TMR0;                  //读取计数器的计数值,存入Test_Count


if(Test_Count>=3)                 //流量数据处理

{

  Fluid_Flag=1;

}

else

{

  Fluid_Flag=0;

}

}

/*********主函数***********/

void main(void)

{

Delay_Ms(20);                                 //上电延时100毫秒,以保证电源可靠供电


OPTION=0xE0;                                   //计数器初始化

TRIS = 0xFC;                                   //继电器和LED_RED设为输出 压力设为输入,流量使用T0CKI输入计数

TMR0=  0x00;

    

    Red_Led=0;                                     //红灯熄灭

    Relay_Out=1;                                   //水泵强制启动8秒

    Delay_Sec(7);

    

    DetectWater();                                 //流量压力检测

    

    while(1)

    {

/**************正常供水开始*********************/

     if(Fluid_Flag==1)                          //只要有流量,则水泵一直启动正常供水

     {

      Time_Flag=1;                           //进入正常供水标志

      

      Red_Led=0;                             //红灯熄灭

      Relay_Out=1;

      do

      {

       DetectWater();

      }

      while(Fluid_Flag);                     //没有流量,则终止循环

     }

/**************正常供水完成*********************/

/**************保压停机开始*********************/

     

     if((Fluid_Flag==0)&&(Press_Flag==1))       //没有流量,有压力则进入保压停机

     {

      unsigned char Detect_Num=30;

      Time_Flag=1;                           //进入保压停机标志

   TMR0=0;

   

   do

   {

    Delay_Ms(100);

    Detect_Num--;

   }

   while(Detect_Num);

   

   Test_Count=TMR0;

   

   if(Test_Count>=3)

   {

    break;

   }

   else

   {

    Relay_Out=0;

    while(1)

    {

     TMR0=0;

     Detect_Num=30;

     do

     {

      Delay_Ms(90);

      Key_Scan();

            Detect_Num--;

     }

     while((Detect_Num)&&(!Key_Flag)&&(Press_In));

     

     Test_Count=TMR0;

     

     if((Test_Count>=3) || (Key_Flag) || (Press_In==0))

     {

      break;

     }

     

    }

    break;

   }

      

     }

/**************保压停机完成*********************/

/**************缺水保护开始*********************/

     

     if((Fluid_Flag==0)&&(Press_Flag==0))       //没有流量,没有压力则进入缺水循环

     {

      unsigned char Check_Num=7;

      unsigned int Number=0;

      Red_Led=1;

      

      if(Time_Flag==1)                      //识别是从开始就缺水还是从正常供水转入到缺水状态

      {

       Check_Num=10;

      }

      

      do                                     //继续运行20秒后水泵停机,同时红灯亮

      {

       DetectWater();

       Check_Num--;

      }

      while((!Fluid_Flag)&&(Check_Num));

      

      if(Fluid_Flag==1)

      {

       break;

      }

      

/************缺水停30秒,若有按键按下,则重新启动******************/

      Relay_Out=0;

      Check_Num=60;

      

      do                                     //缺水停30秒,期间进行按键扫描,并且红灯闪烁

      {

       Red_Led=0;

       Delay_Ms(240);

       Key_Scan();                        //扫描按键

       if(!Key_Flag)

       {

        Red_Led=1;

        Delay_Ms(240);

        Key_Scan();

        Check_Num--;

       }

      }

      while((!Key_Flag)&&(Check_Num));       //时间到或者有按键按下,跳出循环

      

      if(Key_Flag==1)                        //有按键按下,则重新启动并检测

      {

             break;

      }

      

/************30秒停止时间到,进入启动4分钟检测水流和水压流量和压力*************/      

      Relay_Out=1;

      Red_Led=1;

            Delay_Sec(8);

            Check_Num=78;

         do

         {

          DetectWater();

          Check_Num--;

         }

         while((!Fluid_Flag)&&(Check_Num));     //有流量或者启动4分钟时间到,则跳出循环

         

         if(Fluid_Flag==1)                      //有流量则跳出循环返回到while循环

         {

          break;

         }

      

/************时间到,则进入停止3小时**************/

            

      Relay_Out=0;

      Number=22587;

      

      do

      {

       Red_Led=0;

       Delay_Ms(240);

       Key_Scan();                        //扫描按键

       if(!Key_Flag)

       {

        Red_Led=1;

        Delay_Ms(240);

        Key_Scan();

        Number--;

       } 

      }

      while((!Key_Flag)&&(Number));

      break;                                 

     }

/**************缺水保护完成*********************/

    }

}



#ifndef     __MAIN_H__

#define     __MAIN_H__

#define Relay_Out  GP0

#define Red_Led    GP1

#define Fluid_In   GP2

#define Press_In   GP3

#define Key        GP4

[1] [2]
关键字:PIC12F508  配置位  计数器 引用地址:PIC12F508项目程序

上一篇:PIC单片机 读/写 MMC/SD 卡的简单小程序
下一篇:PIC单片机的USB接口的应用 一个简单的USB CDC 测试程序

推荐阅读

科创板成为5日资本市场最为关注的焦点。市场人士认为,在上海证券交易所设立科创板并试点注册制,这是强化市场功能的重大改革举措,通过循序渐进的增量改革逐步激发市场活力,终将促进资本市场长期健康发展。补齐资本市场服务科技创新的短板证监会负责人5日表示,在上交所设立科创板是落实创新驱动和科技强国战略、推动高质量发展、支持上海国际金融中心和...
11月5日消息,谐波减速器厂商来福谐波已完成近亿元C轮融资,由国中创投和联创永浚共同投资。据悉,本轮融资将主要用于研发团队的扩充。目前来福谐波已经完成四轮融资:2017年7月,完成由如山资本领投2000万元preA轮融资;2018年3月,完成由北极光创投领投,如山资本跟投的近亿元A轮融资;2018年9月,完成由上海金浦领投,北极光跟投的6000万元B轮融资。来...
为什么要智能化?汽车照明系统是汽车最主要的主动式安全装置,但传统汽车照明系统有很大的局限性,给汽车驾驶带来安全隐患。其缺点为: 远光灯给来驶车辆造成眩光 弯道时照明盲区造成安全隐患 远近光灯频繁切换分散驾驶员注意力 灯光照射范围固定不可调节 LED 作为一种新型的固态光源,具有开关速度快、发光效率高、寿命长等优点,目前已广泛应用于汽车前...
11月2日,西安国际港务区临港产业园举行西安京虹显示科技有限公司设备进入仪式,迎接西安港液晶显示绑定模组项目进入产业园绑定模组生产基地进行调试。作为终端显示产业链的核心配套,西安港液晶显示屏绑定模组项目总投资5亿元,一期投资1.6亿元,计划12月份正式投产运营,年产值10亿元。项目于2021年7月进厂装修,设备投资9000万元,引进设备包含边框研磨...

史海拾趣

问答坊 | AI 解惑

视频信号的测试

本人测试机顶盒的视频输出特性,要求视频输出电平为700mv,改了一天的电路,最后在四川川嘉生产的视音频测试仪测试视频输出幅度达到720mv,(用的是标准测试码流),但视频同步幅度才260mv,输出幅度不够 本人再用示波器测量,信号仍为标准测试码流,可从A/V ...…

查看全部问答∨

单 片DSP 实 现G.729A 语 音 编 解 码 器

国 际 电 信 联 盟(ITU) 于1995 年11 月 推 出 的 建 议G.729 称 作" 共 轭 结 构 代 数 码 本 激 励 线 性 预 测 编 码 方 案"(CS -ACELP)。 它 将64kbps 的PCM 信 号 压 缩 到8kbps, 是 当 前 较 新 的 语 音 压 缩 国 际 标 准。 其 ...…

查看全部问答∨

谁有短消息汽车报警系统c程序!!急,我有很多其它方面的程序有需求请留言

谁有短消息汽车报警系统c程序!!急,我有很多其它方面的程序有需求请留言…

查看全部问答∨

程控器上一芯片27G32JL-35?

程控器上一芯片27G32JL-35不知是什么用途,各管脚的定义,请赐教…

查看全部问答∨

Quartus2的FPGACPLD设计.PDF

Quartus2的FPGACPLD设计.PDF…

查看全部问答∨

C和C++嵌入式系统编程、硬件总线技术

C和C++嵌入式系统编程、硬件总线技术 更多:http://blog.sina.com.cn/mmullu…

查看全部问答∨

千万别被所谓千万像素的相机广告迷惑?

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 今天打开某某新闻网站,一个全幅广告条映入眼帘,号称1600万像素,16倍变焦等,数码摄像机,只要999元,还送若干东东云云,与以前电视购物上的爱X泰克忘异拍风格十分相似。 虽然偶是一眼就能 ...…

查看全部问答∨

一个简单但颇具挑战性的设计课题~请大家帮帮忙

收到一份设计课题,看似简单但却让我晕了头!! 请大家帮忙指点一下,谢谢! 题目是这样的: 设计一个USB开关,要求通过USB接口与电脑通讯,当开关闭合和开启时分别在电脑上给出提示框来显示开关的相应状态。 也就是将开关的状态通过USB接口传 ...…

查看全部问答∨

串口服务器 接收命令

1,moxa nport 5130 串口服务器设备 2,功能是把串口转换成网口 问:串口服务器接收哪种命令? ascii,bcd,crc  或者别的,求高手 …

查看全部问答∨

MAX1641使用心得

    我用了MAX1641锂离子电池充电芯片, 充电终止电压可通过芯片的8脚TERM的取样电阻网络进行调节。     充电电流可以通过10脚和11脚间的取样电阻进行调节。     一共有四种工作模式:  &nbs ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved