找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3982|回复: 19
打印 上一主题 下一主题
收起左侧

如何让下面的程序while只运行一次?

  [复制链接]
跳转到指定楼层
楼主
ID:425296 发表于 2018-12-4 00:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include<stc89c51rc.h>
#define uchar unsigned char
#define uint unsigned int
#define light 3     //定义亮度                  
sbit SHCP=P3^6;//595的移位信号         
sbit STCP=P3^5;//是595的锁存信号              
sbit SDA=P3^4;//红数据  

sbit IA=P1^0;//行控制线A
sbit IB=P1^1;//行控制线B
sbit IC=P1^2;//行控制线C




#define  scan0    {IA=0;IB=0;IC=0;}
#define  scan1    {IA=1;IB=0;IC=0;}
#define  scan2    {IA=0;IB=1;IC=0;}
#define  scan3    {IA=1;IB=1;IC=0;}
#define  scan4    {IA=0;IB=0;IC=1;}
#define  scan5    {IA=1;IB=0;IC=1;}
#define  scan6    {IA=0;IB=1;IC=1;}
#define  scan7    {IA=1;IB=1;IC=1;}
uchar line=0;
void   rxd_data();        // 发送移动数据
uchar time_count=0; //计数
uchar reg=0;
/*****不影响其他端口的扫描*************************/
void scan(unsigned char Value)
{switch(Value)
        {case  0: scan0;break;
                  case  1: scan1;break;
                   case  2: scan2;break;
                    case  3: scan3;break;
             case  4: scan4;break;
                      case  5: scan5;break;
                       case  6: scan6;break;
                        case  7: scan7;break;
           default:break;
        }
}
/**************************************/
void Timer0Interrupt(void) interrupt 1 //定时器中断
{
     TH0 = 0x04C;//定时50MS        这里的晶振是18.432M 测试无需理会晶振大小
     TL0 = 0x000;
         
   time_count++;

   if(time_count>10)//发送一次数据
   {      
       time_count=0;
           line++; //下一行
           if(line>8) //共8行
           {
                    line=0; //重新移动       
           }
            rxd_data();//发送数据
        scan(line); //打开行扫描                                                                                              
            STCP=1;//锁存
            STCP=0;

   }

       
}
/********************************************/

/*主函数*/
void main()
{ TMOD=0x01; //定时器0 16位定时定时器1方式2
  TH0=0x4c;  //50ms
  TL0=0x00;

  TR0=1; //开定时器计数
  ET0=1; //开定时器中断
  EA=1;         //开中断
do
{       
} while (1);
}          
/***********************发送移动的数据****************************/
void rxd_data(void)                            //串行发送数据
{
  uchar s;
  uchar k;

  for(s=0;s<4;s++)//发送4字节数据 一行4个字节
        {
     for(k=0;k<8;k++) //一个字节8位
       {
              SHCP=0; //上降沿移位595
          SDA=1;
          SHCP=1;
       }
   }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:415064 发表于 2018-12-4 10:54 | 只看该作者
do
{        
} while (0);
回复

使用道具 举报

板凳
ID:396960 发表于 2018-12-4 12:45 | 只看该作者
只运行一次,那可以不用while(),直接执行可以不?
回复

使用道具 举报

地板
ID:93667 发表于 2018-12-4 13:53 | 只看该作者
只运行一次,还是想用while(1),那么加多一个变量标识符。初始定义标识符 u8 charbuffer=0;
然后,while(1)
{
if(charbuffer<=1)
   charbuffer++;  
else  
{
return; //或者break;
}
}
回复

使用道具 举报

5#
ID:425296 发表于 2018-12-4 16:38 | 只看该作者
phang 发表于 2018-12-4 12:45
只运行一次,那可以不用while(),直接执行可以不?

不行,试过
回复

使用道具 举报

6#
ID:439850 发表于 2018-12-5 11:16 | 只看该作者
while(1)
{
...
break;
}
回复

使用道具 举报

7#
ID:439970 发表于 2018-12-8 11:18 | 只看该作者
int i=1;while(i){...;i--;}
回复

使用道具 举报

8#
ID:186633 发表于 2018-12-8 12:51 | 只看该作者
while 中加一个跳出语句即可
回复

使用道具 举报

9#
ID:442171 发表于 2018-12-8 15:46 | 只看该作者
中间加break即可
回复

使用道具 举报

10#
ID:442270 发表于 2018-12-8 17:29 | 只看该作者
break可以跳出来的
回复

使用道具 举报

11#
ID:442293 发表于 2018-12-8 18:06 来自手机 | 只看该作者
hzwenli6420 发表于 2018-12-5 11:16
while(1)
{
...

do while
回复

使用道具 举报

12#
ID:442132 发表于 2018-12-8 18:08 | 只看该作者
while(1)
{
...
break;
},break跳出循环
回复

使用道具 举报

13#
ID:442329 发表于 2018-12-8 19:29 来自手机 | 只看该作者
使用break跳出就好了
回复

使用道具 举报

14#
ID:442458 发表于 2018-12-8 23:26 | 只看该作者
直接在whlie循环中间加一个break跳出来就行了
回复

使用道具 举报

15#
ID:442603 发表于 2018-12-9 13:33 | 只看该作者
跳出一次就可以了
回复

使用道具 举报

16#
ID:413632 发表于 2018-12-10 09:38 | 只看该作者
int Counter = 0;
int var = 1;//想要while运行几次改成几
while(1)
        {       
                ...//你的内容
                Counter++;
                if(Counter == var)  //当Counter = var跳出while(1)
                break;
        }
    简单明了,希望能帮到你
回复

使用道具 举报

17#
ID:443082 发表于 2018-12-10 10:12 | 只看该作者
使用break
回复

使用道具 举报

18#
ID:443470 发表于 2018-12-10 17:36 | 只看该作者
结束循环break不就行了
回复

使用道具 举报

19#
ID:443729 发表于 2018-12-10 23:11 | 只看该作者
在while前面加一个判断条件就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表