中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

单片机论坛

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 单片机论坛 → 浏览主题: 理论和现实真的有些不同 还是程序有问题
发表新帖 回复该主题
回帖:7个,阅读:942 [上一页] [1] [下一页]
* 帖子主题:

理论和现实真的有些不同 还是程序有问题

分享到
7905
文章数:1887
年度积分:92
历史总积分:7905
注册时间:2008/12/26
发站内信
发表于:2013/7/23 4:58:15
#0楼
#include<reg52.h>//52单片机头文件
#include<intrins.h>//包含有左右循环移位子函数的库
#define uint unsigned int//宏定义
#define ichar unsigned char//宏定义
void delay(uint); //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延200ms

sbit d5=P2^5;
void delay(uint z)
{uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()  //主函数
{
while(1)//大循环
 {uint a,b,c;
a=0xfe;//赋初值
  b=8;
  c=0x7f;
  while(b--);  
{P1=a;//点亮小灯
   d5=0;//开启蜂鸣器
delay(50);//延时50毫秒
   
   d5=1; //关闭蜂鸣器
   delay(50);//再延时50毫秒
   a=_crol_(a,1);//将a变量循环左移一位
 
  }
 while(b--);
   {
     P1=c;//点亮小灯
     d5=0;//开启蜂鸣器
    delay(50);//延时50毫秒
     
    d5=1;//关闭蜂鸣器
    delay(50);//延时50毫秒
    c=_cror_(c,1);//将a变量循环左移一位
   
}

  }
}  
   






#include<reg52.h>  //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int    //宏定义
#define uchar unsigned char  //宏定义
sbit beep=P2^3;
void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
{ //delay(500);大约延时500ms.
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()    //主函数
{
uchar a,i;
while(1)        //大循环
{
a=0xfe;     //赋初值
for(i=0;i<8;i++)   //左移
{
P1=a;       //点亮小灯
beep=0;     //开启蜂鸣器
delay(50); //延时50毫秒
beep=1;     //关闭蜂鸣器
delay(50);  //再延时50毫秒
a=_crol_(a,1); //将a变量循环左移一位
}
a=0x7f;
for(i=0;i<8;i++)  //右移
{
P1=a;       //点亮小灯
beep=0;     //开启蜂鸣器
delay(50); //延时50毫秒
beep=1;     //关闭蜂鸣器
delay(50);   //再延时50毫秒
a=_cror_(a,1); //将a变量循环右移一位
}
}
}
这两个程序为什么后一个可以实现  前面出现不行呢   高手 讲解一下 一晚上了  怎么也搞不明白


开心了就笑,不开心就过会再笑
7669
w71412659
文章数:1458
年度积分:50
历史总积分:7669
注册时间:2013/5/8
发站内信
2018论坛魅力之星
发表于:2013/7/23 8:22:24
#1楼
程序1中while(b--);是什么意思?就是为了空跑等到b=0吗?是不是不应该加“;”?还有,你后一个while(b--)这辈子没机会执行了,从上一个while出来的时候b=0,进入下一个循环就直接跳出循环。
兽人永不为奴,除非包吃包住!
644
铭为科技
文章数:8
年度积分:50
历史总积分:644
注册时间:2013/7/17
发站内信
发表于:2013/7/23 9:12:01
#2楼
while()后面,不应该加;,应该夹在{}代码后面。第二个while同样的问题,另外b还应该先赋值8.

———另外,多说两句:
用这种蜂鸣器控制:
beep=0;     //开启蜂鸣器
delay(50); //延时50毫秒
beep=1;     //关闭蜂鸣器

一看就是学生,太低级了。程序效率低得要死,造成很多问题你都找不到在哪里。
告诉你一个更好的方法吧:
——————————————————————————————————————————————
定义一个全局变量: unsigned char gucBuzzerTimer;
定义一个宏: #define BUZZER_ON(t)  {gucBuzzerTimer=t;}

在需要蜂鸣器响的地方,直接使用函数:BUZZER_ON(20);--不用管蜂鸣器引脚怎么控制,在后面会有。

在系统的定时中断中,比如10ms定时中断中,增加代码:
if(gucBuzzerTimer)
  {
      gucBuzzerTimer--;
      beep=0;
   }
else
  beep=1;
————————————————————————————————————————————
这样的蜂鸣器控制,不会占用系统时间,能保证你时间一致性。
[此贴子已经被作者于2013/7/23 9:13:15编辑过]
——比开发板更实用的产品开发学习系统——
www.magic-wing.com
mwtech.taobao.com
11764
gzg_00
文章数:9003
年度积分:53
历史总积分:11764
注册时间:2009/10/1
发站内信
发表于:2013/7/23 12:51:43
#3楼
程序再好好修改一下吧
6447
jamsonwo
文章数:963
年度积分:80
历史总积分:6447
注册时间:2010/8/24
发站内信
发表于:2013/7/23 22:55:22
#4楼
难道又是被郭天祥害的,在工程使用中,千万不可用延时函数!这会白白浪费CPU资源!你上面两个简单的循环移位,CPU要花去1000多毫秒的时间才能处理完。
7905
文章数:1887
年度积分:92
历史总积分:7905
注册时间:2008/12/26
发站内信
发表于:2013/7/24 4:54:12
#5楼
回复 #2楼 铭为科技
谢了 不过我不是学生  我现在参加工作了  只是觉的单片机挺好玩的  自己学习一下  还望不吝赐教
开心了就笑,不开心就过会再笑
7905
文章数:1887
年度积分:92
历史总积分:7905
注册时间:2008/12/26
发站内信
发表于:2013/7/24 4:55:12
#6楼
回复 #4楼 jamsonwo
才刚开始学   任重道远
开心了就笑,不开心就过会再笑
7905
文章数:1887
年度积分:92
历史总积分:7905
注册时间:2008/12/26
发站内信
发表于:2013/7/24 4:55:54
#7楼
回复 #1楼 w71412659
谢谢指点
开心了就笑,不开心就过会再笑
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004