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

📄 智能体温计程序_从机.c

📁 智能体温计很好的设计
💻 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 + -