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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STC12C2052AD單片機(jī)做的手機(jī)電池充電器程序

          STC12C2052AD單片機(jī)做的手機(jī)電池充電器程序

          作者: 時(shí)間:2013-05-11 來(lái)源:網(wǎng)絡(luò) 收藏

          例如:
          要設(shè)置P1.1為 AD 輸入口
          則 P1M0=0X02 ;
          P1M1=0X02; 開(kāi)漏即可
          當(dāng)不用AD時(shí),最好 關(guān)閉ADC電源 ,恢復(fù)為IO口狀態(tài)
          ********************************/
          P1M0=0x06;//這兩個(gè)寄存器用來(lái)設(shè)置 P1口四種狀態(tài),每一位對(duì)應(yīng)一個(gè)P1引腳 ,按狀態(tài)組合操作
          P1M1=0x06;//設(shè)置P1.1 P1.2開(kāi)漏狀態(tài)

          }

          // AD轉(zhuǎn)換程序
          void ADC()
          {
          float V0,V1;

          ADC_DATA = 0; //清除結(jié)果

          ADC_CONTR = 0x60; //轉(zhuǎn)換速度設(shè)置 0x60 最快速度

          ADC_CONTR = 0xE0; //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位

          ADC_CONTR |= 0x01; //選擇 A/D 當(dāng)前通道 P1.1
          delayms(1); //使輸入電壓達(dá)到穩(wěn)定
          ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 啟動(dòng)A/D轉(zhuǎn)換,

          while(!(ADC_CONTR 0x10)); //!的優(yōu)先級(jí)比高太多了
          //養(yǎng)成經(jīng)常加括號(hào)的習(xí)慣 ,沒(méi)壞處 。也不浪費(fèi)速度
          /***************
          這里while 不能改成while(ADC_CONTR 0x10==0) ;就錯(cuò)誤了,因?yàn)閮?yōu)先級(jí) ==比高 ,所以要加括號(hào)
          while( (ADC_CONTR 0x10) ==0) 或者非一下 while(!(ADC_CONTR 0x10)); //!的優(yōu)先級(jí)比高太多了
          while( (ADC_CONTR 0x10) ==1)注意 if while這類(lèi)判斷邏輯真假的語(yǔ)句,用“==1”時(shí) 注意前面是否是后面的1,
          后面的1可是0x01啊,前面要是0x02===1,這是不會(huì)成立的。但是去掉后面的==1就可以用了。多此一舉反而帶來(lái)麻煩
          *****************************/
          ADC_CONTR = 0xE7; //1111,0111 清 ADC_FLAG 位, 關(guān)閉A/D轉(zhuǎn)換,

          V0= ADC_DATA; //返回 A/D 10 位轉(zhuǎn)換結(jié)果


          ADC_DATA = 0; //清除結(jié)果

          ADC_CONTR = 0x60; //轉(zhuǎn)換速度設(shè)置 0x60 最快速度

          ADC_CONTR = 0xe0; //1110,0000 清 ADC_FLAG, ADC_START 位和低 3 位
          ADC_CONTR =0xe2;
          // ADC_CONTR |= 0x02; //選擇 A/D 當(dāng)前通道 P1.2
          delayms(1); //使輸入電壓達(dá)到穩(wěn)定
          ADC_CONTR = 0xea;
          // ADC_CONTR |= 0x08; //0000,1000 令 ADCS = 1, 啟動(dòng)A/D轉(zhuǎn)換,

          while(!(ADC_CONTR 0x10)); //!的優(yōu)先級(jí)比高太多了
          //養(yǎng)成經(jīng)常加括號(hào)的習(xí)慣 ,沒(méi)壞處 。也不浪費(fèi)速度

          ADC_CONTR =0xe2;
          //ADC_CONTR = 0xE7; //1111,0111 清 ADC_FLAG 位, 關(guān)閉A/D轉(zhuǎn)換,
          V1= ADC_DATA; //返回 A/D 10 位轉(zhuǎn)換結(jié)果

          voltage=V1/V0*Uref*3.000;

          if( voltage>4.180)
          {
          M=0;//過(guò)壓燈
          N=1;
          LED=1;
          timeL=timeL+0x08;
          timeH=timeH+0x08;
          START=1;
          LED=0;
          }
          if(voltage3.601)
          {
          N=0;//欠壓燈
          M=1;
          LED=1;
          timeL=timeL-0x01;
          timeH=timeH-0x01;
          START=1;
          }

          if(voltage>=3.601voltage=4.155)
          {
          M=1;
          N=1;
          LED=1;
          }

          if(voltage>=4.110voltage=4.155)
          {
          timeL = 0xa2; //PWM模式時(shí)他倆用來(lái)控制占空比
          timeH = 0xa2; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出)
          START=1;
          LED=0;
          }

          if(voltage>=4.155voltage=4.180)
          {
          timeL = 0xb2; //PWM模式時(shí)他倆用來(lái)控制占空比
          timeH = 0xb2; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出)
          START=1;
          LED=0;
          }

          /**************************
          if( voltage3.772(timeL!=0xf0))
          {
          timeL = 0xf0; //PWM模式時(shí)他倆用來(lái)控制占空比
          timeH = 0xf0; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出)
          START=1;
          }

          if( voltage4.052voltage>3.772(timeL!=0xf2))
          {
          timeL = 0xf2; //PWM模式時(shí)他倆用來(lái)控制占空比
          timeH = 0xf2; //0xc0 64/256=25% 占空比(溢出) 高電平時(shí)間
          START=1;
          M=1;
          N=1;
          LED=1;
          }

          if( voltage>4.052voltage4.167(timeL!=0xfd))
          {
          timeL = 0xfd; //PWM模式時(shí)他倆用來(lái)控制占空比
          timeH = 0xfd; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出)
          START=1;
          M=1;
          N=1;
          LED=1;
          }

          if( voltage>4.167voltage4.208(timeL!=0x60))
          {
          timeL = 0x80; //PWM模式時(shí)他倆用來(lái)控制占空比
          timeH = 0x80; //0xff-0xc0=0x3f 64/256=25% 占空比(溢出)
          START=1;
          M=1;
          N=1;
          LED=1;
          }

          三極管相關(guān)文章:三極管放大電路


          pwm相關(guān)文章:pwm是什么


          手機(jī)充電器相關(guān)文章:手機(jī)充電器原理


          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();