久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2047|回復: 0
收起左側

12年北京市電子設計大賽的考題,最近重做了一下 msp430源碼分享

[復制鏈接]
ID:327733 發表于 2018-5-11 16:56 | 顯示全部樓層 |閱讀模式
12年北京市電子設計大賽的考題,最近重做了一下

單片機源程序如下:
  1. /*5月9日
  2. *
  3. *
  4. * */

  5. #include <msp430.h>
  6. #include "DAC7811.h"
  7. #include "TA_PWM.h"
  8. #include "oled.h"
  9. #include <stdio.h>

  10. void CSL_init(void);
  11. void GPIO_graceInit(void);
  12. void BCSplus_graceInit(void);
  13. void USCI_B0_graceInit(void);
  14. void ADC10_graceInit();
  15. /*
  16. * main.c
  17. */
  18. int main(void)
  19. {
  20.         unsigned int max = 0, min = 8192;
  21.         long Vpp=0;
  22.         int gain;

  23.     WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer


  24.     _disable_interrupts();
  25.     CSL_init();
  26.     ADC10_graceInit();

  27.     TA0_PWM_Init('A',1,'F',0);
  28.     TA0_PWM_SetPeriod(30);

  29.     _enable_interrupts();

  30.              int j,i;
  31.               long temp;

  32.                    char s[16];
  33.                ADC10CTL0 |= ADC10SC;
  34.                    OLED_Init();
  35.                    OLED_Clear();
  36.                    OLED_ShowString(0,0,"Gain:");
  37.                    OLED_ShowString(0,2,"Vpp :");



  38.     while(1)
  39.     {
  40.              TA0_PWM_SetPermill(1,500);     //PWM波輸出,vpp不能超過100mv


  41.               sprintf(s,"%d  ",max);
  42.                         OLED_ShowString(0,6,s);

  43.             for(j=0;j<500;j++)
  44.                             {

  45.                             ADC10CTL0 |= ADC10SC+ENC;
  46.                             while ((ADC10CTL0 & ADC10IFG) == 0);
  47.                             temp=ADC10MEM;

  48.                             if(temp > max)
  49.                             max = temp;
  50.                             if(temp < min)
  51.                             min = temp;

  52.                             }
  53.             Vpp=(max-min);

  54.             for(i=0;i<4;i++)       OLED_ShowString(40,i*2,"          ");

  55.             sprintf(s,"%dV",Vpp);
  56.         OLED_ShowString(40,2,s);

  57.         Vpp=Vpp*3550/1023;   //  測量電壓
  58.         sprintf(s,"%dV",Vpp);
  59.          OLED_ShowString(0,4,s);


  60.          Vpp=Vpp/20;
  61.          sprintf(s,"%dV",Vpp);
  62.            OLED_ShowString(70,4,s);

  63.          TA0_PWM_SetPermill(1,Vpp*10);     //PWM波輸出,vpp不能超過100mv


  64.         if (Vpp<40)
  65.         {
  66.                 spiwrite(41,1);
  67.                 gain=100;

  68.         }
  69.         else if (Vpp<70)
  70.         {
  71.                 spiwrite(129,1);
  72.                 gain = 35;
  73.         }
  74.         else if (Vpp<100)
  75.         {
  76.                 spiwrite(73,1);
  77.                 gain=30;
  78.         }


  79.         sprintf(s,"%d  ",max);
  80.          OLED_ShowString(0,6,s);

  81.          sprintf(s,"%d  ",min);
  82.          OLED_ShowString(80,6,s);

  83.          sprintf(s,"%d dB",gain);
  84.          OLED_ShowString(40,0,s);

  85.                      max=0;
  86.                      min=8192;
  87.                     __delay_cycles(30000000);
  88.     }
  89. }

  90. /*
  91. * 系統初始化集中調用函數
  92. */

  93. void CSL_init(void)
  94. {
  95.         GPIO_graceInit();                                        //IO口初始化
  96.         BCSplus_graceInit();                                //時鐘源初始化
  97.         USCI_B0_graceInit();                        //USCI_B初始化-3線SPI
  98.                      //ADC初始化  P1.3輸入
  99. }
  100.         /*
  101.          * IO口初始化
  102.          */

  103.         void GPIO_graceInit(void)
  104.         {
  105.                 //-----設定P1.0和P1.6的輸出初始值-----
  106.                 P1DIR |= BIT0;                                                        //設定P1.0為輸出
  107.                 P1OUT |= BIT0;                                                //設定P1.0初值(初始化完成后兩燈均亮)
  108.                 //-----配合機械按鍵,啟用內部上拉電阻-----
  109.                 P1REN |= BIT3;                                                                        //啟用P1.3內部上下拉電阻
  110.                 P1OUT |= BIT3;                                                                    //將電阻設置為上拉
  111.                 //-----配置P1.3中斷參數-----
  112.                 P1DIR &= ~BIT3;                                            // P1.3設為輸入(可省略)
  113.                 P1IES |= BIT3;                                                  // P1.3設為下降沿中斷
  114.                 P1IE  |= BIT3 ;                                                  // 允許P1.3中斷
  115.                 /* Port 1 Port Select 2 Register */
  116.                 P1SEL2 = BIT5 | BIT7;
  117.                 /* Port 1 Port Select Register */
  118.                 P1SEL = BIT5 | BIT7;
  119.                 /* Port 2 Output Register */
  120.                 P2OUT = BIT0 | BIT1 | BIT2| BIT3 | BIT4 | BIT5;
  121.                 /* Port 2 Direction Register */
  122.                 P2DIR = BIT0 | BIT1 | BIT2| BIT3 | BIT4 | BIT5;
  123.         }
  124.         /*
  125.          * 設定主時鐘為16MHz,低速時鐘為外部手表晶振
  126.          */

  127.         void BCSplus_graceInit(void)
  128.         {
  129.                 BCSCTL2 = SELM_0 | DIVM_0 | DIVS_0;
  130.                 if (CALBC1_16MHZ != 0xFF) {
  131.                         /* Adjust this accordingly to your VCC rise time */
  132.                         __delay_cycles(10000);
  133.                         DCOCTL = 0x00;
  134.                         BCSCTL1 = CALBC1_16MHZ;     /* Set DCO to 16MHz */
  135.                         DCOCTL = CALDCO_16MHZ;
  136.                 }
  137.                 BCSCTL1 |= XT2OFF | DIVA_0;
  138.                 BCSCTL3 = XT2S_0 | LFXT1S_0 | XCAP_1;
  139.         }
  140.         /*
  141.          * 通用串行通信口設置為3線SPI模式,P1.5-SCL/P1.7-SDL
  142.          */
  143.         void USCI_B0_graceInit(void)
  144.         {
  145.                 /* Disable USCI */
  146.                 UCB0CTL1 |= UCSWRST;
  147.                 UCB0CTL0 = UCCKPL |UCMSB | UCMST | UCMODE_0 | UCSYNC;
  148.                 UCB0CTL1 = UCSSEL_2 | UCSWRST;
  149.                 /* Bit Rate Control Register 0 */
  150.                 UCB0BR0 = 32;
  151.                 /* Enable USCI */
  152.                 UCB0CTL1 &= ~UCSWRST;
  153.         }

  154.         void ADC10_graceInit(void)
  155.         {         //p1.2輸入,基準電壓為3.55v
  156.         //        ADC10CTL0 &= ~ENC;
  157.         //            ADC10CTL0 = ADC10IE | ADC10ON | ADC10SHT_3 | SREF_0;
  158.         //            ADC10CTL1 = CONSEQ_0 | ADC10SSEL_0 | ADC10DIV_0 | SHS_0 | INCH_2;
  159.         //            __delay_cycles(30000);
  160.         //            ADC10CTL0 |= ENC;


  161.                     ADC10CTL0 &= ~ENC;
  162.                                     ADC10CTL0 =ADC10ON + REFON + ADC10SHT_3 + SREF_0;
  163.                                 ADC10CTL1 = CONSEQ_0 + ADC10SSEL_0 + ADC10DIV_3 + SHS_0 + INCH_3;
  164.                                 ADC10AE0 = 0x8;
  165.                                 __delay_cycles(30000);
  166.                                 ADC10CTL0 |= ENC;


  167.         }
