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

📄 voice.c

📁 这是广西大学生设计大赛的源码
💻 C
字号:

#include "voice.h"
#include "datetime.h"
#include "lcd.h"
#include <REGX51.H>

 


#define VOC P2

 


BIT voc_SendBit7;
BIT voc_IsAlarming;

 

void vocInit(void)
{
 VOC = 0;
 voc_IsAlarming = FALSE;
}


void vocSendByte(BYTE b)
{
 voc_SendBit7 = ~voc_SendBit7;

 if (voc_SendBit7) b&=0x7f;
 else b|=0x80;

 VOC = b;
 DelayX1ms(5);
}


void vocSendString(char* str)
{
 BYTE i = 0;

 while (i<255)
 {
  if (str[i]==0) break;
  vocSendByte(str[i]);
  i++;
 }
}


void vocSendNumberChar(BYTE num)
{
 if (num < 10) vocSendByte(num+'0');
}


void vocSendUInt(BYTE a)
{
 BYTE x100,x10,x1;
 x100 = a / 100;
 x10 = (a % 100) / 10;
 x1 = a % 10;

 if (x100)
 {
  vocSendNumberChar(x100);
  vocSendString("H");
 }

 if (x10)
 {
  vocSendNumberChar(x10);
  vocSendString("X");
 }
 else
 {
  if (x100 && x1) vocSendNumberChar(0);
 }

 if (x1)
 {
  vocSendNumberChar(x1);
 }
 else
 {
  if (a==0) vocSendNumberChar(0);
 }
}


BIT vocIsAlarming(void)
{
 return voc_IsAlarming;
}


void vocStopAll(void)
{
 vocSendByte(0);
 voc_IsAlarming = FALSE;
}


void vocAlarm(void)
{
 if ( !voc_IsAlarming )
 {
  vocSendByte('A');
  voc_IsAlarming = TRUE;
 }
}


void vocTime(void)
{
 DATETIME dtt;

 vocSendString("XI");
 dtt = dttGetCurDateTime();

 //hour
 vocSendUInt( dtt.hh );
 vocSendString(".");

 //minute
 vocSendUInt( dtt.mi );
 vocSendString("M");

 //second
 vocSendUInt( dtt.ss );
 vocSendString("S");
}


void vocTempe(TEMPE * pT, BIT bConvertToF)
{
 TEMPE tempe;
 BYTE m,n;
       // 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
 const BYTE code div[] = {  00,  06,  13,  19,  25,  31,  38,  44,  50,  56,  63,  69,  75,  81,  88,  94, };
// const BYTE -div[]     = {  94, 88,  81,  75,  69, 63,  56,  50,  44, 38,  31,  25,  19, 16,  06,  00, }; //正的倒序

 tempe = *pT;

 if (bConvertToF) ConvertCtoF(pT);
 vocSendString("TD");

 m = ((pT->th << 4) & 0xf0) | ((pT->tl >> 4) & 0x0f);
 if (pT->th & 0x80)
 {
  vocSendString("-");
  m = ~m;
  n = div[(16 - pT->tl) & 0x0f];
 }
 else
 {
  n = div[pT->tl & 0x0f];
 }

 vocSendUInt(m);
 vocSendString(".");
 vocSendNumberChar( n/10 );
 vocSendNumberChar( n%10 );
 vocSendString( bConvertToF ? "FND" : "CND" );

 *pT = tempe;
}

⌨️ 快捷键说明

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