📄 drop_02.c
字号:
byte presence;
if (channel==1) DQ_CH1=0; // DQ 低电平
else DQ_CH2=0;
DelayN10us(29); // 480us
if (channel==1) DQ_CH1=1; // DQ 高电平
else DQ_CH2=1;
DelayN10us(3);
if (channel==1) presence = DQ_CH1; // presence 信号
else presence = DQ_CH2; // presence 信号
DelayN10us(25);
return(presence);
} // 0=presence, 1 = no part
/*********************************************************/
/* 名称: byte ReadAByteFromDS18B20 */
/* 说明: */
/* 功能: 从 1-wire 总线上读取一个字节 */
/* 调用: DelayN10us() */
/* 输入: byte channel */
/* 返回值: 接受的数据:value */
/*********************************************************/
byte ReadAByteFromDS18B20(byte channel)
{
byte i;
byte value = 0;
for (i=8;i>0;i--)
{
value>>=1;
if (channel==1) DQ_CH1=0; // DQ 低电平
else DQ_CH2=0;
if (channel==1) DQ_CH1=1; // DQ_CH1 高电平
else DQ_CH2=1;
DelayN10us(1);
if(channel==1)
{
if(DQ_CH1) value|=0x80;
}
else
{
if(DQ_CH2) value|=0x80;
}
DelayN10us(6);
}
return(value);
}
/*********************************************************/
/* 名称: void WriteAByteToDS18B20 */
/* 功能: 向 1-WIRE 总线上写一个字节 */
/* 说明: */
/* 调用: DelayN10us() */
/* 输入: 写入数据:char val , byte channel */
/* 返回值: 无 */
/*********************************************************/
void WriteAByteToDS18B20(char val,byte channel)
{
byte i;
for (i=8; i>0; i--) // 一次写一字节
{
if (channel==1) DQ_CH1=0; // DQ 低电平
else DQ_CH2=0;
if(channel==1) DQ_CH1 = val&0x01;
else DQ_CH2 = val&0x01;
DelayN10us(5);
if (channel==1) DQ_CH1=1; // DQ_CH1 高电平
else DQ_CH2=1;
val=val/2;
}
DelayN10us(5);
}
/*********************************************************/
/* 名称: char ReadTemperatureAndRunDS18B20 */
/* 功能: 读取温度,并启动一次温度测试 */
/* 说明: */
/* 调用: ResetOfDS18B20() WriteAByteToDS18B20() */
/* ReadAByteFromDS18B20() */
/* 输入: 无 */
/* 返回值: char temp.x/2 */
/*********************************************************/
char ReadTemperatureAndRunDS18B20(byte channel)
{
union
{
byte c[2];
int x;
}temp;
ResetOfDS18B20(channel);
WriteAByteToDS18B20(0xCC,channel); // 跳过 ROM
WriteAByteToDS18B20(0xBE,channel); // 读
temp.c[1]=ReadAByteFromDS18B20(channel);
temp.c[0]=ReadAByteFromDS18B20(channel);
ResetOfDS18B20(channel);
WriteAByteToDS18B20(0xCC,channel);
WriteAByteToDS18B20(0x44,channel); // 开始
return temp.x/2;
}
/*********************************************************/
/* 名称: void ConversionTemperatureWithDS18B20 */
/* 功能: 启动一次温度测试 */
/* 说明: */
/* 调用: ResetOfDS18B20() WriteAByteToDS18B20() */
/* DelayN10us() */
/* 输入: byte channel */
/* 返回值: char temp.x/2 */
/*********************************************************/
void ConversionTemperatureWithDS18B20(byte channel)
{
ResetOfDS18B20(channel);
DelayN10us(5);
WriteAByteToDS18B20(0xCC,channel);
WriteAByteToDS18B20(0x44,channel); // 开始
}
/******************************************************************/
/* Function Subprogram */
/* ~~~~~~~~~~~~~~~~~~~ */
/******************************************************************/
void Channel1Run()
{
}
void Channel2Run()
{
}
void ChannelAllRun()
{
}
void SetTemperatureOfChannel1()
{
}
void SetTemperatureOfChannel2()
{
}
void SetYear()
{
}
void SetMonth()
{
}
void SetDay()
{
}
void SetHour()
{
}
void SetMinute()
{
}
void UpdateTimeDate()
{
}
/*********************************************************/
/* 名称: void T2OfSTC89C52Init */
/* 功能: Initial time2 of STC89C52 */
/* 说明: */
/* 调用: */
/* 输入: 无 */
/* 返回值: 无 */
/*********************************************************/
void T2OfSTC89C52Init()
{
RCAP2H=0xc4;
RCAP2L=0x00;
T2CON =0x00;
EA=1;
ET2=1;
TR2=1;
}
/*********************************************************/
/* 名称: void DS1302Init */
/* 功能: Initial DS1302 */
/* 说明: */
/* 调用: */
/* 输入: 无 */
/* 返回值: 无 */
/*********************************************************/
void DS1302Init()
{
}
/*********************************************************/
/* 名称: void Timer2OfSTC89C52 */
/* 功能: time2 of STC89C52 interrupt program */
/* 说明: */
/* 调用: */
/* 输入: 无 */
/* 返回值: 无 */
/*********************************************************/
void Timer2OfSTC89C52() interrupt 5
{
TF2=0;
T2_counter++;
}
/*********************************************************/
/* 名称: void Main */
/* 功能: Main program start */
/* 说明: */
/* 调用: */
/* 输入: 无 */
/* 返回值: 无 */
/*********************************************************/
void Main()
{
unsigned char data menu_number;
unsigned char data KeyValue;
//****
//****
KeyInit();
DS1302();
LCDInit();
T2OfSTC89C52Init();
Wait5MS();
menu_number=2;
DisplayARowChar(menu_number,1); /*显示主菜单并等待按键*/
while(1)
{
KeyValue=ReadKey();
if(KeyValue==DownKeyDown)
{
if(menu_number!=4||menu_number!=7||menu_number!=9||menu_number!=14)
{
menu_number++;
DisplayARowChar(menu_number,1);
}
}
else if(KeyValue==UpKeyDown)
{
if(menu_number!=2||menu_number!=5||menu_number!=8||menu_number!=10)
{
menu_number--;
DisplayARowChar(menu_number,1);
}
}
else if(KeyValue==UpAndOKKeyDown)
{
if(5<=menu_number||menu_number<=7)
{
menu_number=2;
DisplayARowChar(menu_number,1);
}
else if(menu_number==8||menu_number==9)
{
menu_number=3;
DisplayARowChar(menu_number,1);
}
else if(10<=menu_number||menu_number<=14)
{
menu_number=4;
DisplayARowChar(menu_number,1);
}
}
else if(KeyValue==OKKeyDown)
{
switch(menu_number)
{
case 2:
menu_number=5;
DisplayARowChar(menu_number,1);
break;
case 3:
menu_number=8;
DisplayARowChar(menu_number,1);
break;
case 4:
menu_number=10;
DisplayARowChar(menu_number,1);
break;
case 5:
Channel1Run();
break;
case 6:
Channel2Run();
break;
case 7:
ChannelAllRun();
break;
case 8:
SetTemperatureOfChannel1();
break;
case 9:
SetTemperatureOfChannel2();
break;
case 10:
SetYear();
break;
case 11:
SetMonth();
break;
case 12:
SetDay();
break;
case 13:
SetHour();
break;
case 14:
SetMinute();
break;
}
}
else if(KeyValue==NoKeyDown)
{
if(T2_counter>=100) //每秒更新时间一次
{
T2_counter=0;
UpdateTimeDate();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -