⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hellofinally.c

📁 该程序用于实现控制油烟机的灶头报警功能,定时功能.
💻 C
字号:
//灶头
//date 2005/08/03
#include <REG935.H>               /* special function register declarations   */
                                  /* for the Philips P89C935 device           */
#include <stdio.h>                /* prototype declarations for I/O functions */
#define uchar unsigned char

sbit Akey=P0^0;
sbit Bkey=P0^1;

sbit Atest=P0^2;     // 1 有效
sbit Btest=P0^3;

sbit Asuck=P1^6;        // 1 有效
sbit Bsuck=P1^7;

sbit music=P1^4;       // 1 有效


bit rtc_open_music3;
bit music3;

uchar temp;
uchar tt;
uchar time_music;

uchar ii;
uchar com1;

//----------------------------------------------------------
// The delay C function  needs about 0.5 ms time 
// time(us) = (250*6 + 2 +10)条指令  * 2/晶振
//  i=1 time =0.003ms;  i=2 time=0.5ms  i=3 time=1ms.......
//----------------------------------------------------------
void delay(unsigned int i)
{
    uchar jjj;
    while(--i)
    {
        jjj=250;
        while(--jjj);
    }
}

//-------------------
//串口接受数据中断
//-------------------
void Rcv_ISR() interrupt 4 using 1
{
  EA=0;

  temp=SBUF;//保存所读取的数据 
  RI=0;     //RI清零 以等待下次接受
  
  if(temp==0x37)          //接受到正确的数据
  { 
    com1++;
    if(com1>2)
	{
   	 Asuck=1;
     Bsuck=1;
     delay(2001); // Delay about 1 seconds
     Asuck=0; 
	 Bsuck=0;

     rtc_open_music3=1; //打开报警
     time_music=0;     //清空报警时间
     com1=0;
     }
  }
 
  EA=1;
 }

//void Send_ISR() interrupt 13
//{
//TI=0;
//}
//------------------
//发送数据
//------------------
void SendData(uchar j)
{ EA=0;
  TI=0;     // TI 清零 准备 发送 
  SBUF=j;   // 发送数据
  while(!TI);// 当TI 为 1 时 发送完毕
   TI=0;     // TI 清0 准备下一次 发送
  EA=1;
}

void Key_int() interrupt 7 using 0
{
 EA=0;
 EKBI=0;
 tt=6;

 EWDRT=1; 

  for(ii=0;ii<10;ii++)
  {
	SendData(0x15);//开烟机
	delay(11);
  }

 KBCON=0x00;
 EA=1;
}
//------------------
// 实时时钟定时器
//------------------
void RTC_int() interrupt 10 using 3
{ 
 EA=0;

if(tt>=1)
 tt--;

 // RTCH=0xB7;   //定时 1S /6M
 // RTCL=0x1A;  
   RTCH=0xE1;   //定时 1S/7.3728M
   RTCL=0x01;

   RTCCON=0x63;// 清零中断标志
 

  //定时关气 产生报警 40 秒
   if(rtc_open_music3)
   {
      time_music++;
      if(time_music<40) 
      {
       music3=1;//报警产生
      }
      else
      {
       music3=0;//报警消除
       rtc_open_music3=0;
      }
   }

   if(music3)
     music=1;//报警音乐输出
   else
     music=0;//关闭报警音乐

  EA=1;
}


//------------------------------------------------
//  The main C function.  
//------------------------------------------------
void main() 
{
  EA=1;  //中断总允许
 
  //P0,P1,P2口
  P0M1 = 0xFF;
  P0M2 = 0xF3;
  P1M1 = 0xFC;
  P1M2 = 0xFC;
  P2M1 = 0xFF;
  P2M2 = 0xFF;
  
  P0=0xF3;
  P1=0x03;

//使T1(P0.7)
  TH1=0xD0;
  TMOD|=0x20;
  AUXR1|=0x20;
  TR1=1;
//产生38KHz,50%占空比的方波

   EWDRT=1;     //实时时钟 中断开启
 
  //RTCH=0xB7;   //定时 1S /6M
  //RTCL=0x1A;  
    RTCH=0xE1;   //定时 1S/7.3728M
    RTCL=0x01;
    RTCCON=0x63; // 开启实时时钟定时器

   WDCON=0xE0;  //关看门狗 定时器
   WFEED1=0xA5;
   WFEED2=0x5A;

 //串口初始化
  SCON=0x50; //使能接收,选择串口模式1
  SSTAT=0x60; //选择独立的Tx/Rx中断

   BRGCON =0x00;
   BRGR0=0xF0; //1200 baud @ 7.3728MHz
   BRGR1=0x17;
   BRGCON =0x03; //使能BRG

   ESR=1; //ESR=Enable Serial Recieve 
// EST=1; //EST=Enable Serial Transmit

  KBPATN=0xF3;//键盘中断初始设置
  KBCON=0x00;
  KBMASK=0x0C;
//  EKBI=1;

   music=0;
   rtc_open_music3=0;
   music3=0;
   time_music=0;

   Asuck=0;        // 1 有效
   Bsuck=0;

   com1=0;
   tt=0;


   delay(1001); // Delay about 0.5 seconds 

 
 while(1) 
 {	
    
    if((!Atest)&&(!Btest))
	{
       delay(401); // Delay about 0.2 seconds

        if((!Atest)&&(!Btest))
        {
                         
                if(tt==0)
			    {			       
			        for(ii=0;ii<10;ii++)
	     		    {
		      	    SendData(0x26);
					delay(11);
				    }
                   if(!music3)
				   {
                   music=0;
                   EWDRT=0; 
                   AUXR1|=0x80;
                   KBCON=0x00;
				   EKBI=1;
                   PCON=0x03;
				   }
			    }
	     }
	 }
	
      
  }//while

}//end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -