久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1079|回復: 0
打印 上一主題 下一主題
收起左側

PIC12F509項目程序(謝絕轉載)

[復制鏈接]
跳轉到指定樓層
樓主
ID:1042330 發表于 2023-2-13 13:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/******************project  N0801*******************/
//******** completion time 2023-2-13 by bobo********/
//**************************************************/
//                 ________________
//            VDD-| 1            8 |-VSS
//            GP5-| 2           27 |-GP0/DAT
//            GP4-| 3           26 |-GP1/CLK
//     GP3/RMCLR--| 4           25 |-GP2
//                |________________|
//                    PIC12F509
//**************************************************/


#include <pic.h>
//芯片配置字
__CONFIG(0xFEA);        //參考:《PIC12F509數據手冊》第41頁 配置位 GP3引角配置成輸入引角

#define _XTAL_FREQ 4000000            //系統時鐘4M,定義這個是為了方便調用延時函數   __delay_ms(500);  //延時500MS
#define uchar unsigned char
#define Green_LED  GP1//綠燈
#define Red_LED  GP0//紅燈
#define U3  GP2//U3信號
#define U1  GP5//U1信號
#define RELAY  GP4//繼電器
#define Key  GP3//KEY鍵

void Scanf_U1(void);//U1檢測函數
void Scanf_U3(void);//U3檢測函數
void Key_Scan(void);//按鍵掃描
void Flashing_10seconds(void);//閃燈10S
void Slow_flashing_LED(void);//慢閃循環
void Slow_flashing_LED_GreenAndRed(void);//雙燈慢閃循環
void working_fun(void);//正常工作
void Flashing_10seconds_turn_on(void);//開機閃燈10S

volatile unsigned int Time_cunt=0;//缺水保護計數
volatile unsigned int U1_Flag=0;//U1狀態
volatile unsigned int U3_Flag=0;//U3狀態
volatile unsigned int Key_Flag=0;//按鍵狀態
volatile unsigned int Kaiji_Flag=0;//開機閃燈10S標志

