一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

搜索
楼主: benli

[其他综合] 初学C,来请教

  [复制链接]
发表于 2013-1-27 09:38 | 显示全部楼层
你的这个需求应该用三种程序基本结构之一的循环来完成.你能提出这个问题说明需要补一下程序设计的基础.建议找本谭浩强的C语言来看一下,系统的学习一下C的语法和程序的基本设计,再回来写程序就不用纠结于这种基础问题了.如果想再提高一点可以找本数据结构读一下,了解一下基本的数据结构及相关算法.

具体到这个问题用for/while/do-while都可以实现,目前还不需要区分当型和直到型循环,但有些程序结构必须要区分的.宏定义你目前可以理解为一个常量,这个常量在程序里到处都要调用,用宏定义在最前面定义好了调用方便,当需要改变这个常量时只要在定义那里改一下数值就行了,不必在程序里到处修改以减少出错误的机率.如果你需要经常改变循环的次数,只要在循环条件里用数值常量或变量修改就是了.

上面的朋友主程序里都有一个循环是因为单片机多没有停机指令,如果不把程序执行的范围限定在合法的范围内,一旦超出范围会产生不可预知的结果,所以一般单片机的主程序都是一个死循环,然后在循环内添加各种功能及子程序调用循环往复的执行,优先级高的功能则用中断来实现.
回复

使用道具 举报

发表于 2013-1-27 12:00 | 显示全部楼层
让N++

当N==你设定的值时,就停止闪
if(n==100)   就不要闪了
回复

使用道具 举报

 楼主| 发表于 2013-1-27 12:22 | 显示全部楼层

标题

回复 21# cosine


    考拉所言极是,基础不够
这些东西太抽象了,不好理解,也没有多少精力系统的学习,现在仅接触了几个语句,边玩边学,写几句烧到单片机里看看效果,像上面吧,关键就是弄不明白该如何赋量,还有语法也经常出错所谓停止,也只是让它执行一个无意义的循环吧。
回复

使用道具 举报

发表于 2013-1-27 12:52 | 显示全部楼层
回复  cosine


    考拉所言极是,基础不够
这些东西太抽象了,不好理解,也没有多少精力系统的 ...
benli 发表于 2013-1-27 12:22 https://www.yleee.com.cn/images/common/back.gif



    其实C的书不用全看,一次全看完是很难全懂,但基本的常量变量/数据类型/表达式/控制结构还是要看的,数组也要看一下,这是单片机里用的最多的数据结构.这些不掌握编程中会出现很多不应该的错误,排除起来很费时间的.后面的结构体指针啥的可以先不看.
回复

使用道具 举报

发表于 2013-1-27 18:10 | 显示全部楼层
这个用一个循环,如用i++就用一个除2的求余运算条件判断,否则用一个变量从0到1判断交替赋值。
回复

使用道具 举报

发表于 2013-1-27 18:29 | 显示全部楼层
while 和do-while 的区别,大概是前者是先判断再执行,后者是先执行再判断。好像是这样,不大记得了。如果这样就好理解了,如果必须先执行一次的,就用do while。

宏定义,一是为了方便修改,二是为程序可读性,三是简化程序编写。

数据类型也是很重要的,不同的数据类型有不同的值范围。超过这个范围就叫溢出,要出错的。据说用合适的数据类型可以节省内存。
回复

使用道具 举报

 楼主| 发表于 2013-1-27 20:14 | 显示全部楼层
while(1)
        {
                P3=!P3;
                delay(1000);
        }
为什么不能控制所有P3口的LED闪烁
回复

使用道具 举报

发表于 2013-1-27 20:19 | 显示全部楼层
while(1)
        {
                P3=!P3;
                delay(1000);
        }
为什么不能控制所有P3口的LED闪烁
benli 发表于 2013-1-27 20:14 https://www.yleee.com.cn/images/common/back.gif



    印象中不行.  !  应该是作位操作的,好象没写程序了,呵呵,忘差不了,要翻书才行.保险点是另找一个等字长的变量赋全1值,然后和P3作异或逻辑运算.
回复

使用道具 举报

发表于 2013-1-27 20:21 | 显示全部楼层
while(1)
        {
                P3=!P3;
                delay(1000);
        }
为什么不能控制所有P3口的LED闪烁
benli 发表于 2013-1-27 20:14 https://www.yleee.com.cn/images/common/back.gif



    这段程序我的理解是对P3求反,P3在这里应该被当作一个非0值,也就是逻辑1值,求反后就是0.然后把0又赋回给P3.再取反又是1.应该是最低位的LED闪.不知道你的程序实际运行结果是啥?
回复

使用道具 举报

 楼主| 发表于 2013-1-27 20:29 | 显示全部楼层
这段程序我的理解是对P3求反,P3在这里应该被当作一个非0值,也就是逻辑1值,求反后就是0.然后把0又 ...
cosine 发表于 2013-1-27 20:21 https://www.yleee.com.cn/images/common/back.gif



    Keil里调试的结果正如考拉分析的那样,P3.0口电平高低变换,P3.1-3.7口都是低电平,不能操作全部P3口
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-8-18 23:14 , Processed in 0.032996 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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