📄 89c51.c
字号:
#include <REG51.h>
#include <stdio.h>
void main(void)
{
idata char ch,flag,loop_j;
idata unsigned int time,loop_i ;
////////////////
// 寄存器设置 //
////////////////
SCON = 0x50; // SCON: mode 1, 8-bit UART, enable receive
TMOD = 0x21; // TMOD: timer 1, mode 2, 8-bit reload
// timer 0, mode 1, 16-bit timer
TH1 = 0x0FD; // TH1: reload value for 9600 baud
TR1 = 1; // TR1: timer 1 run
TI = 1;
//////////////////////
// 提示輸入倒計時間 //
//////////////////////
printf("Please input countdown time(0~999): ");
while(!RI)
{
}
RI = 0;
ch = SBUF; //倒计时秒数0~999,接受3个字符来设定
time = (ch-0x30)*100;
while(!RI)
{
}
RI = 0;
ch = SBUF;
time += (ch-0x30)*10;
while(!RI)
{
}
RI = 0;
ch = SBUF;
time += (ch-0x30);
//////////////////////
// 提示選擇控制方式 //
//////////////////////
printf("When countdown time is over, is the relay ON or OFF?(Y:ON; N:OFF): ");
while(!RI)
{
}
RI = 0;
ch = SBUF;
if(ch=='Y')
{
flag = 1;
T1 = 1; // P3.5置高,放開繼電器
}
else
{
flag = 0;
T1 = 0; // P3.5置低,吸合繼電器
}
TL0=0x1E; //设置timer 0以0.05s溢出,则初值 m=2^16-(0.5X11059200)/12=19486=0x4C00
TH0=0x4C;
TF0 = 0;
TR0 = 1; //timer 0 run
//////////////////////
// 每1s更新一次時間 //
//////////////////////
for(loop_i = time-1; loop_i > 0 ; loop_i--)
{
for(loop_j = 20; loop_j > 0 ; loop_j--)
{
while(!TF0) // wait for timer 0 overflow
{
}
TL0 = 0x1E;
TH0 = 0x4C;
TF0 = 0;
}
printf("%d",loop_i);
}
TR0 = 0; //timer o stop
////////////////
// 控制繼電器 //
////////////////
if(flag)
T1 = 0;
else
T1 = 1;
TL0=0x1E;
TH0=0x4C;
TF0 = 0;
TR0 = 1;
WR=0; //Beep on
//////////////
// BEEP鳴2s //
//////////////
for(loop_j = 40; loop_j > 0 ; loop_j--)
{
while(!T0) // wait for timer 0 overflow
{
}
TL0 = 0x1E;
TH0 = 0x4C;
TF0 = 0;
}
WR=0; //Beep off
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -