📄 mzmfr.c
字号:
/* This program is a example */
/* item1 */
#include <reg51.h> /* item2 */
#define uint unsigned int
#define uchar unsigned char
uchar bdata FLAG;
sbit FLAG1 = FLAG^1;
sbit FLAG2 = FLAG^2;
sbit P1_1 = P1^1;
uchar data time,Dtime,Btime; /* item3 */
uint fetch_rate(void); /* item4 */
main(){ /* item5 */
char bdata JFLAG;
uint data state,Astate,Bstate,rate;
do {
P1=0xFF; /* item6 */
FLAG=P1;
TXD=0; /* P3.1 */
JFLAG=FLAG>>6;
JFLAG=JFLAG&0x03;
switch(JFLAG) {
case 0:
time=2;Dtime=20;break;
case 1:
time=4;Dtime=40;break;
case 2:
time=6;Dtime=60;break;
case 3:
time=8;Dtime=80;break;
}
Btime=Dtime;
JFLAG=FLAG>>3;JFLAG=JFLAG&0x07;
switch(JFLAG) {
case 0:
state=50;break; /* item7 */
case 1:
state=100;break;
case 2:
state=150;break;
case 3:
state=200;break;
case 4:
state=250;break;
case 5:
state=300;break;
case 6:
state=350;break;
case 7:
state=400;break;
}
FLAG1=0;
TMOD=0x51;
TH1=0;
TL1=0;
TH0=0x3C;
TL0=0xB0;
TR0=1;
TR1=1;
ET0=1;
EA=1;
rate=fetch_rate(); /* item8 */
if(!FLAG2) {
Astate=state+2*state/10;
if(rate<=state) {
TXD=1;
do {
rate=fetch_rate();
}while(rate<=Astate);
TXD=0;
}
}
else {
Bstate=state-2*state/10;
if(rate>=state) {
TXD=1;
do {
rate=fetch_rate();
}while(rate>=Bstate);
TXD=0;
}
}
}while(1);
}
unsigned int fetch_rate() /* item9 */
{ /* item10 */
uint count;
do{ }while(!FLAG1);
FLAG1=0;
count=TH1*256+TL1;
TH1=0;
TL1=0;
Dtime=Btime;
return(count/time); /* item11 */
} /* item12 */
timer0 () interrupt 1 using 1
{
TH0=0x3C;
TL0=0xB0;
Dtime=Dtime-1;
if(Dtime==0) {FLAG1=1;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -