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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1407|回復: 0
打印 上一主題 下一主題
收起左側

基于MSP430F5529的實時鬧鐘程序代碼,基于TI公司MSP430F5529單片機學習板

[復制鏈接]
跳轉到指定樓層
樓主
ID:378492 發表于 2018-7-24 14:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include <stdint.h>
  2. #include <msp430f5529.h>
  3. #include "msp430.h"
  4. #include "HAL_Dogs102x6.h"

  5. void lcd_int(void);
  6. void time_1_int(void);
  7. void display_time(void);
  8. void display_style(void);
  9. void button_init(void);
  10. void key_scan(void);
  11. void clock_check(void);
  12. void display_ADC(void);
  13. void ADC_init(void);
  14. uint16_t get_temp_Value(void);
  15. uint16_t get_ADC_voltage_Value(void);

  16. char hour=0,min=0,sec=0;
  17. char clk_hour=0,clk_min=0,clk_sec=20;
  18. char key_chose=5;

  19. unsigned int  time_counter=0;
  20. unsigned int ADC_voltage=0;
  21. unsigned int tempData,ADC_voltageDataOld;
  22. unsigned int tempDataOld,ADC_voltageData;
  23. volatile long IntDegF;
  24. volatile long IntDegC;
  25. volatile long temp;

  26. uint8_t time_hour_style=0;
  27. uint8_t time_min_style=0;
  28. uint8_t clk_hour_style=0;
  29. uint8_t clk_min_style=0;
  30. uint8_t clk_sec_style=0;

  31. char time[] ="time :00-00-00";
  32. char clock[]="clock:00-00-00";
  33. char time_hour[]="00";
  34. char time_min[]="00";
  35. char time_sec[]="00";
  36. char clock_disp_hour[]="00";
  37. char clock_disp_min[]="00";
  38. char clock_disp_sec[]="00";

  39. char temp1[]="AD_IntDegF=0000";
  40. char temp2[]="AD_IntDegC=0000";
  41. char adc_volage[]="ADC_votage=0000";

  42. const uint8_t clock_disp[]={0x20,0x02,
  43.                 0x00,0x1F,0x80,0x44,0x04,0x44,0x54,0x4F,0x44,0x44,0x44,0x44,0x40,0x7F,0x00,0x00,
  44.                 0x04,0x08,0x34,0xE7,0x24,0x24,0x00,0x0F,0x08,0x08,0xFF,0x08,0x08,0x0F,0x00,0x00,
  45.                 0x00,0xFF,0x00,0x00,0xF8,0x80,0x80,0xFE,0x90,0x88,0xF0,0x02,0x01,0xFE,0x00,0x00,
  46.                 0x80,0x80,0x80,0xFE,0x84,0x88,0x00,0xE0,0x40,0x40,0xFF,0x40,0x40,0xE0,0x00,0x00
  47. };                                                                                                                                                //display"naozhong"

  48. void main( void )
  49. {
  50.         WDTCTL = WDTPW + WDTHOLD;

  51.         time_1_int();
  52.         lcd_int();


  53.         button_init();
  54.         Dogs102x6_imageDraw(clock_disp,0,35);
  55.         Dogs102x6_stringDraw(2,0,time,DOGS102x6_DRAW_NORMAL);         // write data to LCD
  56.         Dogs102x6_stringDraw(3,0,clock,DOGS102x6_DRAW_NORMAL);        // write data to LCD
  57.         ADC_init();
  58.     P1DIR |= (0x01<<0);
  59.     P8DIR |= (0x01<<2);

  60.    while(1)
  61.     {
  62.             ADC12CTL0 |= ADC12SC;
  63.             display_ADC();
  64.                 display_time();
  65.                 key_scan();
  66.                 clock_check();
  67.     }
  68. }
  69. uint16_t get_temp_Value(void)
  70. {
  71.     if (tempData > tempDataOld)
  72.         if ((tempData - tempDataOld) > 10)
  73.                 tempDataOld = tempData;            //use new data if change is beyond
  74.                                                                                             // fluctuation threshold
  75.         else
  76.                 tempData = tempDataOld;            //use old data if change is not beyond
  77.                                                        // fluctuation threshold
  78.     else
  79.     if ((tempDataOld - tempData) > 10)
  80.             tempDataOld = tempData;                //use new data if change is beyond
  81.                                                                                             // fluctuation threshold
  82.     else
  83.             tempData = tempDataOld;                //use old data if change is not beyond
  84.                                                        // fluctuation threshold
  85.     return tempData;
  86. }
  87. uint16_t get_ADC_voltage_Value(void)
  88. {
  89.     if (ADC_voltageData > ADC_voltageDataOld)
  90.         if ((ADC_voltageData - ADC_voltageDataOld) > 10)
  91.                 ADC_voltageDataOld = ADC_voltageData;            //use new data if change is beyond
  92.                                                        // fluctuation threshold
  93.         else
  94.                 ADC_voltageData = ADC_voltageDataOld;            //use old data if change is not beyond
  95.                                                        // fluctuation threshold
  96.     else
  97.     if ((ADC_voltageDataOld - ADC_voltageData) > 10)
  98.             ADC_voltageDataOld = ADC_voltageData;                //use new data if change is beyond
  99.                                                        // fluctuation threshold
  100.     else
  101.             ADC_voltageData = ADC_voltageDataOld;                //use old data if change is not beyond
  102.                                                        // fluctuation threshold

  103.     return ADC_voltageData;
  104. }
  105. void display_ADC(void)
  106. {
  107.         ADC_voltage=get_ADC_voltage_Value();
  108.         temp=get_temp_Value();
  109.         IntDegC = ((temp - 1855) * 667) / 4096;
  110.         IntDegF = ((temp - 1748) * 1200) / 4096;
  111.         //IntDegC = temp;
  112.         //IntDegF = temp;

  113.         adc_volage[14]=ADC_voltage%10+'0';
  114.         adc_volage[13]=ADC_voltage/10%10+'0';
  115.         adc_volage[12]=ADC_voltage/100%10+'0';
  116.         adc_volage[11]=ADC_voltage/1000%10+'0';

  117.         temp1[14]=IntDegC%10+'0';
  118.         temp1[13]=IntDegC/10%10+'0';
  119.         temp1[12]=IntDegC/100%10+'0';
  120.         temp1[11]=IntDegC/1000%10+'0';

  121.         temp2[14]=IntDegF%10+'0';
  122.         temp2[13]=IntDegF/10%10+'0';
  123.         temp2[12]=IntDegF/100%10+'0';
  124.         temp2[11]=IntDegF/1000%10+'0';

  125.         Dogs102x6_stringDraw(4,0,temp1,DOGS102x6_DRAW_NORMAL);   // write data to LCD
  126.         Dogs102x6_stringDraw(5,0,temp2,DOGS102x6_DRAW_NORMAL);   // write data to LCD
  127.         Dogs102x6_stringDraw(6,0,adc_volage,DOGS102x6_DRAW_NORMAL);   // write data to LCD
  128. }

  129. void ADC_init(void)
  130. {
  131.           P8DIR |= BIT0;
  132.           P8OUT |= BIT0;                                                        // Enable WHEEL
  133.           REFCTL0 &= ~REFMSTR;
  134.           ADC12CTL0 = ADC12SHT0_8 + ADC12REFON + ADC12ON;
  135.           ADC12CTL0 |= ADC12ON+ADC12MSC+ADC12SHT0_2+ADC12SHT1_2+ADC12SHT0_8; // Turn on ADC12, set sampling time
  136.           ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1;       // Use sampling timer, single sequence

  137.           ADC12MCTL0 = ADC12INCH_5;                 // ref+=AVcc, channel = A5
  138.           ADC12MCTL1 = ADC12INCH_10+ADC12EOS+ ADC12SREF_1;       // ref+=AVcc, channel = A10,end seq

  139.           P6SEL |= BIT5;                                                        // Enable A/D channel inputs

  140.           ADC12IE = 0x02;                           // Enable ADC12IFG.1
  141.           __delay_cycles(75);                       // 75us delay to allow Ref to settle
  142.           ADC12CTL0 |= ADC12ENC;                    // Enable conversions
  143. }


  144. void display_time(void)
  145. {
  146.         time_hour[0]=hour/10+'0';
  147.         time_hour[1]=hour%10+'0';
  148.         time_min[0]=min/10+'0';
  149.         time_min[1]=min%10+'0';
  150.         time_sec[0]=sec/10+'0';
  151.         time_sec[1]=sec%10+'0';

  152.         clock_disp_hour[0]=clk_hour/10+'0';
  153.         clock_disp_hour[1]=clk_hour%10+'0';
  154.         clock_disp_min[0]=clk_min/10+'0';
  155.         clock_disp_min[1]=clk_min%10+'0';
  156.         clock_disp_sec[0]=clk_sec/10+'0';
  157.         clock_disp_sec[1]=clk_sec%10+'0';
  158.         display_style();
  159.         Dogs102x6_stringDraw(2,36,time_hour,time_hour_style);
  160.         Dogs102x6_stringDraw(2,54,time_min,time_min_style);
  161.         Dogs102x6_stringDraw(2,72,time_sec,DOGS102x6_DRAW_NORMAL);
  162.         Dogs102x6_stringDraw(3,36,clock_disp_hour,clk_hour_style);
  163.         Dogs102x6_stringDraw(3,54,clock_disp_min,clk_min_style);
  164.         Dogs102x6_stringDraw(3,72,clock_disp_sec,clk_sec_style);
  165. }

  166. void lcd_int(void)
  167. {
  168.         Board_init();                                              // GPIO initialization
  169.         Dogs102x6_init();                                          // initialize LCD
  170.         Dogs102x6_clearScreen();                                   // clear screen of LCD
  171.         Dogs102x6_backlightInit();                                 // initialize the backlight of LCD
  172.         Dogs102x6_setBacklight(20);                                // set up the backlight of LCD
  173.         __enable_interrupt();//enable globle interrupt
  174. }
  175. void time_1_int(void)
  176. {
  177.         TA1CCTL0 = CCIE;                          // CCR0 interrupt enabled
  178.         TA1CCR0 = 1045;                                                          //周期為1ms
  179.         TA1CTL = TASSEL_2 + MC_2 + TACLR;         // SMCLK ~= 1.045MHz, contmode, clear TAR
  180.         __enable_interrupt();//enable globle interrupt
  181. }
  182. void button_init(void)
  183. {
  184.         P1DIR &= ~(0x01<<7); //set P1.7 as input
  185.         P1REN |= (0x01<<7);  //enable resistor
  186.         P1OUT |= (0x01<<7);  //pull up

  187.         P2DIR &= ~(0x01<<2); //set P2.2 as input
  188.         P2REN |= (0x01<<2);  //enable resistor
  189.         P2OUT |= (0x01<<2);  //pull up
  190. }

  191. void key_scan(void)
  192. {
  193.         unsigned int ii;
  194.         if(!(P1IN & (0x01<<7)))
  195.         {
  196.                 for(ii=0;ii<10000;ii++);
  197.                 if(!(P1IN & (0x01<<7)))
  198.                 {
  199.                         //P8OUT ^= (0x01<<2);
  200.                         key_chose++;
  201.                         if(key_chose==6)
  202.                         {
  203.                                 key_chose=0;
  204.                         }
  205.                 }
  206.                 while(!(P1IN & (0x01<<7)));  //
  207.                 for(ii=0;ii<10000;ii++);     //
  208.                 while(!(P1IN & (0x01<<7)));
  209.         }
  210.         if(!(P2IN & (0x01<<2)))
  211.         {
  212.                 for(ii=0;ii<10000;ii++);
  213.                 if(!(P2IN & (0x01<<2)))
  214.                 {
  215.                         //P1OUT ^= (0x01<<0);
  216.                         if(key_chose==0)
  217.                         {
  218.                                 hour++;
  219.                                 if(hour>=24)
  220.                                 {
  221.                                         hour=0;
  222.                                 }
  223.                         }
  224.                         if(key_chose==1)
  225.                         {
  226.                                 min++;
  227.                                 if(min>=60)
  228.                                 {
  229.                                         min=0;
  230.                                 }
  231.                         }
  232.                         if(key_chose==2)
  233.                         {
  234.                                 clk_hour++;
  235.                                 if(clk_hour>=24)
  236.                                 {
  237.                                         clk_hour=0;
  238.                                 }
  239.                         }
  240.                         if(key_chose==3)
  241.                         {
  242.                                 clk_min++;
  243.                                 if(clk_min>=60)
  244.                                 {
  245.                                         clk_min=0;
  246.                                 }
  247.                         }
  248.                         if(key_chose==4)
  249.                         {
  250.                                 clk_sec++;
  251.                                 if(clk_sec>=60)
  252.                                 {
  253.                                         clk_sec=0;
  254.                                 }
  255.                         }
  256.                 }
  257.                 while(!(P2IN & (0x01<<2)));  //
  258.                 for(ii=0;ii<10000;ii++);     //
  259.                 while(!(P2IN & (0x01<<2)));
  260.         }
  261. }
  262. void clock_check(void)
  263. {
  264.         unsigned ii,jj;
  265.         if (clk_sec==sec)
  266.         {
  267.                 if(clk_min==min)
  268.                 {
  269.                         if(clk_hour==hour)
  270.                         {
  271.                                 for (ii==0;ii<30;ii++)
  272.                                 {
  273.                                         P8OUT ^= (0x01<<2);
  274.                                         for(jj=0;jj<10000;jj++);
  275.                                         for(jj=0;jj<10000;jj++);
  276.                                 }
  277.                         }
  278.                 }
  279.         }
  280. }
  281. void display_style(void)
  282. {
  283.            switch (key_chose)
  284.                         {
  285.                             case 0:
  286.                                                 {
  287.                                                 time_hour_style=1;
  288.                                                 time_min_style=0;
  289.                                                 clk_hour_style=0;
  290.                                                 clk_min_style=0;
  291.                                                 clk_sec_style=0;
  292.                                                 }
  293.                                     break;
  294.                             case 1:
  295.                                         {
  296.                                          time_hour_style=0;
  297.                                         time_min_style=1;
  298.                                         clk_hour_style=0;
  299.                                         clk_min_style=0;
  300.                                         clk_sec_style=0;
  301.                                         }
  302.                                     break;
  303.                             case 2:
  304.                                         {
  305.                                         time_hour_style=0;
  306.                                         time_min_style=0;
  307.                                         clk_hour_style=1;
  308.                                         clk_min_style=0;
  309.                                         clk_sec_style=0;
  310.                                         }
  311.                                     break;
  312.                             case 3:
  313.                                     {
  314.                                     time_hour_style=0;
  315.                                     time_min_style=0;
  316.                                     clk_hour_style=0;
  317.                                     clk_min_style=1;
  318.                                     clk_sec_style=0;
  319.                                     }
  320.                                     break;
  321.                             case 4:
  322.                                         {
  323.                                         time_hour_style=0;
  324.                                         time_min_style=0;
  325.                                         clk_hour_style=0;
  326.                                         clk_min_style=0;
  327.                                         clk_sec_style=1;
  328.                                         }
  329.                                     break;
  330.                             case 5:
  331.                                         {
  332.                                         time_hour_style=0;
  333.                                         time_min_style=0;
  334.                                         clk_hour_style=0;
  335.                                         clk_min_style=0;
  336.                                         clk_sec_style=0;
  337.                                         }
  338.                                         break;
  339.                             default: break;
  340.                         }
  341. }
  342. #pragma vector=TIMER1_A0_VECTOR
  343. __interrupt void TIMER1_A0_ISR(void)
  344. {
  345.         ++time_counter;
  346.         TA1CCR0 += 1045;
  347.         if (time_counter>=1000)
  348.         {
  349.                 time_counter = 0;
  350.             sec++;
  351.             //P1OUT ^= BIT0;
  352.             if(sec==60)
  353.             {
  354.                     sec=0;
  355.                     min++;
  356.                     if(min==60)
  357.                     {
  358.                             min=0;
  359.                             hour++;
  360.                             if(hour==24)
  361.                             {
  362.                                     hour=0;
  363.                             }
  364.                     }
  365.             }

  366.         }
  367. }
  368. #pragma vector=ADC12_VECTOR
  369. __interrupt void ADC12ISR (void)
  370. {
  371.     switch(__even_in_range(ADC12IV,34))
  372.   {
  373.   case  0: break;                           // Vector  0:  No interrupt
  374.   case  2: break;                           // Vector  2:  ADC overflow
  375.   case  4: break;                           // Vector  4:  ADC timing overflow
  376.   case  6: break;                           // Vector  6:  ADC12IFG0
  377.   case  8:                                      // Vector  8:  ADC12IFG1
  378.                   ADC_voltageData = ADC12MEM0;            // Move results, IFG is cleared
  379.                   tempData = ADC12MEM1;                   // Move results, IFG is cleared
  380.            //   __bic_SR_register_on_exit(LPM4_bits);   // Exit active CPU
  381.               break;
  382.   case 10: break;                           // Vector 10:  ADC12IFG2
  383.   case 12:break;                            // Vector 12:  ADC12IFG3
  384.   case 14: break;                           // Vector 14:  ADC12IFG4
  385.   case 16: break;                           // Vector 16:  ADC12IFG5
  386.   case 18: break;                           // Vector 18:  ADC12IFG6
  387.   case 20: break;                           // Vector 20:  ADC12IFG7
  388.   case 22: break;                           // Vector 22:  ADC12IFG8
  389.   case 24: break;                           // Vector 24:  ADC12IFG9
  390.   case 26: break;                           // Vector 26:  ADC12IFG10
  391.   case 28: break;                           // Vector 28:  ADC12IFG11
  392.   case 30: break;                           // Vector 30:  ADC12IFG12
  393.   case 32: break;                           // Vector 32:  ADC12IFG13
  394.   case 34: break;                           // Vector 34:  ADC12IFG14
  395.   default: break;
  396.   }
  397. }
復制代碼

所有資料51hei提供下載:
基于MSP430F5529的實時鬧鐘程序代碼,基于TI公司MSP430F5529單片機學習板.rar (2.8 KB, 下載次數: 12)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲二区视频 | 精品入口麻豆88视频 | 欧美最猛性xxxxx亚洲精品 | 午夜在线| 欧美久久久久久久 | 四虎影视在线 | 日韩激情在线 | 日韩中文一区二区三区 | 日韩欧美亚洲 | 国产成人精品久久二区二区91 | 国产色黄| 久久久99精品免费观看 | www.男人天堂.com| 欧美888 | 国产精品久久久久久久久久久久冷 | 久久久国产一区二区三区四区小说 | 91超碰caoporn97人人 | 免费国产视频 | 天堂成人av| 国产日韩精品一区 | 成人av在线播放 | 国产在线观看一区 | 在线视频一区二区三区 | 欧美一级特黄aaa大片在线观看 | 中文字幕在线精品 | 精品美女久久久 | 欧美亚洲视频 | 青青青伊人| 狠狠爱综合 | 国产精品日本一区二区在线播放 | 先锋资源在线 | 盗摄精品av一区二区三区 | 97伦理| 久久久久久久成人 | 国产成人一区二区三区 | 日韩av资源站| 中文字幕一区二区三区乱码在线 | 国产精品久久久久999 | www日本高清 | 麻豆视频在线免费看 | 中文字幕在线一区二区三区 |