找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: eagler8
打印 上一主题 下一主题
收起左侧

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

  [复制链接]
2081#
ID:513258 发表于 2019-9-4 08:06 | 只看该作者

回复

使用道具 举报

2082#
ID:513258 发表于 2019-9-4 08:10 | 只看该作者

回复

使用道具 举报

2083#
ID:513258 发表于 2019-9-4 08:26 | 只看该作者
主要特点
控制电路和LED共用唯一的电源。
控制电路和RGB芯片集成在5050个组件的封装中,形成完整的可寻址像素。内置信号整形电路,对下一个驱动器进行波形整形后,确保波形不失真累积。
内置电气复位电路和失电复位电路。
三基色各像素可实现256亮度显示,完成16777216色全彩色显示,扫描频率为2kHz。
单线路级联端口传输信号。
任意两点距离不超过3米的传输信号,无任何增加电路。
刷新率为30fps时,层叠数不小于1024像素。以800Kbps的速度发送数据。
灯光颜色一致性高,性价比高。

应用
全彩模块,全彩软灯带。
LED装饰照明,室内外LED视频不规则屏幕。



回复

使用道具 举报

2084#
ID:513258 发表于 2019-9-4 08:31 | 只看该作者
几个应用电路




回复

使用道具 举报

2085#
ID:513258 发表于 2019-9-4 08:41 | 只看该作者


名称:12位WS2812智能全彩圆盘LED模块
整体尺寸:直径7cm
芯片:WS2812B(内置于LED)
LED:5050封装RGB全彩高亮
电压:5V
端口:数字
平台:单片机(提供Arduino +51单片机测试例程!)
控制方式:内置控制芯片,只需一个IO口即可控制

回复

使用道具 举报

2086#
ID:513258 发表于 2019-9-4 08:57 | 只看该作者



回复

使用道具 举报

2087#
ID:513258 发表于 2019-9-4 09:33 | 只看该作者
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百零五:12位 WS2812 5050 RGB LED 智能全彩RGB环开发板大环
  4. 1、安装库:IDE-工具-管理库-搜索Adafruit_NeoPixel-安装
  5. 2、项目:点亮环形LED模块,循环快闪绿色光
  6. 3、接脚:
  7. VCC  → 5V
  8. GND → GND
  9. DI  接  D7
  10. */

  11. #include <Adafruit_NeoPixel.h>

  12. #define PIN 7
  13. #define MAX_LED 12

  14. #define ADD true
  15. #define SUB false

  16. int val = 0;
  17. boolean stat = ADD;

  18. Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );

  19. void setup()
  20. {
  21.   strip.begin();           
  22.   strip.show();           
  23. }

  24. void loop()
  25. {
  26.   uint8_t i,a=0;                                       
  27.   uint32_t color = strip.Color(255, 100, 0);      
  28.      
  29.   while(a<17)
  30.   {
  31.       for(i=0;i<16;i++)
  32.       {
  33.         if(i==a) strip.setPixelColor(i, color);     
  34.         else strip.setPixelColor(i, 0);            
  35.       }
  36.        strip.show();                                
  37.        delay(20);                                   
  38.        a++;                                         
  39.   }
  40. }
复制代码


回复

使用道具 举报

2088#
ID:513258 发表于 2019-9-4 09:35 | 只看该作者

回复

使用道具 举报

