模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

39588查看 | 110回复

[单片机课堂] 第四课:听话的单片机

  [复制链接]
发表于 2016-9-3 14:05:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
把单片机想象成一个八只爪的小傀儡,每次下载程序就是给它赋予新的灵魂,听话的执行你的命令,这样是不是感觉有意思多了?

再高傲的单片机也要听从程序猿的命令,从现在开始驯服你的小傀儡吧!


第四课的主要内容是学习如何控制单片机的引脚输出。


(注意:准备学习单片机却毫无基础的童鞋,请拿出一个小本本,把每个知识点全部记下来。以后知识点会有很多,只看一遍就关掉网页,没有认真理解到后面是学不会的!)
(如果有对楼主所讲的还有疑问和意见的,也请指出)

评分

参与人数 5 +1 牛币 +8 收起 理由
mimiCP + 1 很给力!
momololo + 5 赞一个!
那谁谁 + 1 支持~
tianlun8 + 1 很给力!
useisbb + 1 给你课堂加点人气

查看全部评分

 楼主| 发表于 2016-9-4 12:32:25 | 显示全部楼层
本帖最后由 我爱萝丽爱萝丽 于 2016-10-12 10:43 编辑

1.1 引脚定义和输出

我们要想让单片机听话的为我们做事,首先要明白单片机能做什么。
很多人可能会想当然:让单片机输出不同的电压,来控制电机转的快慢。事实上单片机能直接做的事只有两件:输出高电平和低电平。


知识点(10) 高电平 低电平
在单片机术语中,只有真和假、1和0的概念,对应于引脚的输出,也只有高电平和低电平两种。
如果我们在程序中是1,单片机实际的输出就是高电平,接近单片机的电源电压5V;
如果我们在程序中是0,单片机实际的输出就是低电平,大概0V;


那可不可以用单片机输出的5V来直接驱动电机、灯泡呢?


知识点(11) 引脚驱动能力
单片机输出低电平时,能流入的电流大概20ma。
单片机在输出高电平时,输出电流就很小了,不到1ma。(也有别的模式,这个以后会讲)
(单片机在通电后,引脚的默认输出都是高电平)


也就是说,单片机直接驱动的话,20ma点亮个发光二极管还行,想驱动上百ma电流的大功率灯珠,就要加放大器了。


知识点(12) 单片机控制三极管
如果你高中的物理知识还没有全部还给体育老师,那么你应该知道,三极管可以放大电流。
看下面这个电路图,如果单片机输出低电平0V,没有电流流过,自然也不能放大,LED不发光,我们可以定义一下:低电平关闭三极管。
如果单片机输出高电平5V,经过电阻以后,会有一个很小的电流流过,三极管放大电流,LED发光,同样可以定义:高电平打开三极管。
简单的估算:假设经过电阻的电流是1ma,三极管放大150倍,大概就是150ma电流。也就是说通过调节电阻的大小,可以控制灯珠的最大亮度。

第四课:听话的单片机 主要内容,现在开始,程序猿,单片机,有意思 作者:我爱萝丽爱萝丽 2398



知识点(13) 引脚定义    sbit LED1=P3^2;
引脚定义格式:sbit 名称=引脚标号;
想要控制一个引脚,必然要先定义一个引脚,这句话的意思就是将单片机P3.2引脚取了一个别名LED1,以后你只要在程序中写上LED1,代表的就是这个引脚。


知识点(14) 引脚控制    LED1=0;
如此只要在程序中写上LED1等于0、等于1,就能随心控制引脚输出的电压啦,快来试试吧。


  1. #include<reg51.h>

  2. sbit LED1=P3^2;//先定义,才能使用


  3. void Delay1000ms()                //@12.000MHz
  4. {
  5.         unsigned char i, j, k;

  6.         //_nop_();
  7.         //_nop_(); 这两个用不到,直接删掉
  8.         i = 46;
  9.         j = 153;
  10.         k = 245;
  11.         do
  12.         {
  13.                 do
  14.                 {
  15.                         while (--k);
  16.                 } while (--j);
  17.         } while (--i);
  18. }

  19. //此为分界线,函数的具体内容写在上面;
  20. //下面是具体的程序,写函数名字就可以调用了。

  21. main()
  22. {
  23.         
  24.         while(1)
  25.         {
  26.                 LED1=0;//低电平灭
  27.                 Delay1000ms();//每一行程序结尾要加分号
  28.                 LED1=1;//高电平亮
  29.                 Delay1000ms();//这个程序作用就是1秒亮1秒灭
  30.         }
  31.         
  32. }
复制代码




回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-9-13 01:09:09 | 显示全部楼层
本帖最后由 我爱萝丽爱萝丽 于 2016-9-13 01:11 编辑

1.2 闪出七种色彩!

在学会了怎么控制LED的亮灭后,你有什么想法呢?是不是已经按捺不住想要写点更复杂的程序了?

我们先把每个LED的控制引脚都定义好:
sbit LED_R=P3^4;//定义红灯
sbit LED_G=P3^3;//定义绿灯
sbit LED_B=P3^2;//定义蓝灯


