极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: eagler8

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)

[复制链接]
 楼主| 发表于 2019-9-5 16:54:37 | 显示全部楼层
该模块所用芯片为TM1638,集合了单片机常见外围电路,最大特点是只需占用单片机三个IO口即可驱动,扫描显示和按键扫描不需要单片机干预,只需要读写相关寄存器送显示数据或检测按键,节省MCU资源。试想下,我们平时使用单片机外接8个LED,8位数码管,8个按键这需占用多少个IO口,远不止3个IO口吧,但用这个模块就可以实现。经实际应用,按键灵敏显示效果良好。

接线方法:
VCC GND接5V电源, STB CLK DIO接单片机IO口。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 16:57:02 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 17:47:41 | 显示全部楼层
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百零六: TM1638按键数码管LED显示模组8位数码管\LED\按键智控模块
  4. 1、安装库:IDE-工具-管理库-搜索TM1638plus-安装
  5. 2、项目:TM1638模块的演示文件库(LED和键)
  6. 《作者:加文·莱昂斯(Gavin Lyons)》
  7. 3、接脚:
  8. VCC  → 5V
  9. GND → GND
  10. STROBE_TM  D4
  11. CLOCK_TM   D6
  12. DIO_TM     D7
  13. */

  14. #include <TM1638plus.h>

  15. // GPIO I/O pins on the Arduino connected to strobe, clock, data,
  16. //pick on any I/O you want.
  17. #define  STROBE_TM 4
  18. #define  CLOCK_TM 6
  19. #define  DIO_TM 7

  20. //Constructor object
  21. TM1638plus tm(STROBE_TM, CLOCK_TM , DIO_TM);


  22. void setup() {
  23.    // Test 0 reset test
  24.    tm.setLED(0, 1);
  25.    delay(1000);
  26.    tm.reset();
  27.   
  28.   // Test 1  Brightness and reset
  29.    for (uint8_t brightness = 0; brightness < 8; brightness++)
  30.    {
  31.           tm.brightness(brightness);
  32.           tm.displayText("00000000");
  33.           delay(1500);
  34.    }
  35.    tm.reset();
  36.    
  37.    // restore default brightness
  38.    tm.brightness(0x02);
  39.   
  40.    //Test 2 ASCII display 2.348
  41.    
  42.    tm.displayASCIIwDot(0, '2');
  43.    tm.displayASCII(1, '3');
  44.    tm.displayASCII(2, '4');
  45.    tm.displayASCII(3, '8');
  46.    delay(2000);
  47.   
  48.    //TEST 3 single segment
  49.    //In this case  segment g (middle dash) of digit position 7
  50.    tm.display7Seg(7,0b01000000);
  51.    delay(2000);
  52.    
  53.    // Test 4 Hex digits.
  54.    tm.displayHex(0, 1);
  55.    tm.displayHex(1, 2);
  56.    tm.displayHex(2, 3);
  57.    tm.displayHex(3, 4);
  58.    tm.displayHex(4, 5);
  59.    tm.displayHex(5, 6);
  60.    tm.displayHex(6, 7);
  61.    tm.displayHex(7, 8);
  62.    delay(2000);
  63.    tm.displayHex(0, 8);
  64.    tm.displayHex(1, 9);
  65.    tm.displayHex(2, 10);
  66.    tm.displayHex(3, 11);
  67.    tm.displayHex(4, 12);
  68.    tm.displayHex(5, 13);
  69.    tm.displayHex(6, 14);
  70.    tm.displayHex(7, 15);
  71.    delay(2000);

  72.    // Test 5 TEXT  with dec point
  73.    // abcdefgh with decimal point for c and d
  74.    tm.displayText("abc.d.efgh");
  75.    delay(3000);
  76.    
  77.    // Test6  TEXT + ASCII combo
  78.    // ADC=2.548
  79.    char text1[]= "ADC=.";
  80.    tm.displayText(text1);
  81.    tm.displayASCIIwDot(4, '2');
  82.    tm.displayASCII(5, '5');
  83.    tm.displayASCII(6, '4');
  84.    tm.displayASCII(7, '8');
  85.    delay(2000);
  86.   
  87.    //Test 7 buttons and LED test
  88.    tm.displayText("EAGLER8 ");
  89. }


  90. void loop() {
  91.    uint8_t buttons = tm.readButtons();
  92.    doLEDs(buttons);
  93. }

  94. // scans the individual bits of value
  95. void doLEDs(uint8_t value) {
  96.   for (uint8_t position = 0; position < 8; position++) {
  97.     tm.setLED(position, value & 1);
  98.     value = value >> 1;
  99.   }
  100. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 17:49:21 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 18:29:26 | 显示全部楼层
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百零六: TM1638按键数码管LED显示模组8位数码管\LED\按键智控模块
  4. 1、安装库:IDE-工具-管理库-搜索TM1638-安装
  5. 2、项目:自锁LED,按键计数器
  6. 3、接脚:
  7. VCC  → 5V
  8. GND → GND
  9. STROBE_TM  D4
  10. CLOCK_TM   D6
  11. DIO_TM     D7
  12. */

  13. #define        DATA_COMMAND        0X40
  14. #define        DISP_COMMAND        0x80
  15. #define        ADDR_COMMAND        0XC0

  16. //TM1638模块引脚定义
  17. int DIO = 7;
  18. int CLK = 6;
  19. int STB = 4; //这里定义了那三个脚
  20. //共阴数码管显示代码
  21. unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  22.                            0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
  23. unsigned char num[8];                //各个数码管显示的值                     
  24. void setup ()
  25. {
  26.   pinMode(STB,OUTPUT);
  27.   pinMode(CLK,OUTPUT);
  28.   pinMode(DIO,OUTPUT); //让三个脚都是输出状态
  29. }
  30. void loop()
  31.     {
  32.         unsigned char i;
  33.         init_TM1638();                                   //初始化TM1638
  34.         for(i=0;i<8;i++)
  35.         Write_DATA(i<<1,tab[0]);                       //初始化寄存器       
  36.         while(1)
  37.         {
  38.                 i=Read_key();                          //读按键值
  39.                 if(i<8)
  40.                 {
  41.                   num[i]++;
  42.                   while(i==Read_key());                       //等待按键释放
  43.                   if(num[i]>15)
  44.                   num[i]=0;
  45.                   Write_DATA(i*2,tab[num[i]]);
  46.                   Write_allLED(1<<i);
  47.                 }
  48.         }
  49. }



  50. void TM1638_Write(unsigned char        DATA)                        //写数据函数
  51. {
  52.         unsigned char i;
  53.         pinMode(DIO,OUTPUT);
  54.         for(i=0;i<8;i++)
  55.         {
  56.             digitalWrite(CLK,LOW);
  57.             if(DATA&0X01)
  58.                digitalWrite(DIO,HIGH);
  59.             else
  60.                digitalWrite(DIO,LOW);
  61.             DATA>>=1;
  62.             digitalWrite(CLK,HIGH);
  63.         }
  64. }
  65. unsigned char TM1638_Read(void)                                        //读数据函数
  66. {
  67.         unsigned char i;
  68.         unsigned char temp=0;;       
  69.         pinMode(DIO,INPUT);//设置为输入
  70.         for(i=0;i<8;i++)
  71.         {
  72.               temp>>=1;
  73.             digitalWrite(CLK,LOW);
  74.               if(digitalRead(DIO)==HIGH)
  75.                 temp|=0x80;
  76.             digitalWrite(CLK,HIGH);
  77.                
  78.         }
  79.         return temp;
  80. }
  81. void Write_COM(unsigned char cmd)                //发送命令字
  82. {
  83.         digitalWrite(STB,LOW);
  84.         TM1638_Write(cmd);
  85.         digitalWrite(STB,HIGH);
  86. }
  87. unsigned char Read_key(void)
  88. {
  89.         unsigned char c[4],i,key_value=0;
  90.         digitalWrite(STB,LOW);
  91.         TM1638_Write(0x42);                           //读键扫数据 命令
  92.         for(i=0;i<4;i++)               
  93.           {
  94.             c[i]=TM1638_Read();
  95.         }
  96.         digitalWrite(STB,HIGH);                                                   //4个字节数据合成一个字节
  97.         for(i=0;i<4;i++)
  98.         {
  99.             key_value|=c[i]<<i;
  100.         }       
  101.         for(i=0;i<8;i++)
  102.         {
  103.             if((0x01<<i)==key_value)
  104.             break;
  105.         }
  106.         return i;
  107. }
  108. void Write_DATA(unsigned char add,unsigned char DATA)                //指定地址写入数据
  109. {
  110.         Write_COM(0x44);
  111.         digitalWrite(STB,LOW);
  112.         TM1638_Write(0xc0|add);
  113.         TM1638_Write(DATA);
  114.         digitalWrite(STB,HIGH);
  115. }
  116. void Write_allLED(unsigned char LED_flag)                                        //控制全部LED函数,LED_flag表示各个LED状态
  117. {
  118.         unsigned char i;
  119.         for(i=0;i<8;i++)
  120.         {
  121.             if(LED_flag&(1<<i))
  122.               Write_DATA(2*i+1,1);
  123.             else
  124.               Write_DATA(2*i+1,0);
  125.         }
  126. }

  127. //TM1638初始化函数
  128. void init_TM1638(void)
  129. {
  130.         unsigned char i;
  131.         Write_COM(0x8b);       //亮度 (0x88-0x8f)8级亮度可调
  132.         Write_COM(0x40);       //采用地址自动加1
  133.         digitalWrite(STB,LOW);                           //
  134.         TM1638_Write(0xc0);    //设置起始地址
  135.         for(i=0;i<16;i++)           //传送16个字节的数据
  136.           TM1638_Write(0x00);
  137.         digitalWrite(STB,HIGH);
  138. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 18:31:11 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 20:18:38 | 显示全部楼层
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验一百零七: 2262/2272四路无线遥控套件M4非锁接收板 配四键无线遥控器模组


本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:35:08 | 显示全部楼层


PT2262/PT2272
是台湾普城公司生产的一种CMOS 工艺制造的低功耗低价位通用编解码电路,PT2262/PT2272 最多可有12 位(A0-A11)三态地址端管脚(悬空,接高电平,接低电平),任意组合可提供531441地址码,PT2262 最多可有6 位(D0-D5)数据端管脚,设定的地址码和数据码从17 脚串行输出,可用于无线遥控发射电路。编码芯片PT2262 发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272 接收到信号后,其地址码经过两次比较核对后,VT 脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,PT2262 不接通电源,其17 脚为低电平,所以315MHz 的高频发射电路不工作,当有按键按下时,PT2262 得电工作,其第17 脚输出经调制的串行数据信号,当17 脚为高电平期间315MHz 的高频发射电路起振并发射等幅高频信号,当17 脚为低平期间315MHz 的高频发射电路停止振荡,所以高频发射电路完全受控于PT2262 的17 脚输出的数字信号,从而对高频电路完成幅度键控(ASK 调制)相当于调制度为100%的调幅。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:47:29 | 显示全部楼层


PT2262
构成发射电路,PT2262-IR的VDD是通过按键接通后向芯片供电,这样静态时,PT2262-IR并不耗电,特别适合是电池供电的场合。如果使用电源电压较低(如3V),二极管应选用低压差的型号(如1N60等),工作原理相近。无线发射电路是由三极管加上电阻,电容,三极管,声表面滤波器,天线组成。红外线发射电路比较简单,由电阻、三极管和红外线发射管组成。编码电路主要由编码芯片完成,每个遥控器上面的编码都是通过集成电路芯片来完成的。只要我们按下按键,编码将通过发射电路以无线的形式发送出去。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:49:41 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:51:21 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:52:39 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:53:52 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:55:09 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-9-5 21:56:43 | 显示全部楼层

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-13 13:26 , Processed in 0.041603 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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