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

標題: 2015全國電子設計大賽A題實物100分 [打印本頁]

作者: 小盆友    時間: 2017-8-7 20:56
標題: 2015全國電子設計大賽A題實物100分
內含輔助電路  功率電路  控制電路
/*2015全國電子設計大賽A題作品程序*/
#include <STC12C5A60S2.H>
#include <intrins.h>              /*use _nop_() function*/
#define uchar unsigned char
#define uint unsigned int
#define ADC_FLAG      0X10

/*****************************************
端口功能設定
*****************************************/
sbit PWM_1                =        P1^4;       //PWM1_Boost/Buck
sbit SD_1                  =        P1^3;       //SD1_Boost_Buck
sbit Key_1                =        P2^1;       //Key_1
sbit Key_2                =        P2^2;       //Key_2
sbit Key_3                =        P2^3;       //Key_3

uint ADC_value;
uchar PWM_temp=2;
uchar last_key;                                //按鍵變量
uchar channel=0;                        //第一通道
uchar Caes=0;                                //菜單
uint  OUT_Current=300;
uint  Battery_voltage;                //輸入電壓        
uint  Boost_voltage;                //Boost電壓                 
uint  Boost_Buck_current;        //Buck_Boost電流8位
uint  O_current;                        //輸出電流
uint  A_value=90;
bit lock=0;                           //PWM輸出鎖定
bit ADC_ready=0;                   //ADC完畢
bit K=0;
bit Charge=0;
void delay();
void Key_0_();
void Key_1_();
void Key_2_();
void Key_3_();
void init_pca();
void init_timer();
/**********************************************************
函數說明: 延時程序
**********************************************************/
void delay(uchar t)
{
        uint j;
        uchar i;
        for(i=0;i<t;i++)
                for(j=0;j<1000;j++);
}
/**********************************************************
函數說明: PWM初始化
**********************************************************/
void init_pwm()
{
  CCON = 0;
        CL = 0;
        CH = 0;
        CMOD = 0X08; //0X08:43KHZ // 0X02,22KHZ // 0X0A,10KHZ //
        CCAPM1        =0x42;//8位PWM輸出,無中斷
        CCAP1L         =CCAP1H =250;//初始化spwm輸出的占空比
        CR=1;
}
/**********************************************************
函數說明: 中斷 始化函數
**********************************************************/
void InitADC()
{
        P1M1=0x47;
        P1M0=0x00;
        P1ASF=0X47;                    //選擇ADC通道0126
        ADC_RES=0;
        ADC_CONTR=0X88;                   //1110 0000           E8 開電源,最高速
        EA=1;
        EADC=1;
}
/**************************************
1602液晶
**************************************/
sbit RS = P2^5;               
sbit RW = P2^6;
sbit E  = P2^7;
/**************************************
短延時
**************************************/
void delay5ms()   
{
    uchar i,v,k;
    for(i=1;i>0;i--)
        for(v=168;v>0;v--)
            for(k=22;k>0;k--);
}
/**************************************
寫指令
**************************************/
void lcd_Write_com(uchar com)         
{
        RS=0;                        //定義指令寄存器
        RW=0;                                  //寫允許
        P0=com;                                          //寫指令
        delay5ms();        E=1;                //片選端上拉
        delay5ms();        E=0;                //下降沿鎖存
}
/**************************************
寫數據
**************************************/
void lcd_write_date(uchar date)        
{
        RS=1;                                        //定義數據寄存器
        RW=0;                                        //寫允許
        P0=date;                                //寫數據
        delay5ms();        E=1;                //片選端上拉
        delay5ms();        E=0;                //下降沿鎖存
}
/**************************************
顯示程序
**************************************/
void dis_lcd1602(uchar x,uchar y,uchar dat)
{
        uchar add;
        if(y==1)         add=(0x80+x);
        if(y==2)         add=(0xc0+x);
        lcd_Write_com(add);                //寫指令
        lcd_write_date(dat);        //寫數據
}  
/**************************************
液晶初始化
**************************************/
void lcd1602_init()
{
        lcd_Write_com(0x38);        //設置8位格式,2行,5*7
        lcd_Write_com(0x01);        //清屏
        lcd_Write_com(0x0c);        //整體顯示,關光標,不閃爍
        lcd_Write_com(0x06);        //設定輸入方式,增量不移位
        lcd_Write_com(0x80);        //初始坐標
}
/**************************************
液晶顯示漢字程序
**************************************/
void hz_lcdDis(uchar x,uchar y,uchar *p) //漢字顯示
{
   uchar i=0,temp;
   if(x)temp = 0x40;   else temp = 0;
   for(i=y;*p!='\0';i++,p++)
   {
                lcd_Write_com(i|0x80+temp);
                lcd_write_date(*p);
                delay5ms();                          
   }
}
/**************************************
液晶顯示數字程序
**************************************/
void  num_lcdDis(uchar X,uchar Y,uint num,uchar n)        
{
        uint i=0,temp,hang;   
        n +=1;
           if(X)hang = 0x40;else hang = 0;
           for(i=(n-1);i>0;i--)
    {           
                  lcd_Write_com((i+Y-1)|0x80+hang);          //從個位開始顯示
                  temp = num%10+0x30;
                  lcd_write_date(temp);        
                 delay5ms();
                  num/=10;                                         
        }        
}
/**********************************************************
函數說明: 平均濾波函數
**********************************************************/
#define N 50
uint Filter(uint adc_data)
{
        uint value=0;
        uchar count,count_ADC;
        for(count=0;count<N;count++)
        {
                for(count_ADC=0;count_ADC<3;count_ADC++)
                {
                        while(!ADC_ready){}
                        ADC_ready=0;
                }
                value+=adc_data;         
        }
        return (value);
}
/**********************************************************
函數說明:按鍵延時防抖動
P3^5       Key_1
P3^6       Key_2
P3^7       Key_3

**********************************************************/
void key_scan()
{
        uchar temp;
        temp = P2&0x0F;
        if(temp != 0x0F)
        {
                delay(10);
                temp = P2&0x0F;
                if(temp!= 0x0F)
                {
                        switch(temp)
                        {
                                case 0x0E: Key_0_();        break;        //20
                                case 0x0D: Key_1_();        break;        //21
                                case 0x0B: Key_2_();        break;        //22
                                case 0x07: Key_3_();        break;        //23
                                default:break;
                        }
                }
        }
//        last_key = temp;
}

