有谁会写单片机程序的啊?我在做一个STC89C52RC单片机与DS18B20温度传感器及蜂鸣器的温度控制报警系统,

当温度大于28度吧发出报警,前面的大部份做好了,就剩蜂鸣器控制报警那块子程序不会写啊,我的程序如下:
#pragma db code
#include<AT89X52.H>
#include "INTRINS.H"
#define BUSY1 (DQ1==0) //定义busy信号
sbit LED_0=P1^0; //定义数码管控制脚为P1口的0-3脚
sbit LED_1=P1^1;
sbit LED_2=P1^2;
sbit LED_3=P1^3;
sbit DQ1=P3^5; //定义18B20单总线引脚
sbit out=P3^7; //指定蜂鸣器的端口P3.7

void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);//声明显示函数
void ds_reset_1(void); //声明18B20复位函数
void wr_ds18_1(char dat); //声明18B20写入函数
void time_delay(unsigned char time);//声明延时函数
int get_temp_1(void); //声明18B20读入温度函数
void delay(unsigned int x); //声明延时函数
void read_ROM(void); //声明18B20读ROM函数
int get_temp_d(void); //声明获取温度函数
void ds_init(void); //声明18B20初始化函数
void ds_getT(void); //声明18B20获得温度显示值函数
void fengminqi(void); //声明蜂鸣器初始化

/*定义数码管段码=====0-9=====A-G=====*/
unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F
/****************以下定义各种变量********************/
unsigned char ResultSignal;
int ResultTemperatureLH,ResultTemperatureLL,ResultTemperatureH;
unsigned char ROM[8];
unsigned char idata TMP;
unsigned char idata TMP_d;
unsigned char f;
unsigned char rd_ds18_1();
unsigned int TemH,TemL; //温度的整数部分和小数部分
unsigned int count; //定义小数计算部分
int get_temp_1(void)
{
unsigned char idata a=0,b=0;
unsigned char idata i;
EA=0;

ds_reset_1();
check_pre_1();

wr_ds18_1(0xcc);
wr_ds18_1(0x44);
while(BUSY1);

ds_reset_1();
check_pre_1();
wr_ds18_1(0xcc);
wr_ds18_1(0xbe);

a=rd_ds18_1();
b=rd_ds18_1();

i=b; /*若b为1则为负温 */
i=(i>>4);
if(i==0)
{
f=0;
TMP=((a>>4)|(b<<4));
a=(a&0x0f);
if (a>8)
{
TMP=(TMP+1);
}
}
else
{
f=1;
a=a>>4;
b=b<<4;

TMP=(a|b);

TMP=~TMP;
TMP=(TMP+1);
}
EA=1;
return(TMP);
}

参考一下下面的报警器程序吧,这是《PROTEUS仿真100例》中的。
//名称:按键发音
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

sbit SPK=P1^0;
sbit K1=P1^7;

void Alarm(uchar t)
{
uchar i,j;
for(i=0;i<200;i++)
{
SPK=~SPK;
for(j=0;j<t;j++);
}

}

void main()
{
while(1)
{
if(K1==1) {Alarm(90);Alarm(120);}
}
}
你可以试着改一下ALARM()函数的数字试试。追问

我那个没有按键的

追答

这个只是参考,你只留下报警函数不就可以了?温度超了后调用。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-11-28
在主循环中加入下面的程序:

if(温度 > 28度) out = 1; //蜂鸣器响
else out = 0; //蜂鸣器不响
相似回答