2089#
ID:513258 发表于 2019-9-4 11:32 | 只看该作者
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百零五:12位 WS2812 5050 RGB LED 智能全彩RGB环开发板大环
  4. 1、安装库:IDE-工具-管理库-搜索Adafruit_NeoPixel-安装
  5. 2、项目:灯环显示彩色
  6. 3、接脚:
  7. VCC  → 5V
  8. GND → GND
  9. DI  接  D7
  10. */

  11. #include <Adafruit_NeoPixel.h>
  12. #ifdef __AVR__
  13. #include <avr/power.h>
  14. #endif

  15. #define PIN 7

  16. // Parameter 1 = number of pixels in strip
  17. // Parameter 2 = Arduino pin number (most are valid)
  18. // Parameter 3 = pixel type flags, add together as needed:
  19. //   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
  20. //   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
  21. //   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
  22. //   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
  23. //   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
  24. Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);

  25. // IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
  26. // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
  27. // and minimize distance between Arduino and first pixel.  Avoid connecting
  28. // on a live circuit...if you must, connect GND first.

  29. void setup() {
  30.   // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
  31.   #if defined (__AVR_ATtiny85__)
  32.     if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
  33.   #endif
  34.   // End of trinket special code


  35.   strip.begin();
  36.   strip.show(); // Initialize all pixels to 'off'
  37. }

  38. void loop() {
  39.   // Some example procedures showing how to display to the pixels:
  40.   //colorWipe(strip.Color(255, 0, 0), 50); // Red
  41. // colorWipe(strip.Color(0, 255, 0), 50); // Green
  42.   //colorWipe(strip.Color(0, 0, 255), 50); // Blue
  43. //colorWipe(strip.Color(0, 0, 0, 255), 50); // White RGBW
  44.   // Send a theater pixel chase in...
  45. // theaterChase(strip.Color(127, 127, 127), 50); // White
  46.   //theaterChase(strip.Color(127, 0, 0), 50); // Red
  47.   //theaterChase(strip.Color(0, 0, 127), 50); // Blue

  48.   rainbow(20);
  49.   //rainbowCycle(20);
  50.   //theaterChaseRainbow(50);
  51. }

  52. // Fill the dots one after the other with a color
  53. void colorWipe(uint32_t c, uint8_t wait) {
  54.   for(uint16_t i=0; i<strip.numPixels(); i++) {
  55.     strip.setPixelColor(i, c);
  56.     strip.show();
  57.     delay(wait);
  58.   }
  59. }

  60. void rainbow(uint8_t wait) {
  61.   uint16_t i, j;

  62.   for(j=0; j<256; j++) {
  63.     for(i=0; i<strip.numPixels(); i++) {
  64.       strip.setPixelColor(i, Wheel((i+j) & 255));
  65.     }
  66.     strip.show();
  67.     delay(wait);
  68.   }
  69. }

  70. // Slightly different, this makes the rainbow equally distributed throughout
  71. void rainbowCycle(uint8_t wait) {
  72.   uint16_t i, j;

  73.   for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
  74.     for(i=0; i< strip.numPixels(); i++) {
  75.       strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
  76.     }
  77.     strip.show();
  78.     delay(wait);
  79.   }
  80. }

  81. //Theatre-style crawling lights.
  82. void theaterChase(uint32_t c, uint8_t wait) {
  83.   for (int j=0; j<10; j++) {  //do 10 cycles of chasing
  84.     for (int q=0; q < 3; q++) {
  85.       for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
  86.         strip.setPixelColor(i+q, c);    //turn every third pixel on
  87.       }
  88.       strip.show();

  89.       delay(wait);

  90.       for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
  91.         strip.setPixelColor(i+q, 0);        //turn every third pixel off
  92.       }
  93.     }
  94.   }
  95. }

  96. //Theatre-style crawling lights with rainbow effect
  97. void theaterChaseRainbow(uint8_t wait) {
  98.   for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
  99.     for (int q=0; q < 3; q++) {
  100.       for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
  101.         strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
  102.       }
  103.       strip.show();

  104.       delay(wait);

  105.       for (uint16_t i=0; i < strip.numPixels(); i=i+3) {
  106.         strip.setPixelColor(i+q, 0);        //turn every third pixel off
  107.       }
  108.     }
  109.   }
  110. }

  111. // Input a value 0 to 255 to get a color value.
  112. // The colours are a transition r - g - b - back to r.
  113. uint32_t Wheel(byte WheelPos) {
  114.   WheelPos = 255 - WheelPos;
  115.   if(WheelPos < 85) {
  116.     return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  117.   }
  118.   if(WheelPos < 170) {
  119.     WheelPos -= 85;
  120.     return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  121.   }
  122.   WheelPos -= 170;
  123.   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  124. }  
复制代码


回复

使用道具 举报