/**********************************************************
函數說明: 按鍵程序
**********************************************************/
void Key_0_()
{
  Charge=~Charge;
        if(Charge)         {CCAP1L         =CCAP1H =128;  SD_1=1;        hz_lcdDis(0,8,"d");}        
        else              {SD_1=0;  hz_lcdDis(0,8,"c");}        

}
void Key_1_()
{
        if(K)        {SD_1=0;        lock=1;                CCAP1L=CCAP1H =128;        hz_lcdDis(0,8,"g");        }  //boost的軟啟動,防止瞬間沖擊電流過大,影響后級穩定性
        else         {SD_1=1;        lock=0;        hz_lcdDis(0,8,"k");        }
        K=~K;
}
void Key_2_()
{
        OUT_Current=OUT_Current+15;
        if(OUT_Current>600)OUT_Current=600;        
}
void Key_3_()
{
        OUT_Current=OUT_Current-15;        
        if(OUT_Current<150)OUT_Current=150;
}
/**********************************************************
函數說明: 主函數
**********************************************************/
void main(void)
{
        uint U1,U2,I1,S;
        SD_1=0;
        lcd1602_init();
        hz_lcdDis(0,4,"Welcome!");
        init_pwm();
        InitADC();
        delay(250);        
//        delay(250);
        EA=1;//開總中斷
        lcd_Write_com(0x01);        //清屏
//        SD_1=1;
        hz_lcdDis(0,0,"IN=  . V S= .  A");
        hz_lcdDis(1,0,"OU=  . V I= .  A");
        while(1)//主循環
        {               
                U1=Filter(Boost_voltage)/92;        //輸入電壓  1:10采樣電阻                 93,
                U2=Filter(Battery_voltage)/92;    //輸出電壓  1:10采樣電阻        93
                I1=Filter(O_current)/150;       //輸出電流  
//                if(I1>1)                I1=I1-1;//輸出電流顯示校準
                if(U2>242)               
                        {SD_1=0;        lock=1;                CCAP1L         =CCAP1H =128;        hz_lcdDis(0,8,"P");        }
                num_lcdDis(0,3,U1/10,2);
                num_lcdDis(0,6,U1%10,1);        
                num_lcdDis(1,3,U2/10,2);
                num_lcdDis(1,6,U2%10,1);
……………………


DC-DC輔助電源.~(1).SchDoc.Zip

23.51 KB, 下載次數: 30, 下載積分: 黑幣 -5

功率主板.~(1).SchDoc.Zip

24.08 KB, 下載次數: 31, 下載積分: 黑幣 -5

控制電路.~(1).SchDoc.Zip

21.28 KB, 下載次數: 37, 下載積分: 黑幣 -5


作者: Yyc53    時間: 2017-12-22 19:03
能發一份完整的程序嗎
郵箱 1090911613@qq.com
謝謝!
作者: 藍色海陽    時間: 2017-12-27 00:27
能發一份完整的程序嗎
郵箱 89707600@qq.com
謝謝!
作者: 蘇大叔大    時間: 2019-2-20 12:06
我在電源網上看到一個功率板和你相同的貼是你發的嗎
作者: 蘇大叔大    時間: 2019-2-20 12:07
求完整代碼呀 學習參考 郵箱 1471281414@qq.com

作者: zhaoy    時間: 2019-3-6 08:57
非常棒
作者: weiyunman666    時間: 2019-5-24 00:54
麻煩您發一份完整的程序。謝謝姐姐。quping987654@163.com
作者: viki_zhao    時間: 2019-7-20 11:48
求完整程序996285926@qq.com 謝謝大神
作者: 喜歡可樂的曲線    時間: 2019-7-21 12:13
求完整程序,謝謝大佬。郵箱1370804305@qq.com
作者: 戲如人生94    時間: 2019-7-23 15:44
求完整程序1545636103@qq.com 謝謝大神
作者: Yevette    時間: 2019-7-23 20:40
感謝樓主分享
作者: Luvmxl    時間: 2020-1-7 11:50
謝謝樓主分享




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91久久精品一区二区二区 | 日韩福利一区 | 午夜影院网站 | 美女拍拍拍网站 | 日韩av成人在线观看 | 日韩免费成人av | 中文字幕一区二区三区四区 | 9191av| 神马九九 | 欧美在线视频二区 | 亚洲精品一区二区在线 | 涩涩视频在线观看 | 国产精品久久一区二区三区 | 亚洲一二三区精品 | 成人福利视频网站 | 999国产视频 | 久久99精品久久久 | 综合二区 | 欧美日韩在线视频一区二区 | 人人亚洲| 日日天天| 欧美综合网 | 日本高清不卡视频 | 天天综合网7799精品 | 欧美激情国产日韩精品一区18 | 不卡av电影在线播放 | 免费黄色在线观看 | 狠狠操狠狠操 | 国产精品免费一区二区三区四区 | 日韩毛片在线免费观看 | 亚洲国产精品一区 | 综合久久综合久久 | 国产精品国产a级 | 国产精品免费播放 | 欧美 日韩 中文 | 天天摸天天干 | 黑人巨大精品欧美一区二区免费 | 伊人伊人伊人 | 成人免费一级视频 | 午夜精品久久久久久久星辰影院 | 国产精品久久久乱弄 |