復制代碼

所有資料51hei提供下載:
lian5.9.zip (103.88 KB, 下載次數: 8)


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人中文字幕在线 | 成人国产在线视频 | 国产高清区| 欧美日韩亚洲系列 | 国产资源在线播放 | 日本a在线| 成人午夜av | 欧美激情视频一区二区三区在线播放 | 涩涩视频在线观看 | h在线免费观看 | 日韩手机在线看片 | 欧产日产国产精品99 | 国产一区二区高清在线 | 久久久久久亚洲精品 | 天天操,夜夜爽 | 网址黄 | 午夜视频在线视频 | 天天操夜夜爽 | 久久久婷 | 亚洲视频免费在线观看 | 亚洲成人激情在线观看 | 成人影院在线 | 成人国产精品色哟哟 | 日日草天天干 | 亚洲国产一区二区三区在线观看 | 国产成人精品久久二区二区91 | 成人午夜免费视频 | 成人中文字幕在线观看 | 一区二区在线 | 亚洲成人久久久 | 婷婷福利视频导航 | 蜜桃毛片 | 中文字幕一区二区三区乱码图片 | 国产乱码精品一区二区三区中文 | 午夜激情在线 | a免费视频 | 九九亚洲 | 成人在线视频观看 | 国产精品99久久久久久久vr | 国产激情亚洲 | 国产成人99 |