if/while(i=a)a为一个常数

浅析if(i=a)a为常数

在这里插入图片描述
for循环中:最开始i=0,进入到if判断中就变成i=5了,为真,进入if打印,接着执行i++,i变成了6,6<10,所以死循环的打印5

while

在这里插入图片描述
直接在while中算,而且判断一举两得

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit P10=P1^0; uchar a=0;//T0断次数 char c=0; //闪烁次数 uint b=0; //外部断(S14问 uint z; //判断减一执行后是否开启加一按键 void delay(uint z); void display(); uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar code wei[]={0x01,0x02}; uchar m[]={0,0}; void delay(uint z){ //延迟函数 uint j,k; for(j=0;j<z;j++) for(k=0;k<25;k++); } void display(){ //数码管显示函数 uchar i; m[0]=TL1%10; m[1]=TL1/10; for(i=0;i<2;i++){ P2=wei[i]; P0=table[m[i]]; delay(10); } } void tini(){ //定时/计数器初始化 TMOD=0x61; //T0方式1定时,T1方式计数 0110 0001 TL1=0x00; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=0; //T0停止计数 TR1=0; //T1停止计数 } void exini(){ //外部断初始化 EA=1; //CPU开断 EX0=1; //允许INT0断 EX1=1; //允许INT1断 ET0=1; //允许T0断 ET1=1; //允许T1断 PX0=1; IT0=1; //INT0断下降沿触发 IT1=1; //INT1断下降沿触发 } void shanshuo(){ //闪烁程序 for(c=TL1;c>0;c--){ P10=1; delay(500); display(); P10=0; delay(500); display(); } } void main (void) { exini(); tini(); while(1){ display(); } } void int3_0() interrupt 0{ //外部断0服务程序 b=b+1; //断次数加一 TR1=1; //启动计数器1 switch(b){ case 1:TR1=1;break; case 2:TR1=0;b=0;TR0=1;break; } } void int1_0() interrupt 2{ //外部断1服务程序 if(TR1==1) z=0; else z=1; TR1=0; if(TL1>0){ TL1=TL1-1; //计数值减一 } else{ TL1=0; TR1=0; } if(z==0) TR1=1; else if(z==1) TR1=0; } void int1_3() interrupt 1{ //计时器T0断服务程序 TH0=(65536-50000)/256; //定时50ms时间常数 TL0=(65536-50000)%256; a=a+1; //断次数加一 if(a==100){ a=0; TR0=0; //停止计时 shanshuo(); P10=1; //LED熄灭 } } 对此代码进行完善处理
最新发布
05-24
以下是对代码的完善处理: 1. 在代码开始处添加注释,说明代码的功能和使用说明。 ``` // 该代码实现了一个计数器和定时器的功能,同时可以控制LED灯的闪烁 // 使用前需要连接外部按键和数码管显示器,并将LED灯连接到P1.0口 ``` 2. 将变量的命名改为更加有意义的名称。 ``` uchar count_t0 = 0; // T0断次数 char blink_count = 0; // 闪烁次数 uint count_t1 = 0; // 外部断(S1)次数 uint z; // 判断减一执行后是否开启加一按键 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; // 7段数码管显示的码表 uchar code wei[]={0x01,0x02}; // 数码管显示的位选码 uchar m[]={0,0}; // 数码管显示的数值 ``` 3. 将延迟函数的参数名称改为更有意义的名称,并在函数内部添加注释。 ``` void delay(uint ms){ // 延迟函数,ms为延迟的毫秒数 uint i,j; for(i=0;i<ms;i++){ for(j=0;j<25;j++); } } ``` 4. 在数码管显示函数添加注释,并将循环变量的名称改为更有意义的名称。 ``` void display(){ // 数码管显示函数 uchar i; m[0]=count_t1%10; // 个位数 m[1]=count_t1/10; // 十位数 for(i=0;i<2;i++){ P2=wei[i]; // 选第i位 P0=table[m[i]]; // 显示第i位的数值 delay(10); // 稍作延迟 } } ``` 5. 在定时器/计数器初始化函数添加注释,将定时器/计数器的功能描述清晰明了。 ``` void tini(){ // 定时/计数器初始化 TMOD=0x61; // T0方式1定时,T1方式计数 0110 0001 TL1=0x00; // 计数器1的初值为0 TH0=(65536-50000)/256; // 定时器0的时间常数,每50ms断一次 TL0=(65536-50000)%256; TR0=0; // T0停止计时 TR1=0; // T1停止计数 } ``` 6. 在外部断初始化函数添加注释,将外部断的功能描述清晰明了。 ``` void exini(){ // 外部断初始化 EA=1; // CPU开断 EX0=1; // 允许INT0断 EX1=1; // 允许INT1断 ET0=1; // 允许T0断 ET1=1; // 允许T1断 PX0=1; IT0=1; // INT0断下降沿触发 IT1=1; // INT1断下降沿触发 } ``` 7. 在闪烁程序函数添加注释,将闪烁的功能描述清晰明了。 ``` void shanshuo(){ // 闪烁程序,LED灯闪烁count_t1次 for(blink_count=count_t1;blink_count>0;blink_count--){ P10=1; // LED亮起 delay(500); // 延迟500ms display(); // 显示数值 P10=0; // LED熄灭 delay(500); display(); } } ``` 8. 将主函数循环体添加注释,并在最后添加一个无限循环。 ``` void main (void) { exini(); // 外部断初始化 tini(); // 定时/计数器初始化 while(1){ display(); // 显示数值 } } ``` 9. 在断服务函数添加注释,将断的功能描述清晰明了。 ``` void int3_0() interrupt 0{ // 外部断0服务程序,S1按键 count_t1++; // 断次数加一 TR1=1; // 启动计数器1 switch(count_t1){ case 1: TR1=1; break; // 第一次按键,启动计数器1 case 2: TR1=0; count_t1=0; TR0=1; break; // 第二次按键,停止计数器1,启动定时器0 } } void int1_0() interrupt 2{ // 外部断1服务程序,S2按键 if(TR1==1) z=0; // 如果计数器1正在计数,则z=0 else z=1; // 否则z=1 TR1=0; // 停止计数器1 if(count_t1>0){ count_t1--; // 计数值减一 } else { count_t1=0; TR1=0; } if(z==0) TR1=1; // 如果执行了减一操作,则开启计数器1 else if(z==1) TR1=0; // 如果执行了加一操作,则关闭计数器1 } void int1_3() interrupt 1{ // 计时器T0断服务程序 TH0=(65536-50000)/256; // 重新加载时间常数,每50ms断一次 TL0=(65536-50000)%256; count_t0++; // 断次数加一 if(count_t0==100){ // 每隔1s执行一次 count_t0=0; // 计数器清零 TR0=0; // 停止计时 shanshuo(); // LED灯闪烁count_t1次 P10=1; // LED灯熄灭 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值