📄 智能体温计程序_从机.c
字号:
/**********************************************
Project Name : 智能体温计程序_从机
Designed By : sc.Dai
Date : 2007.5.30
**********************************************/
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar data bcd_buf[3]={0x00,0x00,0x00}; //十进制BCD码转换存放区
uchar code sound_add[13]={0x00,0x0a,0x14,0x1e,0x28,0x32,0x3c,
0x46,0x50,0x5a,0x64,0x6e,0x78}; //0,1,2,3,4,5,
//6,7,8,9,十,点,度 存放地址
uchar data order[6]; //"X十X点X度"
uchar ad_data; //存放接收的AD转换数据
uint TIMER_NUM; //1分钟计时
sbit EOM=P2^0;
sbit PD=P2^1;
sbit CE=P2^2;
uchar i;
uint data temp;
/**********************************************
/*十进制BCD码转换函数
/**********************************************/
void BCD(void)
{
bcd_buf[2]=(ad_data/51); //十位
temp=(ad_data%51);
temp=(temp*10);
bcd_buf[1]=(temp/51); //个位
temp=(temp%51);
temp=temp*10;
bcd_buf[0]=(temp/51); //小数位
}
/**********************************************/
/*语音芯片报温度函数
/*调用一次报告一次温度
/**********************************************/
void sound_play(void)
{
//PD=1;
_nop_();
_nop_();
PD=0; //节电控制端接低电平,正常工作
for(i=0;i<6;i++)
{
uchar data n=0;
P0=sound_add[order[i]];//
CE=0; //开始播放
_nop_();
_nop_();
CE=1;
while(EOM);
while(EOM==0);
_nop_();
_nop_();
}
}
/**********************************************/
/*主函数
/**********************************************/
void main(void)
{
TMOD = 0x21; // 定时器1工作于方式2,8位自动重载模式,
//用于产生波特率.定时器0工作与方式1,用于1s定时
TH1 = 0xe1; // 波特率为1000
TL1 = 0xe1;
SCON = 0x50; // 设定串行口工作方式
PCON = 0x00; // 波特率不倍增
RI=0; //清除接收中断标志
EA = 1; // 开总中断
ET0=1; //开T0中断
ES=1; //开串口中断
PT0=1; //T0高优先级
TR0=1; //启动T0
TR1 = 1; // 启动定时器1
while(1)
{
BCD();
order[0]=bcd_buf[2];
order[1]=0x0a;
order[2]=bcd_buf[1];
order[3]=0x0b;
order[4]=bcd_buf[0];
order[5]=0x0c;
}
}
/**********************************************/
/*串口中断服务程序
/**********************************************/
void serial(void) interrupt 4
{
RI=0;
ad_data=SBUF;
RI=0;
}
/**********************************************/
/*T0中断服务程序
/**********************************************/
void timer0(void) interrupt 1
{
TH0=0xec; //10ms定时
TL0=0x78;
TIMER_NUM++;
if(TIMER_NUM==12000) //一分钟
{
TIMER_NUM=0;
sound_play();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -