<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機可控0-30V可調(diào)電源

          單片機可控0-30V可調(diào)電源

          作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏
          /******************************************************************************/
          //延時函數(shù)
          void delay_1us(void) // 1us延時函數(shù)
          {
          asm("nop");
          }
          void delay_nus(uchar n) // N us延時函數(shù)
          {
          for(;n>0;n--)
          {
          delay_1us();
          }
          }
          // 內(nèi)部晶振頻率為8MHz
          void delay_1ms(void) // 1ms延時函數(shù)
          {
          uint i;
          for(i=1142;i>0;i--); // 8*143-2
          }
          void delay_nms(uchar n) // N ms延時函數(shù)
          {
          for(;n>0;n--)
          {
          asm("wdr"); // 喂狗
          delay_1ms();
          }
          }
          /*******************************************************************************
          函數(shù)名:mcu_init()
          作用:I/O初始化,PWM初始化
          輸入:無
          返回值:無
          *******************************************************************************/
          void mcu_init(void)
          {
          SREG |= 0x80; // 全局中斷使能
          DDRB = 0x0f; // PB口全部為輸出
          PORTB = 0x04; // 初始化PB口
          DDRA = 0xc7; // PA3,PA4,PA5為輸入
          PORTA = 0xc7; // 初始化PA口
          CLKPR = 0x80; // CLKPCE=1 修改系統(tǒng)時鐘分頻使能
          CLKPR = 0x00; // 1分頻
          TCCR1B = 0x00; // TIMER1停止計數(shù)
          TCNT1H = 0x40; // 初值高8位
          TCNT1L = 0x00; // 初值低8位
          TIMSK1_Bit0 = 1; // TIMER1使能
          D1_OFF;
          D2_OFF;
          D3_OFF;
          D4_OFF;
          D5_OFF;
          D6_OFF;
          TCCR1B = 0x01; // TIMER1開始計數(shù),1分頻
          }
          /*******************************************************************************
          函數(shù)名:adc_init()
          作用:adc初始化
          輸入:無
          返回值:無
          *******************************************************************************/
          void adc_init(void)
          {
          ADCSRA = 0x00; // 設(shè)置前,先關(guān)閉ADC
          ADMUX = 0x00; // 選擇外部VCC為基準,ADC0通道
          ADCSRB = 0x00; // AD轉(zhuǎn)換結(jié)果左對齊,(10位)
          // 使能ADC,啟動ADC單次轉(zhuǎn)換,8分頻
          ADCSRA = 0xc3;
          }
          /*******************************************************************************
          函數(shù)名:wdt_init()
          作用:看門狗初始化
          輸入:無
          返回值:無
          *******************************************************************************/
          void wdt_init(void)
          {
          asm("wdr"); // clr wdt
          WDTCSR=0x1f;
          WDTCSR=0x0f; // enable wdt,clk = 256,2S
          }
          /*******************************************************************************
          函數(shù)名:adc_get(uchar adc_ch)
          作用:啟動AD轉(zhuǎn)換,并返回轉(zhuǎn)換值
          輸入:adc_ch (AD轉(zhuǎn)換通道)
          返回值:adddata
          *******************************************************************************/
          uint adc_get(uchar adc_ch)
          {
          uint addata=0; // AD轉(zhuǎn)化初始數(shù)據(jù)為0
          uchar i;
          asm("wdr"); // 喂狗
          ADMUX = adc_ch; // adc_ch為ADC通道選擇
          for(i=10;i>0;i--)
          {
          ADCSRA_Bit6 = 1; // 啟動ADC轉(zhuǎn)換
          while((ADCSRA & 0x10) == 0); // 等待轉(zhuǎn)換結(jié)束,ADIF=1
          }
          addata=ADCL; // 讀取低8位數(shù)據(jù)
          addata+=ADCH*256; // 讀取高2位數(shù)據(jù)
          return addata; // 返回8位數(shù)據(jù)
          }
          /*******************************************************************************
          函數(shù)名: Vout_adc_get()
          作用:電池電壓檢測,檢測20次求平均值
          輸入:無
          返回值:無
          *******************************************************************************/
          void Vout_adc_get(void)
          {
          uchar n=0;
          ad_Vout_result=0;
          asm("wdr"); // 喂狗
          for(n=0;n<10;n++)
          {
          asm("wdr"); // 喂狗
          ad_Vout_result += adc_get(ad_Vout_flag);
          }
          ad_Vout_result = ad_Vout_result/10;
          }
          /*******************************************************************************
          函數(shù)名: Temp_adc_get()
          作用:電池溫度檢測,檢測20次求平均值
          輸入:無
          返回值:無
          *******************************************************************************/
          void Temp_adc_get(void)
          {
          uchar n=0;
          ad_Temp_result=0;
          asm("wdr"); // 喂狗
          for(n=0;n<10;n++)
          {
          asm("wdr"); // 喂狗
          ad_Temp_result += adc_get(ad_Temp_flag);
          }
          ad_Temp_result = ad_Temp_result/10;
          }
          /*******************************************************************************
          函數(shù)名: Iout_adc_get()
          作用:電流檢測,檢測20次求平均值
          輸入:無
          返回值:無
          *******************************************************************************/
          void Iout_adc_get(void)
          {
          uchar n=0;
          ad_Iout_result=0;
          asm("wdr"); // 喂狗
          for(n=0;n<10;n++)
          {
          asm("wdr"); // 喂狗
          ad_Iout_result += adc_get(ad_Iout_flag);
          }
          ad_Iout_result = ad_Iout_result/10;
          }
          /*******************************************************************************
          函數(shù)名:Send_164_data()
          作用:送164數(shù)據(jù)
          輸入:disp_data
          返回值:無
          *******************************************************************************/
          void Send_164_data(uchar disp_data)
          {
          uchar i;
          asm("wdr"); // 喂狗
          CLK164_OFF;
          for(i=0;i<8;i++)
          {
          asm("wdr"); // 喂狗
          if(disp_data&0x80)
          {
          DATA164_ON;
          }
          else
          {
          DATA164_OFF;
          }
          CLK164_ON;
          disp_data<<=1;
          CLK164_OFF;
          }
          }
          /*******************************************************************************
          函數(shù)名:disp_data_adc()
          作用:顯示數(shù)據(jù)處理
          輸入:無
          返回值:無
          *******************************************************************************/
          void disp_data_adc(void)
          {
          Vout_adc_get();
          Vout_disp = ad_Vout_result * 50;
          Vout_disp = Vout_disp / 128;
          Iout_adc_get();
          Iout_disp = ad_Iout_result * 50;
          Iout_disp = Iout_disp / 102;
          Iout_adj = (Vout_disp * 10) / 75;
          if((Iout_disp - Iout_adj) < 0x0fff)
          {
          Iout_disp = Iout_disp - Iout_adj;
          }
          else
          {
          Iout_disp = 0;
          }
          }
          /*******************************************************************************
          函數(shù)名:delay()
          作用:延時。。
          輸入:無
          返回值:無
          *******************************************************************************/
          void delay(void)
          {
          if(adc_get_flag == 0)
          {
          disp_data_adc();
          adc_get_flag=1;
          }
          else
          {
          delay_nms(20);
          }
          }
          /*******************************************************************************
          函數(shù)名:display_led()
          作用:數(shù)碼管顯示
          輸入:無
          返回值:無
          *******************************************************************************/
          void display_led(void)
          {
          asm("wdr"); // 喂狗
          Send_164_data(disp_led[Vout_disp / 100]);
          D1_ON;
          delay();
          D1_OFF;
          Send_164_data(disp_led[(Vout_disp % 100) / 10] - 0x08);
          D2_ON;
          delay();
          D2_OFF;
          Send_164_data(disp_led[(Vout_disp % 100) % 10]);
          D3_ON;
          delay();
          D3_OFF;
          Send_164_data(disp_led[Iout_disp / 100] - 0x08);
          D4_ON;
          delay();
          D4_OFF;
          Send_164_data(disp_led[(Iout_disp % 100) / 10]);
          D5_ON;
          delay();
          D5_OFF;
          Send_164_data(disp_led[(Iout_disp % 100) % 10]);
          D6_ON;
          delay();
          D6_OFF;
          }
          /*******************************************************************************
          函數(shù)名: time1_ovf()
          作用:TIMER1定時器中斷服務(wù)程序,8M 50ms中斷一次,4M 25ms中斷一次
          輸入:無
          返回值:無
          *******************************************************************************/
          #pragma vector=TIM1_OVF_vect
          __interrupt void time1_ovf(void)
          {
          TCNT1H = 0x40;
          TCNT1L = 0x00;
          asm("wdr"); // 喂狗
          time_cnt1++;
          if(time_cnt1==50) //
          {
          asm("wdr"); // 喂狗
          time_cnt1=0;
          adc_get_flag=0;
          }
          }
          /*******************************************************************************
          主函數(shù)
          *******************************************************************************/
          void main(void)
          {
          mcu_init(); // 單片機初始化
          adc_init(); // AD轉(zhuǎn)換初始化
          wdt_init(); // 看門狗初始化
          while(1)
          {
          display_led();
          }
          }

          MCU型號: AT Tiny24
          功能說明:0-30V 可調(diào)電源 顯示電壓及電流
          引腳說明;PA0/ADC0--D1 電壓
          PA1/ADC1--D2 電壓
          PA2/ADC2--D3 電壓
          PA3/ADC3--RT
          PA4/ADC4--Vout
          PA5/ADC5--Iout
          PA6/ADC6--D5 電流
          PA7/ADC7--D6 電流
          PB2/ --D4 電流
          PB3/RESET--FAN
          PB1 --74HC164 DATA
          PB0 --74HC164 SCK
          上一頁 1 2 下一頁

          關(guān)鍵詞: 單片機可控可調(diào)電

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();