单片机
2013-06-09 22:18:00 a379039233 阅读数 4847
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2487 人正在学习 去看看 朱有鹏

      单片机就是一个小的计算机,不过他没有计算机那么好,方便的输入输出设备,计算机的输入设备就是鼠标,键盘等,方便的很,输出设备就是显示器,将输出非常清晰的显示在屏幕上。但是单片机的输入输出都是他的引脚,需要通过编程控制。

       单片机和PC机相同的地方就是都有CPU(我把单片机的微控制器核也叫CPU),内存(单片机的ROM,RAM,FLASH等),时钟系统,中断系统,定时器等等。

      一, 单片机最小系统就是单片机能够运行起来的必要条件:

   1.电源 2.晶振 3.复位电路  没有电源就没有能源,就不能工作;没有晶振,就没有时钟电路,就没有节拍,指令就不能按一定的步调运行;没有复位电路,单片机就很不可靠,会出现“死机”、“程序走飞(PC)”等现象。
   
   二,一些重要概念
    1. 我们对单片机编程不过就是设置单片机内部的寄存器和端口引脚以便输出高低电平控制其他(连接在单片机上)器件而已。
    2. 编程中最重要的是1:配置时钟,2:配置IO口,3:配置复位方式,看门狗设置等等
       次要的是:中断(外部,定时器,串口),串口,ADC,XRAM读写,内部FLASH等。   
    3. 1个机器周期 =12个时钟周期(晶振的振荡周期)   
    4. while(1);让单片机一直工作,等待中断!防止程序跑飞等。
    5. 51单片机共111条汇编指令,
7种寻址方式:
1.立即寻址 MOV A,#01H
2.直接寻址 MOV A,20H
3.寄存器寻址 MOV A,R3(A,B,Cy,DPTR)

4.寄存器间接寻址 MOVA,@R0  R1
5.变址寻址 MOVC  A, @A+DPTR
6.相对寻址 SJMP   rel; (PC)←(PC) + 2(指令长度) +  rel
7.位寻址 位寻址是直接寻址方式的一种,其特点是对8位二进制数中的某一位的地址进行操作。
MOV 00h,C,MOV  20H.0, C  ,PSW.6
 
     6. XRAM(分内外)读写 
      1> XBYTE[address]=data   写数据
         data=XBYTE[address]   读数据;
   2>char xdata *mydat;
      ......
      mydat=(char xdata*)0x0030;
      *mydat=31;
   3>汇编方式
	mov dptr,#1000h
	mov a,#55h
	movx @dptr,a
      7.  读端口信号是必须先向端口写“1”,然后再读,这就是单片机口信号的准双向的含义。切记!
      8.  模拟输入或数字I/O,推挽(强)或漏极开路输出(IO,inout)

 
9. 一些寄存器默认设置即可,配置了可能会有警告。usb clock.clksel=1  10. Keil C 里面Lib库文件的生成与调用,可以自己做lib。
11. ram高128位只能间接寻址。idata,一些人可能没有用到idata,发现data不够用。
12 1s=1000ms=1000000us=1000000000ns.
13.
x M晶振定时 y ms: TH1 = (65536 - (x/12)*y*1000) / 256;     TL1 = (65536 - (x/12)*y*1000) % 256;16位的哦,亲!
假设C8051F020单片机的晶振是22114800Hz,测每秒计22114800个数 经过12分频后,每秒计22114800÷12=1842900个数,如果设置计数器初值是 0xfe90(即十进制65165),则需要计的数的个数为65535-65165=360,那么定时器的 时间为(360÷1842900)(S)≈0.195ms,即0.2ms。
#define uchar unsigned char
#define uint  unsigned int
#define ulong unsigned long #define bool  bit
 