void main(void)
{
   __delay_ms(100);  //上電延時100毫秒,以保證電源可靠供電
   OPTION=0x03;//T0CS=0;選擇定時器模式(16分頻),讓GP2為普通IO,允許內部弱上拉(GP3開關按鍵需要上拉)
   TRIS=0X2C;//將GP0 GP1 GP4設置成輸出  GP2 GP5 和GP3設置成輸入狀態
   GPIO=0x08;
   TMR0=0x00;
   OSCCAL=0x00; //校準頻率(中心頻率)
   Time_cunt=0;
   RELAY=0;
   Green_LED=0;
   Red_LED=0;
   Key=0;
   Scanf_U1();
   Scanf_U3();
   U1_Flag=0;  
   Time_cunt=0;  
   Flashing_10seconds_turn_on();//開機快閃10S

        while(1)
  {     
      if((U3_Flag==1&&Kaiji_Flag==0)||Key_Flag==0||U1_Flag==2||Time_cunt==15000||Time_cunt==75000||Time_cunt==225000||Time_cunt==900000)
     {
     Flashing_10seconds();//快閃10S
     }                                                                                                                                                      
      if(U1_Flag==1)
     {
     working_fun();
     }
     else if(U3_Flag==1&&U1_Flag==1)
     {
     working_fun();
     }                                                         
     else if(U3_Flag==1)
     {
     Slow_flashing_LED_GreenAndRed();     
     }
     else if(U3_Flag==2||U1_Flag==0)   
     {
     Slow_flashing_LED();     
     }      
  }
}
void Scanf_U1(void)//U1檢測
{
  if(U1==0)//磁鐵靠近U1時,正常工作(出水口打開時)
     {                                       
     if(U1_Flag!=1)
     {     
     U1_Flag=1;     
     }                 
     }else
     {     
      if(U1_Flag==1)
     {            
     U1_Flag=2;      
     }         
     }   
}            
void Scanf_U3(void)//U3檢測
{
  if(U3==0)
     {                                       
     if(U3_Flag!=1)
     {     
     U3_Flag=1;        
     }            
     }else
     {     
      if(U3_Flag==1)
     {            
     U3_Flag=2;      
     }           
     }   
}                                 
void Flashing_10seconds(void)//快閃10S函數
{
     RELAY=1;
     Red_LED=0;   
     unsigned int k=0,j=0;
     while(1)
        {                     
            if(++k>10)
                {
            k=0;
            Green_LED=!Green_LED;
            }        
            while(TMR0<250);   //250*16=4MS/
                TMR0=0;
            Scanf_U1();
            Scanf_U3();
        Key_Scan();               
                j++;               
                if(j>2500)
                {   
        if(U1_Flag==2)//如果U1_Flag==2 10S后讓它變成0
        {
        U1_Flag=0;
        }                  
            break;           
                }
                if(U3_Flag==1&&U1_Flag==1)
                {
                    break;
                }        
        }        
}     
void Flashing_10seconds_turn_on(void)//開機閃燈10S函數
{
     RELAY=1;
     Red_LED=0;
     unsigned int k=0,j=0;
     Kaiji_Flag=1;
     while(1)
        {                     
            if(++k>10)
                {
            k=0;
            Green_LED=!Green_LED;
            }        
            while(TMR0<250);   //250*16=4MS/
                TMR0=0;
            Scanf_U1();
            Scanf_U3();
        Key_Scan();               
                j++;               
                if(j>2500||Key_Flag==0)
                {                       
            break;           
                }               
        }        
}                 
void Slow_flashing_LED(void)//慢閃LED函數
{
     RELAY=0;
     Red_LED=0;
     //Kaiji_Flag=0;
     unsigned int k=0;
     Time_cunt=0;//待機狀態把缺水保護時間清0
     while(1)
        {                       
            if(++k>250)
                {
            k=0;
            Green_LED=!Green_LED;

            }        
        while(TMR0<250);   //250*16=4MS/
                TMR0=0;
            Scanf_U3();               
            Key_Scan();
        if(Key_Flag==0||U3_Flag==1)
        {      
            break;
        }                       
        }        
}           
void Slow_flashing_LED_GreenAndRed(void)//雙燈慢閃LED函數
{
     Green_LED=0;
     Red_LED=0;
     RELAY=0;
     Kaiji_Flag=0;
     //Time_cunt=0;
     unsigned int k=0;
     while(1)
        {                  
            if(++k>250)
                {
            k=0;
        Green_LED=!Green_LED;
        Red_LED=!Red_LED;
            }        
        while(TMR0<250);   //250*16=4MS/
                TMR0=0;
        Key_Scan();
        Time_cunt++;
        if(Key_Flag==0||Time_cunt==15000||Time_cunt==75000||Time_cunt==225000||Time_cunt==900000)//2500是10S 15000是一分鐘 5分鐘是750000 15分鐘是225000 60分鐘是900000
       {            
           break;
       }                  
        }        
}           
void working_fun(void)//正常工作函數
{
     Kaiji_Flag=0;
     Time_cunt=0;//只要正常工作 就把缺水保護時間清0
     while(U1_Flag==1)
     {
      Scanf_U1();
      Scanf_U3();
      Red_LED=0;
      Green_LED=1;                           
      RELAY=1;
      Key_Scan();
      if(Key_Flag==0)
      {
          break;
      }      
     }   
}
/*********按鍵掃描函數**********/
void Key_Scan(void)
{  
     if(Key==1)
     Key_Flag=1;
     else
     Key_Flag=0;
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 凹凸日日摸日日碰夜夜 | 久国产视频 | 国产精品不卡 | 日日淫 | 亚洲精品久久久久中文字幕二区 | 精久久 | 国产精品久久网 | 精品99在线 | 成人免费一区二区三区视频网站 | 一区二区三区日本 | 中文字幕精品一区 | 精品国产乱码久久久久久影片 | 亚洲一区免费 | 日韩欧美国产成人一区二区 | 精品国产免费一区二区三区五区 | 欧美日韩成人 | 五月婷亚洲 | 久久性色| 亚洲国产精品一区二区三区 | 亚洲一区在线免费观看 | 国产高潮好爽受不了了夜夜做 | 欧美一级久久 | 国产激情精品一区二区三区 | 日韩精品一 | 日韩欧美久久精品 | 久久99蜜桃综合影院免费观看 | 亚洲一级黄色 | 粉嫩高清一区二区三区 | 久久亚洲精品久久国产一区二区 | 国产精品1区2区3区 国产在线观看一区 | 国产免费一区 | 一区二区成人在线 | 国产精品久久久久久久免费观看 | 免费观看一级特黄欧美大片 | 99福利视频 | 国产高清在线观看 | 亚洲欧洲成人av每日更新 | 日韩在线视频一区 | 美女一区| 亚洲精品国产成人 | 久久精品久久久久久 |