c语言在线翻译,求注释

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P37=P3^7;
sbit P36=P3^6;
sbit BEEP=P1^7;

uint cnt;
uchar i=0;
uchar second=3;
uchar int_time;
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff
};

void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=120;t>0;t--);
}
void init(void)
{
TMOD = 0x01;
IE = 0x83;
TR0 = 1;

IT0 = 1;
PX0 = 1;
EA=0;

}
void main()
{
init();
P0=0x00;
BEEP=1;
while(1)
{
P0=~DSY_CODE[i];
if(P37==0)//复位
{
DelayMS(10);
if(P37==0)
{
BEEP=1;
i=0;
second=3;
init();
EA=0;
}
}
if(P36==0)//启动
{
DelayMS(10);
if(P36==0)
{
BEEP=1;
init();
EA=1;
i=0;
second=15;
}
}
}
}
/************************************************/
void extern_int0(void) interrupt 0
{
EX0=0;
DelayMS(10);
if(P23==0)
{
i=1;
BEEP=0;
EA=0;
}
if(P24==0)
{
i=2;
BEEP=0;
EA=0;
}
if(P25==0)
{
i=3;
BEEP=0;
EA=0;
}
if(P26==0)
{
i=4;
BEEP=0;
EA=0;
}
if(P27==0)
{
i=5;
BEEP=0;
EA=0;
}
}

void T0_INT() interrupt 1
{
TH0 = -50000/256;
TL0 = -50000%256;
int_time ++; //每来一次中断,中断次数int_time自加1
if(int_time==20) //够20次中断,即1秒钟进行一次检测结果采样
{
int_time=0; //中断次数清0
second--; //秒加1
if(second==0)
{
second =0;
EA=0;
}
}
}

第1个回答  2019-04-19
in t
第2个回答  2019-01-18
#include <reg52.h>//导入库文件
#include <intrins.h>
#define uchar unsigned char  //给unsigned char 重新起一个名字uchar
#define uint unsigned int //同理给unsigned int 起一个uint

sbit P23=P2^3; //将P2.3口的地址赋给P23  底下同理,注意这里是地址
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P37=P3^7;
sbit P36=P3^6;
sbit BEEP=P1^7; 

uint cnt;  //定义一个unsinged int 的变量
uchar i=0; //定义变量
uchar second=3;
uchar int_time;//同理定义变量
/************************************************************************/
/* 0xC0  11000000
   0xf9  11111001
   0xa4  10100100
   0x99  01010101
   0x92  01010010
   0x80  01000010
   0xf8  11110100
   0x80  01000000
   0x90  01010000
   0xff  11111111
*/
/************************************************************************/
uchar code DSY_CODE[]=  //定义一个flash区的unsigned char类型的数组
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff
};
/************************************************************************/
/* 延迟函数 */
/************************************************************************/
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=120;t>0;t--);
}
/************************************************************************/
/*   初始化中断*/
/************************************************************************/
void init(void)
{
TMOD = 0x01;//TMOD定时器1 和定时器0工作方式选择  0x01  16位定时计数器
IE = 0x83;//IE 83 10000011  开启总中断开关EA位  开启定时器0的总中断开关和外部中断开关
TR0 = 1;//定时器0的运行控制位开启

IT0 = 1;//外部中断选择上升沿或下降沿触发
PX0 = 1;//定时器0优先级设为高
EA=0;//关闭中断总开关

}
/************************************************************************/
/* 主函数                                                               */
/*
主要功能:对P0口进行位操作 至于哪一位,是基于P2.3-P2.7的状态  外部中断
根据P3.6 和P3.7的状态进行延迟操作P1.7口的状态
*/
/************************************************************************/
void main()
{
init(); //初始化中断
P0=0x00;//将P0^2口全部拉低
BEEP=1;//P1.7口置高
//主循环
while(1)
{
P0=~DSY_CODE[i];//对应上边的数组进行取反,然后赋给P0口,这里具体要看你硬件是干嘛的,如果是LED灯的话,例如
//0xC0  11000000  取反  00111111,则 P0.7和P0.6是亮 其他都是灭
if(P37==0)//如果P3.7为低电平
{
DelayMS(10);//延迟
if(P37==0)//如果P3.7为低电平  这里保证P3.7的电平不被修改
{
BEEP=1;//P1.7口置高
i=0;//i置零
second=3;//second=3用在中断中
init();//初始化
EA=0;//关闭总中断开关
}
}
if(P36==0)//启动
{
DelayMS(10);//延迟
if(P36==0)//如果P3.6为低电平

BEEP=1; //P1.7置高
init();//初始化中断
EA=1;//开启总中断开关,开始计时,或者等待外部中断
i=0;//i清零
second=15;//second=15
}
}
}
}
/************************************************************************/
/* 外部中断0 执行函数                                                                     */
/************************************************************************/
void extern_int0(void) interrupt 0 
{
EX0=0;//如果已经进入中断则先关闭外部中断0的开关以免他再次进入  在init()函数中进行开启
DelayMS(10);
if(P23==0)//如果P2.3为低电平  则执行下边函数,后边几个同理不同的只有i不同,从这里看出是在用i的值进行区分P2.3-P2.7
{
i=1;
BEEP=0;
EA=0;//关闭总中断
}
if(P24==0)
{
i=2;
BEEP=0;
EA=0;
}
if(P25==0)
{
i=3;
BEEP=0;
EA=0;
}
if(P26==0)
{
i=4;
BEEP=0;
EA=0;
}
if(P27==0)
{
i=5;
BEEP=0;
EA=0;
}
}
/************************************************************************/
/* 定时器0 执行函数                                                                     */
/************************************************************************/
void T0_INT() interrupt 1
{
//不明白你这里为什么是负数
TH0 = -50000/256;//进行装初值  高八位
TL0 = -50000%256;//低八位
int_time ++; //每来一次中断,中断次数int_time自加1
if(int_time==20) //够20次中断,即1秒钟进行一次检测结果采样
{
int_time=0; //中断次数清0
second--; //秒加1  second在主函数里进行赋值  P3.7为低是second=3  P3.6为低时 second=15
if(second==0)//P3.7延迟3S P3.6延迟15S在重新进行计时
{
second =0;
EA=0;

}
}

本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网