然后按照三原色的混合原理,控制每一种色彩吧:




  1. #include<reg51.h>


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


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

  8.         //_nop_();删去此处
  9.         //_nop_();
  10.         i = 46;
  11.         j = 153;
  12.         k = 245;
  13.         do
  14.         {
  15.                 do
  16.                 {
  17.                         while (--k);
  18.                 } while (--j);
  19.         } while (--i);
  20. }


  21. main()
  22. {
  23.         
  24.         while(1)
  25.         {
  26.                 LED_R=1;
  27.                 LED_G=0;
  28.                 LED_B=0;
  29.                 Delay1000ms();//红色亮1秒
  30.                 //空一行为了让程序更清晰
  31.                 LED_R=1;
  32.                 LED_G=1;
  33.                 LED_B=0;
  34.                 Delay1000ms();//黄色亮1秒
  35.                
  36.                 LED_R=0;
  37.                 LED_G=1;
  38.                 LED_B=0;
  39.                 Delay1000ms();//绿色亮1秒
  40.                
  41.                 LED_R=0;
  42.                 LED_G=1;
  43.                 LED_B=1;
  44.                 Delay1000ms();//青色亮1秒
  45.                
  46.                 LED_R=0;
  47.                 LED_G=0;
  48.                 LED_B=1;
  49.                 Delay1000ms();//蓝色亮1秒
  50.                
  51.                 LED_R=1;
  52.                 LED_G=0;
  53.                 LED_B=1;
  54.                 Delay1000ms();//紫色亮1秒
  55.                
  56.                 LED_R=1;
  57.                 LED_G=1;
  58.                 LED_B=1;
  59.                 Delay1000ms();//白色亮1秒
  60.         }
  61.         
  62. }
复制代码


回复 支持 1 反对 1

使用道具 举报

发表于 2022-4-7 13:24:00 | 显示全部楼层
这节课完事了!
回复 支持 1 反对 0

使用道具 举报

发表于 2021-11-19 07:37:27 来自手机 | 显示全部楼层
棒           
回复 支持 0 反对 1

使用道具 举报

发表于 2021-6-18 22:32:45 | 显示全部楼层
楼主说可以直接点亮发光二极管,我在引脚直接接发发光二极管的正极,发光二极管的负极接电源负极,测试程序的时候0是亮光,1是灭的,刚好和教的相反的?
回复 支持 0 反对 1

使用道具 举报

发表于 2021-5-20 16:32:24 | 显示全部楼层
就是焊接技术太LOW了,你们谁能提高焊接技术的方法?
回复 支持 0 反对 1

使用道具 举报

发表于 2021-5-20 16:31:22 | 显示全部楼层
今天这课的任务完成了
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-29 22:41:37 | 显示全部楼层
谢谢萝莉大神分享,用心学习.
回复 支持 1 反对 0

使用道具 举报

发表于 2021-4-19 18:23:29 来自手机 | 显示全部楼层
感谢精心的编辑
回复 支持 1 反对 0

使用道具 举报

发表于 2020-12-18 10:12:18 | 显示全部楼层

学习学习,
已经记下来了
回复 支持 0 反对 1

使用道具 举报

发表于 2020-8-9 14:29:47 | 显示全部楼层
#include<reg51.h>


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

我引脚定义部分就报错了,复制代码也是报错。咋回事啊。。编织器版本的问题吗?第一课的编译器链接打不开,自己网站上搜了下载的。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-3 14:27:27 | 显示全部楼层
坐等更新  第四课:听话的单片机 主要内容,现在开始,程序猿,单片机,有意思 作者:突突 6973
发表于 2016-9-3 15:04:58 | 显示全部楼层
鼓励,加油
发表于 2016-9-3 15:18:03 | 显示全部楼层
顶顶顶……
发表于 2016-9-3 15:26:08 | 显示全部楼层
顶顶顶…坐等更新
发表于 2016-9-3 15:49:22 来自手机 | 显示全部楼层
好的
发表于 2016-9-3 16:28:00 | 显示全部楼层
学习学习
发表于 2016-9-3 18:05:59 来自手机 | 显示全部楼层
感谢分享感谢分享
发表于 2016-9-3 18:25:15 来自手机 | 显示全部楼层
群主辛苦了,坐等更新。
回复 支持 1 反对 0

使用道具 举报

发表于 2016-9-3 19:31:20 | 显示全部楼层
路过。                       
发表于 2016-9-3 20:01:38 | 显示全部楼层
坐等更新。。。。。。。。。。。。
发表于 2016-9-3 20:38:30 | 显示全部楼层
路过顶起
发表于 2016-9-3 22:46:27 | 显示全部楼层
由浅入深,楼主大智慧
发表于 2016-9-3 22:47:48 | 显示全部楼层
感谢分享,希望能学会,。。。。
发表于 2016-9-3 23:13:19 | 显示全部楼层
顶顶顶…坐等更新
发表于 2016-9-3 23:21:03 | 显示全部楼层
我都不用本子了,直接复制粘贴到word里,然后整理下,打印出来,慢慢就可以成一本书了!哈哈!
发表于 2016-9-3 23:28:19 | 显示全部楼层
TLT 发表于 2016-9-3 23:21 第四课:听话的单片机 主要内容,现在开始,程序猿,单片机,有意思 作者:164281221 2821
我都不用本子了,直接复制粘贴到word里,然后整理下,打印出来,慢慢就可以成一本书了!哈哈!
...

机智     
发表于 2016-9-3 23:59:11 | 显示全部楼层
辛苦了萝丽大神 努力啊 争取让坛子里更多人的长知识
发表于 2016-9-4 06:38:41 | 显示全部楼层
已经记下来了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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