数码之家

 找回密码
 立即注册
搜索
查看: 1199|回复: 3

[Arduino] MSP430G2452数模转换实验,没有串口,只要用LED编码显示电压范围了

[复制链接]
发表于 2023-4-19 23:16:23 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

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

x
MSP430G2452数模转换实验,没有串口,只要用LED编码显示电压范围了


  1. #include <msp430.h>


  2. void longDelay(void)
  3. {
  4.     _delay_cycles(1000000);
  5. }

  6. void shortDelay(void)
  7. {
  8.     _delay_cycles(250000);
  9. }

  10. void longLED_ON(void)
  11. {
  12.     P1OUT = 0x01;//LED ON
  13.     longDelay();
  14.     P1OUT = 0x00;//LED off
  15. }

  16. void shortLED_ON(void)
  17. {
  18.     P1OUT = 0x01;   //LED ON
  19.     shortDelay();
  20.     P1OUT = 0x00;   //LED off
  21. }

  22. void LED0L4S(void)
  23. {
  24.     shortLED_ON();
  25.     shortDelay();
  26.     shortLED_ON();
  27.     shortDelay();
  28.     shortLED_ON();
  29.     shortDelay();
  30.     shortLED_ON();
  31.     longDelay();
  32. }

  33. void LED1L3S(void)
  34. {
  35.     longLED_ON();
  36.     shortDelay();
  37.     shortLED_ON();
  38.     shortDelay();
  39.     shortLED_ON();
  40.     shortDelay();
  41.     shortLED_ON();
  42.     longDelay();
  43. }

  44. void LED2L2S(void)
  45. {
  46.     longLED_ON();
  47.     shortDelay();
  48.     longLED_ON();
  49.     shortDelay();
  50.     shortLED_ON();
  51.     shortDelay();
  52.     shortLED_ON();
  53.     longDelay();
  54. }

  55. void LED3L1S(void)
  56. {
  57.     longLED_ON();
  58.     shortDelay();
  59.     longLED_ON();
  60.     shortDelay();
  61.     longLED_ON();
  62.     shortDelay();
  63.     shortLED_ON();
  64.     longDelay();
  65. }

  66. void LED4L0S(void)
  67. {
  68.     longLED_ON();
  69.     shortDelay();
  70.     longLED_ON();
  71.     shortDelay();
  72.     longLED_ON();
  73.     shortDelay();
  74.     longLED_ON();
  75.     longDelay();
  76. }




  77. void main(void)
  78. {
  79.     WDTCTL = WDTPW | WDTHOLD;       // stop watchdog timer
  80.     P1DIR |= 0x01;                  // configure P1.0 as output

  81.     BCSCTL1= CALBC1_1MHZ;
  82.     DCOCTL = CALDCO_1MHZ;

  83.     // Set Ref as internal 2.5V, ADC10ON, enable interrupt
  84.     ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + REF2_5V + ADC10ON + ADC10IE;
  85.     _delay_cycles(30);                // Delay to allow Ref to settle
  86.    
  87.     ADC10CTL1 = INCH_5|SHS_0|ADC10DIV_0|ADC10SSEL_0|CONSEQ_0;
  88.     ADC10AE0 |= BIT5;             // Set P1.5 as A1 input

  89.     P1DIR |= BIT5;                // Set P1.5 to output direction



  90.     while(1)
  91.     {
  92.         ADC10CTL0 |= ENC+ ADC10SC;                // Sampling and conversion start
  93.          __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exi

  94.         if (ADC10MEM < 204)
  95.         {
  96.             LED0L4S();// ADC10MEM = A1 > 1.0V?
  97.         }else if (ADC10MEM < 409)
  98.         {
  99.             LED1L3S();
  100.         }else if(  ADC10MEM < 614)
  101.         {
  102.             LED2L2S();
  103.         }else if (ADC10MEM < 818 )
  104.         {
  105.             LED3L1S();
  106.         }else {  //
  107.             LED4L0S();
  108.         }
  109.         longDelay();
  110.         longDelay();
  111.         longDelay();
  112.     }

  113. }

  114. // ADC10 interrupt ** routine
  115. #pragma vector=ADC10_VECTOR
  116. __interrupt void ADC10_ISR (void)
  117. {
  118.   __bic_SR_register_on_exit(CPUOFF);                // Clear CPUOFF bit from 0(SR)
  119. }
复制代码


发表于 2023-4-20 08:12:56 来自手机浏览器 | 显示全部楼层
纯发送,模拟一个串口不需要太多资源。
回复 支持 反对

使用道具 举报

发表于 2023-4-20 11:19:19 来自手机浏览器 | 显示全部楼层
功能很简单,程序真繁琐。。。显示就不能封成一个函数?比如Display(uint16_t Dat)   用的时候直接调用就行了。参数一填。
回复 支持 反对

使用道具 举报

发表于 2023-4-22 22:51:43 | 显示全部楼层
定时器模拟串口也不复杂
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-13 09:33 , Processed in 0.234001 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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