模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

[单片机课堂] 第五课:进军!神奇的程序世界

  [复制链接]
发表于 2016-9-7 12:51:39 | 显示全部楼层
我爱萝丽爱萝丽 发表于 2016-9-7 11:29 第五课:进军!神奇的程序世界  作者:hmilycheng 7919
多个版本指什么

比如:
1、洞洞板,控与接收机所有散件,模友自己安装焊接刷程序
2、Pcb板,控与接收机所有散件,模友自己安装焊接刷程序
3、焊接好控与接收机,已刷好程序
6、焊接好控,带外壳,焊接好接收机,已刷好程序

还可以8通,或者12通可以组合

个人不成熟想法,供参考
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-7 15:17:12 | 显示全部楼层
我用三代遥控器玩飞机,时刻注意低头看回传的动力电池电压,有时回头在找飞机都看不见了!希望萝丽老大赶紧更新回传低压报警!
回复 支持 0 反对 1

使用道具 举报

发表于 2016-9-7 15:29:07 | 显示全部楼层
支持楼主的好想法,向初学者传播知识。更容易接受。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-7 15:31:10 | 显示全部楼层
支持萝丽,出精品,
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-7 20:24:40 | 显示全部楼层
我爱萝丽爱萝丽 发表于 2016-9-7 11:37
简易控是单向的,没有回传

可否在接收机上直接加蜂鸣器实现动力电池低压报警和寻机报警?
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-7 22:32:46 | 显示全部楼层
pj21602 发表于 2016-9-7 15:17
我用三代遥控器玩飞机,时刻注意低头看回传的动力电池电压,有时回头在找飞机都看不见了!希望萝丽老大赶紧 ...

买个BB响搞定
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-8 08:34:42 | 显示全部楼层
期待无刷电调 是不是要推迟了??
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-8 08:55:33 | 显示全部楼层
这个可以有,学的越多,做出来的东西越炫酷
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-8 10:24:47 | 显示全部楼层
支持,更适合大家从0学起!
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-8 13:04:12 | 显示全部楼层
感谢于萝丽的奉献
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-8 14:10:58 | 显示全部楼层
支持老大,我的四轴正想装一下B。
回复 支持 0 反对 1

使用道具 举报

发表于 2016-9-8 14:52:59 | 显示全部楼层
飞一样的感觉 发表于 2016-9-7 22:32 第五课:进军!神奇的程序世界  作者:郝峰 8330
买个BB响搞定

bb响是可以 不过有些室内小飞机 小四轴bb响就不合适了
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-9 10:54:04 | 显示全部楼层
装逼利器好
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-9 22:52:50 | 显示全部楼层
学习学习
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-12 11:39:40 | 显示全部楼层
课程怎么改都可以,只要跟楼主学习
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-9-13 02:46:16 | 显示全部楼层
1.1 循环控制


在上一课中我们使用STC软件自动生成了一个延时1秒的函数,如果以后需要延时2秒、延时半秒呢,要是每次都生成一个这个的函数,那将不可想象。
幸好有一个巧妙的办法:函数调用。
如果我们有一个延时1ms的函数,执行1000次不就是1秒了么,执行500次不就是半秒?多么机智的想法。



调用一个函数两次,我们可以写两行,调用三次,可以写三行,那调用1000次呢……
幸好有“while”。在我们的主函数中,所有的程序都在一个无限循环的while(1)里,其实它循环的次数是可以控制的。



知识点(15) while(?)循环
while(?){} 当?的值是“真”的,括号里的程序会一直执行;当?的值是“假”的,括号里的程序程序不再执行。
什么是真?大于0的数都是真的,1是真,1000也是真。什么是假?0就是假。
如果我们想要循环1000次,可以while(1000),循环一次,变成while(999)……到最后,变成while(0),自然循环就停止了。


知识点(16) unsigned int n; 变量定义
想要一个数从1000减到0,就先要定义这个数。
unsigned int   定义变量的关键字,意思是定义一个数,范围是0到65535。
unsigned int n;定义了n这个数。n只是一个名字,你也可以写成abc等都可以。


知识点(17) 1000次循环的程序实例
n=1000;
while(n)
{
    //被循环的程序
    n=n-1;//每循环一次n减小1
}


把前面所讲的组合起来,自己写一个函数吧!


