📄 hellofinally.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 + -