2090#
ID:513258 发表于 2019-9-4 11:57 | 只看该作者
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百零五:12位 WS2812 5050 RGB LED 智能全彩RGB环开发板大环
  4. 1、安装库:IDE-工具-管理库-搜索Adafruit_NeoPixel-安装
  5. 2、项目:逐个点亮环形彩色LED
  6. 3、接脚:
  7. VCC  → 5V
  8. GND → GND
  9. DI  接  D7
  10. */

  11. #include <FastLED.h>
  12. #define LED_PIN     7
  13. #define NUM_LEDS    12

  14. CRGB leds[NUM_LEDS];

  15. void setup() {
  16.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  17. }

  18. void loop() {
  19.   leds[0] = CRGB(255, 0, 0);
  20.   FastLED.show();
  21.   delay(500);  
  22.   
  23.   leds[1] = CRGB(0, 255, 0);
  24.   FastLED.show();
  25.   delay(500);
  26.   
  27.   leds[2] = CRGB(0, 0, 255);
  28.   FastLED.show();
  29.   delay(500);
  30.   
  31.   leds[3] = CRGB(150, 0, 255);
  32.   FastLED.show();
  33.   delay(500);
  34.   
  35.   leds[4] = CRGB(255, 200, 20);
  36.   FastLED.show();
  37.   delay(500);
  38.   
  39.   leds[5] = CRGB(85, 60, 180);
  40.   FastLED.show();
  41.   delay(500);
  42.   
  43.   leds[6] = CRGB(150, 255, 20);
  44.   FastLED.show();
  45.   delay(500);

  46.   leds[7] = CRGB(0, 50, 255);
  47.   FastLED.show();
  48.   delay(500);

  49.   leds[8] = CRGB(255, 255, 0);
  50.   FastLED.show();
  51.   delay(500);  
  52.   
  53.   leds[9] = CRGB(20, 25, 255);
  54.   FastLED.show();
  55.   delay(500);
  56.   
  57.   leds[10] = CRGB(255, 0, 20);
  58.   FastLED.show();
  59.   delay(500);
  60.   
  61.   leds[11] = CRGB(50, 0, 55);
  62.   FastLED.show();
  63.   delay(500);
  64. }
复制代码


回复

使用道具 举报

2091#
ID:513258 发表于 2019-9-4 12:56 | 只看该作者
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百零五:12位 WS2812 5050 RGB LED 智能全彩RGB环开发板大环
  4. 1、安装库:IDE-工具-管理库-搜索Adafruit_NeoPixel-安装
  5. 2、项目:红蓝色快扫——这里第一个“for”循环点亮所有12个蓝色LED,
  6. 从第一个LED到最后一个LED,延迟40毫秒。 下一个“for”循环再
  7. 次点亮所有12个LED,但这次是红色,反之,从最后一个LED到第一个LED。
  8. 3、接脚:
  9. VCC  → 5V
  10. GND → GND
  11. DI  接  D7
  12. */

  13. #include <FastLED.h>
  14. #define LED_PIN     7
  15. #define NUM_LEDS    12

  16. CRGB leds[NUM_LEDS];

  17. void setup() {
  18.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  19. }

  20. void loop() {
  21.   for (int i = 0; i <= 11; i++) {
  22.     leds[i] = CRGB ( 0, 0, 255);
  23.     FastLED.show();
  24.     delay(60);
  25.   }
  26.   for (int i = 11; i >= 0; i--) {
  27.     leds[i] = CRGB ( 255, 0, 0);
  28.     FastLED.show();
  29.     delay(40);
  30.   }
  31. }
复制代码


回复

使用道具 举报

2092#
ID:513258 发表于 2019-9-4 13:05 | 只看该作者
  1. /*
  2. 【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
  3. 实验一百零五:12位 WS2812 5050 RGB LED 智能全彩RGB环开发板大环
  4. 1、安装库:IDE-工具-管理库-搜索Adafruit_NeoPixel-安装
  5. 2、项目:逐个点亮不同序列的LED(可设置为任何颜色)
  6. 3、接脚:
  7. VCC  → 5V
  8. GND → GND
  9. DI  接  D7
  10. */

  11. #include <FastLED.h>
  12. #define LED_PIN     7
  13. #define NUM_LEDS    12

  14. CRGB leds[NUM_LEDS];

  15. void setup() {
  16.   FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
  17. }

  18. void loop() {
  19.   
  20.   leds[0] = CRGB(255, 0, 0);
  21.   FastLED.show();
  22.   delay(500);  
  23.   leds[1] = CRGB(0, 255, 0);
  24.   FastLED.show();
  25.   delay(500);
  26.   leds[2] = CRGB(0, 0, 255);
  27.   FastLED.show();
  28.   delay(500);
  29.   leds[5] = CRGB(150, 0, 255);
  30.   FastLED.show();
  31.   delay(500);
  32.   leds[9] = CRGB(255, 200, 20);
  33.   FastLED.show();
  34.   delay(500);
  35.   leds[3] = CRGB(85, 60, 180);
  36.   FastLED.show();
  37.   delay(500);
  38.   leds[7] = CRGB(50, 255, 20);
  39.   FastLED.show();
  40.   delay(500);
  41. }