#include<C8051F330.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long //引脚定义
sbit In1= P0^3; sbit In2= P0^7; sbit In3= P1^3; sbit In4= P1^7; sbit Out1= P0^3; sbit Out2= P0^7; sbit Out3= P1^3; sbit Out4= P1^7;
//----------------------------------------------------------------------------- //功能:延时 //入口参数:yc //出口参数:无 //-----------------------------------------------------------------------------
void delay(uint time)
{
  while(--time);
}
//----------------------------------------------------------------------------- //功能:单片机C8051F330初始化 //入口参数:无 //出口参数:无 //-----------------------------------------------------------------------------
void Mcu_Init(void) { 
  PCA0MD&=~0x40;                 //禁止内部看门狗  
  OSCICN = 0x83;                 //内部振荡控制寄存器,使能H-F,八分频  
OSCICL = 0x00;                 //期望输出频率也是24.5MHz
  CLKSEL = 0x00;                  //系统时钟取自内部高频振荡器  
RSTSRC = 0x04;                 //检测到时钟丢失时允许系统复位
}
 
 
//----------------------------------------------------------------------------- //功能:MCU I/O口配置 //入口参数:无 //出口参数:无 //-----------------------------------------------------------------------------
 
void PORT_Init (void) {    
P0MDOUT  = 0x88;                         //P0.3,P0.7推挽输出   
P1MDOUT  = 0x88;                  //P1.3,P1.7推挽输出   
XBR0     = 0x00;  
  XBR1     = 0x40;                  //使能交叉开关和弱上拉 }
//----------------------------------------------------------------------------- // 功能:所有设备初始化 //----------------------------------------------------------------------------- // 入口参数:无 // 出口参数:无 //-----------------------------------------------------------------------------
 
void Init_Device (void) {   
Mcu_Init();   
PORT_Init();
} void main() {
     Init_Device();     
delay(10);          
     while(1){            }
 
}
2017-07-17 13:17:37 ReCclay 阅读数 2023
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2487 人正在学习 去看看 朱有鹏

①RST复位电路

单片机复位电路

51单片机是高电平复位,低电平正常工作
上电瞬间以及按下按键(电容相当于导线),RST为高电平。
按键按下的瞬间会产生大电流冲击,会局部产生较大的电磁干扰。为了减小这种干扰,加一个一个限流电阻。

②有关RAM和FLASH

STC89C52RC系列单片机有512B的RAM以及8K的Flash(程序存储空间)

RAM就是平时存储变量的,比如你定义了一个什么bit、uint8、 uint16 、uint32等等这些都是在RAM中定义的。
512B的RAM虽然名字一样,但是在物理结构以及用法是有区别的。
沿袭老8051单片机的叫法,依旧叫为片内RAM和片外RAM。所谓的片内和片外是指芯片内部和芯片外部,但是现在的单片机的芯片拓展基本上都在内部,不存在什么片外拓展RAM。但是我们仍依旧这么叫,知道这回事就行了。

片内RAM分为 data、idata一般我们直接定义的变量都是直接在data里面的,data是直接寻址的,是速度最快的。而其他都是通过寄存器间接寻址的,其速度当然不可同日而语。
其中data的范围是从片内的0x00~0x7F共128字节
而idata范围是从片内的0x80~0xFF也是128B但是它同时不用来存储变量,当然也不希望程序能访问到这里,它主要的用途就是用来中断与函数的调用。

片外RAM分为pdata、xdata如上所述,均是通过寄存器来间接寻址的。
pdata的寻址范围是片外的0x00~0xFF共256B。寻址速度相对来讲比xdata快
xdata的寻址范围是片尾的0x0000~0xFFFF共64K。寻址范围最广,如要使用还得专门配置两个字节寄存器DPTRH和DPTRL,寻址范围的广,也就意味着速度是最慢的。

所以呢,总结一下就是:一般变量存储在data区域,当data不够了,在去寻xdata区域,idata不要触碰。pdata不到万不得已也不要!!!

看似高字节拓展的128RAM是和寄存器的地址相重叠,但是物理上并不重叠
这里写图片描述

③三极管

用途主要有:驱动和控制两个
三极管的特性:截止、饱和、放大。
(在数电中主要用到的是三极管的开关作用,用到的是截止和饱和特性(有一个β因数)。而在模电当中用到的是则是它的放大特性)

三极管的控制作用
三极管实现电压转换(5V控制12V)
三极管的驱动作用

④按字节编码寻址以及按字编码寻址

按字节编码寻址,1M = 2^20B 而 1B=8bit所以2^20B/1B = 2^20
可寻地址为1~2^20-1
需要二十根总线

按字编码寻址,1字的4B,其他同上,那么2^20/1字=2^20/4B=2^18
可寻地址为1~2^18-1
需要十八跟总线

对了,除此之外还要注意一个东西,就是MB和M的区别
MB是一个容量单位,兆字节
而M是一个数量单位,兆

LED压降为2V,工作电流1~20mA**一般在1~5,mA之内的变化可以直接体现在灯的亮程度,超过5mA就没那么明显了所以选取的串联电阻可以选**150欧~3K

⑤三八译码器快速记住对应的,其实左边三个可以看成二进制是几,对应的右边哪一位就是0

比如左边A2 A1 A0为0 0 0那么右边Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 对应的值就是 0 1 1 1 1 1 1 1

⑥关于IO口
IO口有四种状态,准双向,开漏,强推挽,高阻

应用最多的得数准双向和开漏了,两者的主要区别就是开漏内部是没有上上拉电阻的。51单片机的P0默认就是开漏,而其他口均是准双向IO对于P0在自己DIY小电路的时候切记不要忘了加外部加上拉电阻!
对于准双向IO要特别注意:51单片机的一个重要知识准双向IO口,如果要正确读取外部信号的状态,首先必须保证自己是高电平

⑦上拉电阻和下拉电阻

上拉电阻的主要应用场合有:
OC门即是开漏输出
需要增大电流输出时,加一个上拉相当于并联一个电阻。
也能起到限流作用,如5V转12V系统
抵抗EMI(电磁干扰)

sbit
sbit用于定义单字节可位寻址对象的某位,“单字节可位寻址”包括可位寻址特殊功能寄存器和RAM中可位寻址区的16个字节。

bata 关键字可将变量定位到内部的RAM的可位寻址。
eg:

char bdata bittest;
sbit RIbit = bittest^0;
sbit TIbit = bittest^1;
sbit P1_0 = P1^0;

⑧ 有关IO口拉成高电平的总结

通常我们会遇到在普通的准双向IO口下,出现IO口拉不到高电平的情况。这个时候怎么办呢?
尝试所有的IO口状态,有的比较特殊,比如IO口外接上上拉电阻,必须开漏才能拉成高电平。
单片机是否速度过快,可以适当延时。。

⑨关于继电器

模块接口:
1、DC+:接电源正极(电压按继电器要求,有5V.9V.12V和24V选择)
2、DC-:接电源负极
3、IN:可以高或低电平控制继电器吸合
继电器输出端:
1、NO: 继电器常开接口,继电器吸合前悬空,吸合后与COM短接
2、COM:继电器公用接口
3、NC: 继电器常闭接口,继电器吸合前与COM短接,吸合后悬空

高低电平触发*选择端:*

1.跳线与LOW短接时为低电平触发;

2.跳线与high短接时为高电平触发。

这里写图片描述

⑩、关于DS18B20的引脚

简而言之,就是。平面面向自己以后,三个脚分别是GND、VOUT和VCC

上张图明白一切
这里写图片描述

11、DHT11

DHT11 是一款含有已校准单总线数字信号输出的温湿度复合传感器,它包括一个电阻式感湿
元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。DHT11 是属于民用型器件,测量
值仅精确到个位,即小数点后无数据,如果要使用于工业产品或更精确的应用,建议使用 DHT21
或 SHT10。

这里写图片描述

注意的是那个NA或者NC引脚,表示是空引脚。

2017-08-14 07:51:10 u011732358 阅读数 663
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2487 人正在学习 去看看 朱有鹏

四年前写的程序了,纪念一下曾经玩过的单片机

 #include "IAP15F2K61S2.h"
#include "delay.h"
sbit seg1 = P2^7;
sbit seg2 = P2^6;
sbit seg3 = P2^5;
sbit seg4 = P2^4;
sbit seg5 = P2^3;
sbit seg6 = P2^2;
sbit seg7 = P2^1;
sbit seg8 = P2^0;
unsigned int  n      = 0; //定时器计数
unsigned char hour   = 0;
unsigned char minute = 0;
unsigned char second = 0;
unsigned char code Num[12] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char   Display[8] = {11,11,10,11,11,10,11,11};
void Init_timer()
{
 TMOD = 0x02;        //方式二
 TH0  = 0x06;          //赋初值(255-6=250)
 TL0  = 0x06;
 EA   = 1;                //打开总中断
 ET0  = 1;               //打开定时器0中断
 TR0  = 1;              //启动定时器0
}
void SEG_Display()
{
 seg1 = 0;
 P0 = Num[Display[0]];
 Delay1ms();
 seg1 = 1;
 P0=0xff;

 seg2 = 0;
 P0 = Num[Display[1]];
 Delay1ms();
 seg2 = 1;
 P0=0xff;

 seg3 = 0;
 P0 = Num[Display[2]];
 Delay1ms();
 seg3 = 1;
 P0=0xff;

 seg4 = 0;
 P0 = Num[Display[3]];
 Delay1ms();
 seg4 = 1;
 P0=0xff;

 seg5 = 0;
 P0 = Num[Display[4]];
 Delay1ms();
 seg5 = 1;
 P0=0xff;

 seg6 = 0;
 P0 = Num[Display[5]];
 Delay1ms();
 seg6 = 1;
 P0=0xff;

 seg7 = 0;
 P0 = Num[Display[6]];
 Delay1ms();
 seg7 = 1;
 P0=0xff;

 seg8 = 0;
 P0 = Num[Display[7]];
 Delay1ms();
 seg8 = 1;
 P0=0xff; 
}
void Clock_Run()
{
 Display[0] = hour   / 10; 
 Display[1] = hour   % 10;
 Display[3] = minute / 10; 
 Display[4] = minute % 10;
 Display[6] = second / 10; 
 Display[7] = second % 10; 
}
int main()
{
 Init_timer(); 
 while(1)
 {
  if(n>4000) 
  {
   n = 0;
   second++;
   if(second == 60)
   {
    second = 0; 
    minute++;
    if(minute ==60)
    {
     minute = 0;
     hour++;
     if(hour == 24)
     {
      hour = 0;
     }
    }
   }
  }
  Clock_Run();
  SEG_Display();
 }
 return 0;
}
void Tomer0() interrupt 1
{
 n++;
}
2019-03-19 11:29:09 qq_35131793 阅读数 547
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2487 人正在学习 去看看 朱有鹏

在这里插入图片描述
王云的51单片机教程全套资料,大家可以随便下载了。链接:http://www.yunlongdz.cn/1/110.htm 想学好单片机其实并不困难,单片机是一门实践性非常强的的学科,学习时要理论与实践并重量,现在网上学习单片机的资料比较多,你可到有关单片机的论坛上找找,再次就是有准备必要的学习单片机的一些基本的装备,电脑你肯定有,哪就准备一些实践用的工具器件,如:单片机、相关的电子元件,有备件时购一台单片机学习板,这样的学习板附带的例程非常多,你可以边看例程边实践,这样的学习方法入门比较快,等有了一定的基础后,可以自己动手焊的些简单的板子,检验一下自己的学习效果。学习过程中要学习一定的专业知识,比如数电和模电。单片机语言就学语言C,也可用汇编,根据自己情况而定;不管您要学什么型号的单片机51也好,AVR也好,可以先找一个小的项目例子,比如流水灯一类的做,以提高兴趣。总之学习单片机要持之以恒,不断实践,新手学习时注意以下几点:

1、学习理论知识,书的话新手建议看看__王云51单片机教程,结合书带的视频一起看好理解;
2、最好有一个开发板,在开发板上从最简单的功能开始实现,比如做一个流水灯、蜂鸣器音乐盒等;
3、实现简单的功能后,开始尝试更复杂的程序,例如LCD显示、数字时钟、串口通信、中断控制等;
4、在上述功能均可以实现之后,可以组合实现,做一个多功能的单片机系统了;
5、如果对硬件熟悉,可以自己尝试做一个单片机开发板!

2016-12-24 21:20:37 ZhangRelay 阅读数 4163
  • 单片机有很多种-1.3.第1季第3部分

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第3个课程,主要讲了单片机的发展史,各种主流单片机的各自特点,STC51单片机的各系列的特点以及项目中如何选型主控单片机。

    2487 人正在学习 去看看 朱有鹏

如何快速学会单片机编程并应用?

先上一些参考资料,主要来源知乎:

1 -怎样学会单片机?-

2 -arduino、arm、树莓派、单片机四者有什么不同?-

3 -单片机可以替代PLC么?-

4 -单片机有没有必要用汇编讲?-

5 -相关课程-

单片机和C语言,是自动化(机器人)学科重要的基础内容。

如果对机器人感兴趣,可参考机器人工程师学习计划

课程学习动机~Why?为什么学习单片机编程?

单片机方向就业?把握市场需求!

软硬件能力的综合训练,电路原理图+软件编程(C语言)。


课程学习内容~What?单片机编程包括哪些内容?

目录和大纲,归纳和总结能力训练



课程学习方法~How?如何学习单片机编程?

在掌握基础知识后,仿真与实验。

Linux平台:MCU 8051 IDE

Windows平台:uVision+Proteus

扩展提升:在学完51单片机后,能够快速自学更为通用主流的嵌入式系统,如下:

C51--(Arduino、MSP430)--(2812、28335)--(STM32、ARM9)--(TK1、BeagleBone、Raspberry Pi)

那么问题来了,我们为什么不直接学习STM32等,而是要学习51呢?

入门简单、上手容易,欲知详情点击查看。

 

其他参考资料:

单片机技术理论与实践课程相关资料,课件、资料和工具软件等。

-新更新考核材料和参考报告-

编程语言

单片机泥石流负能量!

 

在美国大学计算机专业都学什么?

2016 年最受欢迎的编程语言是什么?

凭兴趣求职80%会失败,为什么?



视频短片:

STEM教育 1 2 3 | ROS | 智慧家居 | 智能驾驶

 

 

模块化,低耦合 参考软件工程学

示例1 51+arduino

  #include<reg51.h>       //寄存器定义
  #include<stdio.h>       //一般I/O口定义
  /***以下是全局变量定义*********/
  sbit LED=P1^0;      //LED灯连接在P1.0上
  int data i;         //定义一个整型全局变量
  /*********主程序开始***************/
  void  main(void)
  {  while(1)
     {  LED=0;     //LED灯点亮
        for(i=0;i<1000;i++);   //延时
        LED=1;           //LED灯熄灭
        for(i=0;i<1000;i++);   //延时
      }
  }


  #include<reg51.h>       //寄存器定义
  #include<stdio.h>       //一般I/O口定义
  /***以下是全局变量定义*********/
  sbit LED=P1^0;      //LED灯连接在P1.0上
  int data i;         //定义一个整型全局变量
  LED_demo()       //LED函数
  {     LED=0;     //LED灯点亮
        for(i=0;i<1000;i++);   //延时
        LED=1;           //LED灯熄灭
        for(i=0;i<1000;i++);   //延时  
  }
  /*********主程序开始***************/
  void  main(void)
  {  while(1)
     {  
     	 LED_demo();
      }
  }
  
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO 
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino model, check
  the Technical Specs of your board  at https://www.arduino.cc/en/Main/Products
  
  This example code is in the public domain.

  modified 8 May 2014
  by Scott Fitzgerald
  
  modified 2 Sep 2016
  by Arturo Guadalupi
  
  modified 8 Sep 2016
  by Colby Newman
*/


// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}


 

 

示例2 51+arduino

#include<reg52.h>					//预处理命令,reg52.h是一个头文件
#include<stdio.h>
void Function1(void);				//自定义函数Function1声明
unsigned int ch;//全局变量声明

void main(void)					//主函数
{


	SCON=0x50;               		//SCON:模式1,8bit异步串口通信
	TMOD=0x20;               		//TMOD:定时器1为模式2,8bit自动装载方式
	TH1=221;                 		//TH1:1200bit/s的装载值,16MHz
	TR1=1;                   		//TR1:timer1运行
	TI=1;                    		//TI:设置为1,以发送第一个字节

	while(ch<=5)
	{ 
		Function1( );//调用自定义函数
		printf("char=%d\n",ch);//程序语句
	}
	while(1);
}
void Function1(void)				//自定义函数Function1
{	
	unsigned char ps;				//自定义函数内部变量声明
	ps=1;
	ch=ch+ps;
}


#include<reg52.h>					//预处理命令,reg52.h是一个头文件
#include<stdio.h>
void Function1(void);				//自定义函数Function1声明
void Init1(void);
unsigned int ch;//全局变量声明

void main(void)					//主函数
{
	Init1();
	while(ch<=5)
	{ 
		Function1( );//调用自定义函数
		printf("char=%d\n",ch);//程序语句
	}
	while(1);
}
void Function1(void)				//自定义函数Function1
{	
	unsigned char ps;				//自定义函数内部变量声明
	ps=1;
	ch=ch+ps;
}
void Init1(void)
{


	SCON=0x50;               		//SCON:模式1,8bit异步串口通信
	TMOD=0x20;               		//TMOD:定时器1为模式2,8bit自动装载方式
	TH1=221;                 		//TH1:1200bit/s的装载值,16MHz
	TR1=1;                   		//TR1:timer1运行
	TI=1;                    		//TI:设置为1,以发送第一个字节
}


/*
  Serial Call and Response in ASCII
 Language: Wiring/Arduino

 This program sends an ASCII A (byte of value 65) on startup
 and repeats that until it gets some data in.
 Then it waits for a byte in the serial port, and
 sends three ASCII-encoded, comma-separated sensor values,
 truncated by a linefeed and carriage return,
 whenever it gets a byte in.

 Thanks to Greg Shakar and Scott Fitzgerald for the improvements

  The circuit:
 * potentiometers attached to analog inputs 0 and 1
 * pushbutton attached to digital I/O 2



 Created 26 Sept. 2005
 by Tom Igoe
 modified 24 Apr 2012
 by Tom Igoe and Scott Fitzgerald

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/SerialCallResponseASCII

 */

int firstSensor = 0;    // first analog sensor
int secondSensor = 0;   // second analog sensor
int thirdSensor = 0;    // digital sensor
int inByte = 0;         // incoming serial byte

void setup() {
  // start serial port at 9600 bps and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  pinMode(2, INPUT);   // digital sensor is on digital pin 2
  establishContact();  // send a byte to establish contact until receiver responds
}

void loop() {
  // if we get a valid byte, read analog ins:
  if (Serial.available() > 0) {
    // get incoming byte:
    inByte = Serial.read();
    // read first analog input:
    firstSensor = analogRead(A0);
    // read second analog input:
    secondSensor = analogRead(A1);
    // read  switch, map it to 0 or 255L
    thirdSensor = map(digitalRead(2), 0, 1, 0, 255);
    // send sensor values:
    Serial.print(firstSensor);
    Serial.print(",");
    Serial.print(secondSensor);
    Serial.print(",");
    Serial.println(thirdSensor);
  }
}

void establishContact() {
  while (Serial.available() <= 0) {
    Serial.println("0,0,0");   // send an initial string
    delay(300);
  }
}



其他參考資料:http://blog.csdn.net/zhangrelay/article/details/52336300


单片机学习

阅读数 21

初识单片机

阅读数 152

没有更多推荐了,返回首页