51单片机实战教程之C语言基础(八 while循环)

         while循环(或称while语句),也是条件循环,一般格式为:

while(条件表达式)

     循环语句

        程序运行时,首选判定条件表达式结果是否为true,如果为true,就执行循环语句;反之则跳过,去执行while循环后面的语句。

       while 循环可以只有条件表达式,没有循环语句。如while(!TF0= 0);这个实际上是T0硬件延时,等待T0计数器溢出。

        while循环非常有用,在单片机编程中最常见的是:while(1){语句或语句块},几乎每个main()函数中都有。这是一个死循环,用它可以避免因程序执行到最后,跳出main()函数,而出现系统频繁开关机。示例:

//*****************************
void main()
{
    //***************init IO
    STC_IOInit(0xFF, 0xFF, BI_IO);
    P1 = 0xFF;
    P2 = 0xFF;
    P3 = 0xFF;
    P4 = 0xFF;
    P5 = 0xFF;
    P6 = 0xFF;
    P7 = 0xFF;
    
    idleFlag = 0;
    reFlag = 0;
    mRdata = 0;
    
    CD4501_E = 1;
    CD4501_Ea = 1;
    P74H245 = 0;
    E74H245_1 = 1;
    E74H245_2 = 1;

    //***********************init uart1
    STC_PortPinsInit(GPIO_P3, GPIO_PIN7, PP_OUT);
    mUartStruct.Pinsel = G2;
    mUartStruct.MODE = VBAUD_8BITS;
    mUartStruct.MCEN = 0;
    mUartStruct.RDEN = 1;
    mUartStruct.TimerSel = Timer2;
    mUartStruct.priortiyHigh = 1;
    mUartStruct.intEnable = 1;
    mUartStruct.BaudRate = 9600;
    UART1_Init(&mUartStruct);
    
    //****************************************init CS1237
    cs1237SCK0 = 0; //cs1237_1 normal working
    cs1237SCK1 = 0; //cs1237_2 normal working
    C1237_Init(0, C1237_REF_OFF,C1237_40HZ,C1237_PGA_1,C1237_CHA);
    C1237_Init(1, C1237_REF_OFF,C1237_40HZ,C1237_PGA_1,C1237_CHA);
    Delay10xms(1,8);
    C1237_ReadReg(0);
    C1237_ReadReg(1);
    C1237_ReadResult(0);
    C1237_ReadResult(1);
 
    SundBuzzerx100ms(1);
    Delay100xms(1,8);
    SundBuzzerx100ms(2);
    Delay100xms(1,8);
    SundBuzzerx100ms(2);
     
    EA = 1; //int enable
    
    //subWayFlag = 'T';
    while(1)
    {
        switch(subWayFlag)
        {
            case 0xB0:
                MainInterface();
                break;
            case 'T':
                ModularTest();
                break;
            case 0xA0:
                SundBuzzerx100ms(2);
                break;
            case 0xAA:
                McrTest(); //multiple channel contact resistance test
                break;
            case 0xAB:
                SrTest();//single channel resistance test
                break;
        }
    }
}
//End of main()

       while语句是条件循环语句,当while后面圆括号中的条件表达式值为true时,循环体内的程序ji就一直循环执行下去,直到其条件表达式值变为false。我们可以用它来实现数据发送,数组操作等多种用途。 示例:

//*******************************************************
void UART1_SendString(ui8 *mString) //send tring
{
    ui8 i = 0;
    ui8 tem = ES;
    ES = 0;
    while(mString[i]!=0)
    {
        UART1_SendByte(mString[i]);
        i++;
    }
    ES = tem;
}
//End of UART1_SendString(ui8 *mString)
      与while语句相似的还有do while语句,该语句循环体在do的后面,while(条件表达式)放在最后。它的一般格式为:

       do{

              语句或语句块

           }while(条件表达式);

 不管条件表达式的值如何,先执行一次循环内的程序,然后再据条件表达式的值决定是否在进行下一个循环。示例:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bill66

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值