复制代码


回复

使用道具 举报

2093#
ID:513258 发表于 2019-9-4 14:09 | 只看该作者

回复

使用道具 举报

2094#
ID:513258 发表于 2019-9-4 14:35 | 只看该作者

回复

使用道具 举报

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

【Arduino】108种传感器模块系列实验(资料+代码+图形+仿真)
实验一百零六: TM1638按键数码管LED显示模组8位数码管\LED\按键智控模块





回复

使用道具 举报

2096#
ID:513258 发表于 2019-9-4 20:36 | 只看该作者

TM1638
是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。本模块质量可靠、稳定性好、抗干扰能力强。主要应用于冰箱、空调 、家庭影院等产品的高段位显示屏驱动。

回复

使用道具 举报

2097#
ID:513258 发表于 2019-9-4 20:47 | 只看该作者

TM1638
1、采用CMOS 工艺
2、显示模式 10段×8 位
3、键扫描(8×3bit)
4、辉度调节电路(占空比8 级可调)
5、串行接口(CLK,STB,DIO)
6、振荡方式:RC 振荡
7、内置上电复位电路
8、封装形式:SOP28

回复

使用道具 举报

2098#
ID:513258 发表于 2019-9-5 14:44 | 只看该作者

回复

使用道具 举报

2099#
ID:513258 发表于 2019-9-5 14:52 | 只看该作者



回复

使用道具 举报

2100#
ID:513258 发表于 2019-9-5 14:54 | 只看该作者

回复

使用道具 举报

2101#
ID:513258 发表于 2019-9-5 14:56 | 只看该作者

回复

使用道具 举报

2102#
ID:513258 发表于 2019-9-5 14:57 | 只看该作者

回复

使用道具 举报

2103#
ID:513258 发表于 2019-9-5 16:43 | 只看该作者

模块功能介绍
包括以下资源:
1、8个按键,
2、8个LED
3、8位数码管,共阴极LED数码管;
4、可以和STC等单片机直接连接;
5、开始实验ardiuno驱动程序

回复

使用道具 举报

2104#
ID:513258 发表于 2019-9-5 16:48 | 只看该作者
模块电原理图



回复

使用道具 举报

2105#
ID:513258 发表于 2019-9-5 16:49 | 只看该作者

回复

使用道具 举报

2106#
ID:513258 发表于 2019-9-5 16:51 | 只看该作者

回复

使用道具 举报

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

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



回复

使用道具 举报

2108#
ID:513258 发表于 2019-9-5 16:55 | 只看该作者

回复

使用道具 举报

2109#
ID:513258 发表于 2019-9-5 16:57 | 只看该作者

回复

使用道具 举报

2110#
ID:513258 发表于 2019-9-5 17:47 | 只看该作者
  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. }
复制代码


回复

使用道具 举报

2111#
ID:513258 发表于 2019-9-5 17:48 | 只看该作者

回复

使用道具 举报

2112#
ID:513258 发表于 2019-9-5 18:28 | 只看该作者
  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. }
复制代码


回复

使用道具 举报

2113#
ID:513258 发表于 2019-9-5 18:30 | 只看该作者

回复

使用道具 举报

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

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




回复

使用道具 举报

2115#
ID:513258 发表于 2019-9-5 21:34 | 只看该作者


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%的调幅。

回复

使用道具 举报

2116#
ID:513258 发表于 2019-9-5 21:46 | 只看该作者


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

回复

使用道具 举报

2117#
ID:513258 发表于 2019-9-5 21:48 | 只看该作者

回复

使用道具 举报

2118#
ID:513258 发表于 2019-9-5 21:50 | 只看该作者

回复

使用道具 举报

2119#
ID:513258 发表于 2019-9-5 21:52 | 只看该作者

回复

使用道具 举报

2120#
ID:513258 发表于 2019-9-5 21:53 | 只看该作者

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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