知识点(18) 定义延时n毫秒函数实例
void delay_n_ms(unsigned int n)//括号里面有值代表有参数的函数,在调用这个函数时,可以顺便写n的大小。
{
    while(n)           //注意什么地方有分号,什么地方没分号
    {
        Delay1ms();
        n=n-1;//每循环一次n减小1
    }   
}


知识点(19) 调用带参数的函数
delay_n_ms(1000);    //在调用时,1000这个值就传递给了n


有了能随意控制延时时间的函数,就能让彩灯变化更加灵活,写一个每种色彩亮0.1秒,白色亮1秒的程序吧!
是不是绚丽多了?你还能想到别的变化组合吗?

  1. #include<reg51.h>


  2. sbit LED_R=P3^4;//定义红灯
  3. sbit LED_G=P3^3;//定义绿灯
  4. sbit LED_B=P3^2;//定义蓝灯


  5. void Delay1ms()                //@12.000MHz
  6. {
  7.         unsigned char i, j;

  8.         i = 12;
  9.         j = 169;
  10.         do
  11.         {
  12.                 while (--j);
  13.         } while (--i);
  14. }

  15. void delay_n_ms(unsigned int n) //自己定义的延时n毫秒函数
  16. {
  17.         while(n)         
  18.         {
  19.                 Delay1ms();
  20.                 n=n-1;//每循环一次n减小1
  21.         }   
  22. }


  23. main()
  24. {
  25.         
  26.         while(1)
  27.         {
  28.                 LED_R=1;
  29.                 LED_G=0;
  30.                 LED_B=0;
  31.                 delay_n_ms(100);//红色亮0.1秒
  32.                                                                         
  33.                 LED_R=1;
  34.                 LED_G=1;
  35.                 LED_B=0;
  36.                 delay_n_ms(100);//黄色亮0.1秒
  37.                
  38.                 LED_R=0;
  39.                 LED_G=1;
  40.                 LED_B=0;
  41.                 delay_n_ms(100);//绿色亮0.1秒
  42.                
  43.                 LED_R=0;
  44.                 LED_G=1;
  45.                 LED_B=1;
  46.                 delay_n_ms(100);//青色亮0.1秒
  47.                
  48.                 LED_R=0;
  49.                 LED_G=0;
  50.                 LED_B=1;
  51.                 delay_n_ms(100);//蓝色亮0.1秒
  52.                
  53.                 LED_R=1;
  54.                 LED_G=0;
  55.                 LED_B=1;
  56.                 delay_n_ms(100);//紫色亮0.1秒
  57.                
  58.                 LED_R=1;
  59.                 LED_G=1;
  60.                 LED_B=1;
  61.                 delay_n_ms(1000);//白色亮1.0秒
  62.         }
  63.         
  64. }
复制代码


回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-13 12:33:30 来自手机 | 显示全部楼层
我爱萝丽爱萝丽 发表于 2016-9-13 02:46
1.1 循环控制



谢谢老大解惑  将一个函数封装到另外一个函数再到主函数直接调用很巧妙  扩宽了思路也让程序更清晰  更好理解   另外有个小提议现在第一个小项目能不能进一步完善做成人机交互式
加个按键  控制灯的亮亮灭  这样可以扩展成小台灯什么的  按一下关  再按一下开  等等多种用途

点评

是的以后会学习按键程序  详情 回复 发表于 2016-9-13 19:02
回复 支持 0 反对 1

使用道具 举报

发表于 2016-9-13 13:29:30 | 显示全部楼层
楼主写的很简洁明了,结构很清晰,这样写法很容易明白,写出的C易懂
回复 支持 0 反对 1

使用道具 举报

发表于 2016-9-13 16:02:35 | 显示全部楼层
本帖最后由 lxd1990 于 2016-9-13 18:09 编辑

看了大哥的这一帖, 长了点知识
回复 支持 0 反对 1

使用道具 举报

发表于 2016-9-13 17:12:52 来自手机 | 显示全部楼层
我爱萝丽爱萝丽 发表于 2016-9-13 02:46
1.1 循环控制



按  程序搭了电路    然后做了实验  很好玩
我用STC15W204S加个3色的RGB灯珠
   刚开始 延时0.1感觉太快了延时改0,3加个柔光片看起来比较舒服
坐等更新
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

QQ|关于模吧|APP下载|广告报价|小黑屋|手机版|企业会员|商城入驻|联系我们|模吧 ( 冀公网安备13080502000084号 )

© 2013-2020 Moz8.com 模吧,玩出精彩!