日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

51機(jī)做逆變器程序

公布程序如下:望高手共同探討,此程序 無保護(hù),無反饋,軟啟動部分不知道正常不(還未試驗(yàn)),其他部分已做試驗(yàn)正常。

高手過路時望留下腳印。

#include    //晶振為19.2M//
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "absacc.h"
#include "intrins.h"
#include "string.h"
unsigned int u_out,u_in;
unsigned int m,pwm_1,pwm_2;
unsigned char k=0,i,j,pwm1,pwm2;
unsigned char code pwm[31]={11,32,52,73,92,111,129,145,160,173,185,195,203,209,214,216,214,
209,203,195,185,173,160,145,129,111,92,73,52,32,11};
void delay(unsigned int time)
{
    unsigned int a=0,b;
    while(a

     {
          a++;
         for(b=0;b<60000;b++);
   }
}

// PWM初始化//
void pwm_init()
{
   CMOD=0X00; //設(shè)置PCA計(jì)數(shù)器工作頻率為F/12//
   CCON=0X00; //清零計(jì)數(shù)器和溢出標(biāo)志//
   CL=0X00;   //計(jì)數(shù)器低8位和高8位全部清零//
   CH=0X00;
   CCAPM0=0X42;  //設(shè)置PWM0口//
   CCAPM1=0X42;
   CCAPM2=0X42;
   CCAPM3=0X42;
   CCAP0L=0X00;
   CCAP0H=0X00;
   CCAP1L=0X00;
   CCAP1H=0X00;
   CCAP2L=0X00;
   CCAP2H=0X00;
   CCAP3L=0X00;
   CCAP3H=0X00;
   CR=1;//開啟PCA計(jì)數(shù)器//
 
}
 //定時器中斷函數(shù)//
 void time_init()  //定時器初始化//
 {
  TMOD=0X00;//定時器0工作在模式0//
  ET0=1; //開定時器0中斷//
  TH0=0XEF;
  TL0=0X1F;   //定時器初值為8192-512   32個點(diǎn)晶振19.2M//
  TR0=1;//開啟定時器0//
 }
void int_time0(void) interrupt 1
{
  TH0=0XEF;
  TL0=0X1F;//重裝計(jì)數(shù)值//
  TR0=1;
  CCAP0H=pwm1;
  CCAP2H=pwm1;
  CCAP1H=pwm2; //裝入脈寬值//
  CCAP3H=pwm2;
  k++;
    if(k<31)
  {             i=k;  
                pwm_1=m*pwm[i]/216;
    pwm1=(unsigned char)pwm_1;
                pwm2=0;
    }
  else if(k<62) 
  {             j=k-31;
                pwm1=0;
      pwm_2=m*pwm[j]/216;
    pwm2=(unsigned char)pwm_2;
    }
  else 
    {
               k=0;
      i=k;
               pwm_1=m*pwm[i]/216;
      pwm1=(unsigned char)pwm_1;
      pwm2=0;
      }           
   }
   //軟啟動//
 void soft_start(void)
 {
 m=0;
do{

  m=m+27;
   delay(10);
 }
 while(m<210);   
 }
 void main()
   {
     pwm_init();
  time_init();
  EA=1;
  soft_start();
  m=216;
  while(1);
  }

全部回復(fù)(99)
正序查看
倒序查看
tracy188
LV.5
2
2010-11-03 20:59
學(xué)習(xí)!
0
回復(fù)
2010-11-04 11:27
這個逆變器用在哪里的啊,為什么沒有做反饋呢?
0
回復(fù)
2010-11-04 18:43
@yhl200303041s
這個逆變器用在哪里的啊,為什么沒有做反饋呢?
打算做反饋的,只是完全在自己DIY程序。還沒做到那步。今天測試軟啟動已經(jīng)正常
0
回復(fù)
avrmcu
LV.4
5
2010-11-13 21:19
@重慶醬油仔
打算做反饋的,只是完全在自己DIY程序。還沒做到那步。今天測試軟啟動已經(jīng)正常
你用的是51的啥芯片?為何要用19.2MHZ的晶振?
0
回復(fù)
tzqtang
LV.4
6
2010-11-14 11:44

你好! 我復(fù)制你的程序編譯時沒有通過編譯器提示如下:

TT.C(65): 錯誤 C202: 'CCAP3H': undefined identifier
TT.C(69): 錯誤 C193: '*': bad operand type
TT.C(76): 錯誤 C193: '*': bad operand type
TT.C(83): 錯誤 C193: '*': bad operand type
TT.C(103): 錯誤 C202: 'EA': undefined identifier
目標(biāo)沒產(chǎn)生

0
回復(fù)
2010-11-14 14:08
@tzqtang
你好!我復(fù)制你的程序編譯時沒有通過編譯器提示如下:TT.C(65):錯誤C202:'CCAP3H':undefinedidentifierTT.C(69):錯誤C193:'*':badoperandtypeTT.C(76):錯誤C193:'*':badoperandtypeTT.C(83):錯誤C193:'*':badoperandtypeTT.C(103):錯誤C202:'EA':undefinedidentifier目標(biāo)沒產(chǎn)生

宏晶科技的,1T的51增強(qiáng)型。要單獨(dú)復(fù)制一個STC的頭文件STC12C5410AD.H到編譯器里,這幾天被流放到戈壁了,回復(fù)有點(diǎn)晚抱歉

0
回復(fù)
tzqtang
LV.4
8
2010-11-14 15:02
@重慶醬油仔
宏晶科技的,1T的51增強(qiáng)型。要單獨(dú)復(fù)制一個STC的頭文件STC12C5410AD.H到編譯器里,這幾天被流放到戈壁了,回復(fù)有點(diǎn)晚抱歉

能加QQ聊嗎?946695685

0
回復(fù)
2010-11-16 14:17

你好!做幾路A/D轉(zhuǎn)換就能起到電壓電流保護(hù),也能取到反饋的效果。不知你做的逆變是多大功率的!

 

0
回復(fù)
2010-11-16 18:57
@zhengjiefeng09
你好!做幾路A/D轉(zhuǎn)換就能起到電壓電流保護(hù),也能取到反饋的效果。不知你做的逆變是多大功率的! 

 

0
回復(fù)
631405972
LV.3
11
2010-11-16 23:06
支持,這樣的貼子才有學(xué)習(xí)價值,這樣的工程師才是真正的工程師。鄙視那些將程序?qū)戇M(jìn)單片機(jī),然后吹成自已全新開發(fā)一樣的人,搞的神神密密,真正有料的話,就像樓主一樣,程序是好是壞拉出來溜溜。
0
回復(fù)
631405972
LV.3
12
2010-11-16 23:09
@zhengjiefeng09
你好!做幾路A/D轉(zhuǎn)換就能起到電壓電流保護(hù),也能取到反饋的效果。不知你做的逆變是多大功率的! 
請問,做成閉環(huán)穩(wěn)壓,反饋要怎樣計(jì)算啊并寫入程序啊,能說說嗎?很想學(xué)習(xí)
0
回復(fù)
2010-11-18 07:26
@631405972
支持,這樣的貼子才有學(xué)習(xí)價值,這樣的工程師才是真正的工程師。鄙視那些將程序?qū)戇M(jìn)單片機(jī),然后吹成自已全新開發(fā)一樣的人,搞的神神密密,真正有料的話,就像樓主一樣,程序是好是壞拉出來溜溜。
抱歉,閉環(huán)還沒開始做。初步設(shè)想是通過AD采樣值,來調(diào)整程序中的M值,從而實(shí)現(xiàn)閉環(huán)。
0
回復(fù)
631405972
LV.3
14
2010-11-20 21:42
@重慶醬油仔
抱歉,閉環(huán)還沒開始做。初步設(shè)想是通過AD采樣值,來調(diào)整程序中的M值,從而實(shí)現(xiàn)閉環(huán)。

大師有時間搞搞,給小弟們指點(diǎn)指點(diǎn),哪怕是不成熟,給個思路也是不錯的啊。想學(xué)習(xí)的要頂上去??!

0
回復(fù)
631405972
LV.3
15
2010-11-20 21:44
@zhengjiefeng09
你好!做幾路A/D轉(zhuǎn)換就能起到電壓電流保護(hù),也能取到反饋的效果。不知你做的逆變是多大功率的! 
能給演示一下如何做反饋后修正占空比,一直比較糾結(jié),這種修正在什么地方做啊,不是取表的嗎?
0
回復(fù)
howlong2010
LV.3
16
2011-01-03 10:11
@631405972
大師有時間搞搞,給小弟們指點(diǎn)指點(diǎn),哪怕是不成熟,給個思路也是不錯的啊。想學(xué)習(xí)的要頂上去啊!
支持樓主深入研究。嚴(yán)重同意11樓觀點(diǎn)
0
回復(fù)
631405972
LV.3
17
2011-01-04 13:06
@重慶醬油仔
抱歉,閉環(huán)還沒開始做。初步設(shè)想是通過AD采樣值,來調(diào)整程序中的M值,從而實(shí)現(xiàn)閉環(huán)。
其實(shí)我覺得穩(wěn)壓部分還是做在前級比較好弄,也就是初級升壓部分還是用3525,使用3525自身的功能實(shí)現(xiàn)穩(wěn)壓,高壓輸出后再用單片做SPWM,雖然笨,但應(yīng)該好做些,不知有沒有這樣做過的
0
回復(fù)
2011-01-04 21:01
@631405972
其實(shí)我覺得穩(wěn)壓部分還是做在前級比較好弄,也就是初級升壓部分還是用3525,使用3525自身的功能實(shí)現(xiàn)穩(wěn)壓,高壓輸出后再用單片做SPWM,雖然笨,但應(yīng)該好做些,不知有沒有這樣做過的
理論上來說是這樣的,前級穩(wěn)壓,后級逆變,但我做的是3KW到10KW工頻。
0
回復(fù)
2011-04-26 19:15
@重慶醬油仔
理論上來說是這樣的,前級穩(wěn)壓,后級逆變,但我做的是3KW到10KW工頻。

現(xiàn)在程序有所改動,已經(jīng)實(shí)現(xiàn)3KW逆變。THD 2.4%,穩(wěn)壓精度2V。工頻逆變效率83%

0
回復(fù)
631405972
LV.3
20
2011-04-26 21:03
@重慶醬油仔
現(xiàn)在程序有所改動,已經(jīng)實(shí)現(xiàn)3KW逆變。THD2.4%,穩(wěn)壓精度2V。工頻逆變效率83%

LZ的貼子很有價值啊

0
回復(fù)
631405972
LV.3
21
2011-04-26 21:04
@重慶醬油仔
現(xiàn)在程序有所改動,已經(jīng)實(shí)現(xiàn)3KW逆變。THD2.4%,穩(wěn)壓精度2V。工頻逆變效率83%
能將程序給小弟發(fā)一個嗎?如能,十分感謝!631405972@qq.com
0
回復(fù)
2011-04-26 21:43
學(xué)習(xí)
0
回復(fù)
mengshi4376
LV.5
23
2011-04-29 10:26
@重慶醬油仔
宏晶科技的,1T的51增強(qiáng)型。要單獨(dú)復(fù)制一個STC的頭文件STC12C5410AD.H到編譯器里,這幾天被流放到戈壁了,回復(fù)有點(diǎn)晚抱歉

STC的這款居然有3個PCA計(jì)數(shù)器!以前用的都是只有兩個,看到你程序里德CCAP3H,才知道

還有3個的STC,學(xué)習(xí)了

0
回復(fù)
631405972
LV.3
24
2011-04-30 22:55

仔哥,能不能給我講講,如何根據(jù)所用的晶振和分頻,來確定TH0和TL0,也就是說如果我用20M的晶振,是如何計(jì)算初值的。請有時間一定給小弟回復(fù)下啊。

0
回復(fù)
2011-05-01 07:02
@yhl200303041s
這個逆變器用在哪里的啊,為什么沒有做反饋呢?
上成品看看
0
回復(fù)
2011-05-01 10:57
@631405972
仔哥,能不能給我講講,如何根據(jù)所用的晶振和分頻,來確定TH0和TL0,也就是說如果我用20M的晶振,是如何計(jì)算初值的。請有時間一定給小弟回復(fù)下啊。
TH0和TL0的初值是有多久中斷一次得出的。多久中斷是由多久對PWM的寬度需要改變而確定的,比如:50HZ,31個點(diǎn),就需要中斷頻率為50*2*31=3100;中斷的時間就為1/3100秒。
0
回復(fù)
2011-05-06 21:06
@重慶醬油仔
TH0和TL0的初值是有多久中斷一次得出的。多久中斷是由多久對PWM的寬度需要改變而確定的,比如:50HZ,31個點(diǎn),就需要中斷頻率為50*2*31=3100;中斷的時間就為1/3100秒。

拋磚引玉,大家多提意見。下帖已加入顯示程序,有低壓關(guān)機(jī)。過載關(guān)機(jī)

顯示屏采用的NOKIA 5510

0
回復(fù)
2011-05-06 21:08
@重慶醬油仔
拋磚引玉,大家多提意見。下帖已加入顯示程序,有低壓關(guān)機(jī)。過載關(guān)機(jī)顯示屏采用的NOKIA5510

******************************************************************//
#include  //  20M
#include "math.h"
#include "absacc.h"  
  
#define  inv_flag      ET1   //T1中斷開關(guān),用作逆變信號點(diǎn)//
#define  overload      380   //過載封鎖值//
#define  overload_L    320   //過載報警值//
#define  batlow        615
#define  batlow_L      650

sbit    led=P2^7;
sbit    sce=P3^4; //片選
sbit    res=P2^1; //復(fù)位,0復(fù)位
sbit    dc=P1^6;    //1寫數(shù)據(jù),0寫指令
sbit    sdin=P1^5;  //數(shù)據(jù)
sbit    sclk=P1^7; //時鐘    

bit batlow_flag;
unsigned int m,pwm_1,pwm_2;
unsigned char k=0,i,j,pwm1,pwm2;
unsigned char code pwm[31]={13,39,64,89,112,135,156,176,193,209,
223,234,243,249,254,255,254,249,243,234,
223,209,193,176,156,135,112,89,64,39,13};

void delay(unsigned int time)
{
    unsigned int a=0,b;
    for(a=0;a          for(b=0;b<1200;b++);
   }
void delayus()
{unsigned char k;
for(k=0;k<120;k++);
 }

void LCD_init(void);
void LCD_clear(void);    
void LCD_write_byte(unsigned char dt,unsigned char command); 
void display(unsigned char t,unsigned char y);


unsigned int bat=660,out=640,load=325;
unsigned char code han[]={
//輸--0
 0x44,0xF4,0x4F,0xE4,0x44,0x64,0x90,0x98,0x94,0x93,0x14,0x98,0x08,0xD0,0x10,0x00,0x04,0x04,0x04,0xFF,0x02,0x02,0xFF,0x4A,0x8A,0x7F,0x00,0x3F,0x80,0xFF,0x00,0x00,
//出--1
 0x00,0x00,0xFC,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00,0x00,0x00,0x7E,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7E,0x00,0x00,
//入--2
 0x00,0x00,0x00,0x00,0x01,0x83,0x76,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x18,0x30,0x10,0x00,
//電--3
 0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,
//壓--4
 0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00,
//池--5
 0x10,0x60,0x02,0x8C,0x60,0x80,0xF8,0x40,0x40,0xFE,0x20,0x20,0x10,0xF0,0x00,0x00,0x08,0x08,0x7C,0x03,0x00,0x00,0x3F,0x40,0x40,0x5F,0x40,0x42,0x44,0x43,0x70,0x00,
//負(fù)--6
 0x00,0x20,0x10,0xF8,0x14,0x13,0x12,0x92,0x12,0x1A,0x16,0xF0,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x4F,0x40,0x20,0x18,0x07,0x08,0x10,0x20,0xEF,0x40,0x00,0x00,0x00,
//載--7
 0x10,0x50,0x54,0xD4,0x74,0x5F,0x54,0x54,0x10,0xFF,0x10,0x12,0x14,0xD0,0x10,0x00,0x00,0x12,0x13,0x12,0x12,0xFF,0x0A,0x4A,0x20,0x10,0x0F,0x1C,0x23,0x40,0x30,0x00,
//充--8
 0x00,0x04,0x84,0xC4,0xA4,0xB4,0x9D,0x96,0x84,0x94,0xA4,0xC4,0x84,0x04,0x00,0x00,0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x41,0x40,0x70,0x00,0x00,
 };


unsigned char code shuzi[]={
/*--  文字:  0  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,  //0

/*--  文字:  1  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,  //1

/*--  文字:  2  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,  //2

/*--  文字:  3  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,  //3

/*--  文字:  4  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,   //4

/*--  文字:  5  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,   //5

/*--  文字:  6  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,   //6

/*--  文字:  7  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,   //7

/*--  文字:  8  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,   //8

/*--  文字:  9  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,    //9

/*--  文字:  :  --*/
/*--  宋體12;  此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16   --*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00     //10
};

//---------------------------------------
//-----------------------------------------
void LCD_init(void)
{
 LCD_write_byte(0x21,0);//LCD功能設(shè)置:芯片活動,水平尋址,使用擴(kuò)展指令
 LCD_write_byte(0xaa,0);//設(shè)置VOP值
 LCD_write_byte(0x20,0);//LCD功能設(shè)置:芯片活動,水平尋址,使用基本指令
 LCD_write_byte(0x0C,0);//設(shè)定顯示配置:普通模式
}
//---------------------------------------
void LCD_clear(void)
{
 unsigned char t;
 unsigned char k;  
 for(t=0;t<6;t++)
 {
  for(k=0;k<84;k++)
  {
   LCD_write_byte(0,1);    
  }
 }
}
 
void LCD_set_XY(unsigned char X, unsigned char Y)
{
 LCD_write_byte(0x40 | Y, 0);
 LCD_write_byte(0x80 | X, 0);
}
//---------------------------------------
 
void init_spi()
{
  P1M0=0X00;
 P1M1=0XA0;
 SPCTL=0XD0;
 SPSTAT=0XC0; 
}
//---------------------------------------
//----------------------------------------- 
void LCD_write_byte(unsigned char dt, unsigned char command)
{
 sce=0;
 dc=command;
 SPDAT=dt;
 while(!(SPSTAT&0X80));
 SPSTAT=0XC0;
 dc=1;
 sce=1;
 sdin=1;
}
//--------------------------------------- 
//-----------------------------------------   
void disp16_16(unsigned char x,unsigned char y,unsigned char address)
{
 unsigned char c;
 LCD_set_XY(x*8, y);
 for(c=0;c<16;c++)
 {    
  LCD_write_byte(han[address*32+c],1);
 }
    LCD_set_XY(x*8, y+1);
 for(c=16;c<32;c++)
 {    
  LCD_write_byte(han[address*32+c],1);
 }
}
//---------------------------------------
//-----------------------------------------
void disp8_16(unsigned char x,unsigned char y,unsigned char c)
{
 unsigned char i;
 LCD_set_XY(x*8, y);
 for(i=0; i<8;i++)
 {
  LCD_write_byte(shuzi[c*16+i],1);
 }  
    LCD_set_XY(x*8, y+1);
 for(i=8; i<16;i++)
 {
  LCD_write_byte(shuzi[c*16+i],1);
 } 
}
//---------------------------------------
 
void delay1ms()
{
  unsigned int k;
 for(k=0;k<12000;k++);
}
//***********************顯示程序*********************************//
void disp(unsigned char t,unsigned char y)
{
 if(y==0)//第一屏
 { switch(t)
     {
  case  0  ://第一排
   {
    disp16_16(0,0,0);  //第一排第一字為:輸
    disp16_16(2,0,1);  //第一排第二字為:出
    disp8_16(4,0,10);  //:
    disp8_16(6,0,(out/2)/100);
    disp8_16(7,0,((out/2)%100)/10);
    disp8_16(8,0,((out/2)%100)%10);
    }
  case  1  ://第二排
   {
    disp16_16(0,2,3);//電
    disp16_16(2,2,5);//池
    disp8_16(4,2,10);//:
    disp8_16(6,2,(bat)/100);
    disp8_16(7,2,((bat)%100)/10);
    disp8_16(8,2,((bat)%100)%10);
    }
  case  2  ://第三排
   {
    disp16_16(0,4,6);//負(fù)
    disp16_16(2,4,7);//載
    disp8_16(4,4,10);//:
    disp8_16(6,4,(load)/100);
    disp8_16(7,4,((load)%100)/10);
    disp8_16(8,4,((load)%100)%10);
    }
  default :break;  
  }
  }
 if(y==1)//第二屏
 {
  switch(t)
  {
   case  0  :
    {
     disp16_16(0,0,0)//輸
     disp16_16(2,0,2)//入
     disp8_16(4,0,10)//:
     }
   case  1  :
    {
    disp16_16(0,2,3);//電
    disp16_16(2,2,5);//池
    disp8_16(4,2,10);//:
    disp8_16(6,2,(bat)/100);
    disp8_16(7,2,((bat)%100)/10);
    disp8_16(8,2,((bat)%100)%10);
    }
   case  2  :
    {
     disp16_16(0,4,8);//充電
     disp16_16(2,4,3)//
     disp8_16(4,0,10)//:  
     }      
  }     
}

// ********************************PWM初始化*****************************************//
void pwm_init()
{
   CMOD=0X04; //0000;0100設(shè)置PCA計(jì)數(shù)器工作頻率為定時器0溢出//
   CCON=0X00; //清零計(jì)數(shù)器和溢出標(biāo)志//
   CL=0X00;   //計(jì)數(shù)器低8位和高8位全部清零//
   CH=0X00;
   CCAPM0=0X42;  //設(shè)置PWM0口//
   CCAPM1=0X42;
   CCAPM2=0X42;
   CCAPM3=0X42;
   CCAP0L=0X00;
   CCAP0H=0X00;
   CCAP1L=0X00;
   CCAP1H=0X00;
   CCAP2L=0X00;
   CCAP2H=0X00;
   CCAP3L=0X00;
   CCAP3H=0X00;
   CR=1;//開啟PCA計(jì)數(shù)器//
 
}
//****************//定時器初始化//*************************//
 void time_init() 
 {
  TMOD=0X02;//0000;0010定時器0工作在模式2;定時器1工作在方式0;//
  AUXR=0X80;//1000;0000定時器0設(shè)置為12倍頻率//
  TH0=0XF8;  //設(shè)置定時器0處置并處于自動重裝狀態(tài)//
  TL0=0XF8;
  ET1=1; //開定時器0中斷//
  TH1=0XEF;
  TL1=0X0B;   //定時器初值為8192-512   31個點(diǎn)晶振20M//
  TR1=1;//開啟定時器1//
  TR0=1;//開啟定時器0//
 }
//****************************定時器中斷裝PWM***************************************** //
void int_time0(void) interrupt 3
{
  TH1=0XEF;
  TL1=0X0B;//重裝計(jì)數(shù)值//
  TR1=1;
  CCAP0H=pwm1;
  CCAP2H=pwm1;
  CCAP1H=pwm2; //裝入脈寬值//
  CCAP3H=pwm2;
  k++;
    if(k<31)
  {             i=k;                
                pwm_1=m*pwm[i]/255;
    pwm1=(unsigned char)pwm_1;
                pwm2=0;
    }
  else if(k<62) 
  {             j=k-31;
                pwm1=0;
      pwm_2=m*pwm[j]/255;
    pwm2=(unsigned char)pwm_2;
    }
  else 
    {
               k=0;
      i=k;
               pwm_1=m*pwm[i]/255;
      pwm1=(unsigned char)pwm_1;
      pwm2=0;
      }           
   }
//**********************AD轉(zhuǎn)換初始化**********************************
void AD_init()         
 {    P1M0=0X1E;
      P1M1=0X00;   //設(shè)置P1.1到P1.4為高阻輸入//
      ADC_CONTR = ADC_CONTR|0xE0; //1110,0000打開A/D轉(zhuǎn)換電源;270個時鐘周期轉(zhuǎn)換一次//
 delay(2);
 ADC_CONTR = ADC_CONTR&0xE0; //1000,0000 清ADC_FLAG,ADC_START位和低3位
 }
 //******************************************************************//
unsigned int ad(unsigned char i)    //AD 轉(zhuǎn)換0————7對應(yīng)P1.0到P1.7;    0--charge; 1--u_bat; 2--out;3--input; 4--load//
 { unsigned int u_out=0;
   ADC_DATA=0;
   ADC_LOW2=0;
   ADC_CONTR=ADC_CONTR|(0X08|i);//0000,1010開啟AD轉(zhuǎn)換P1.2//
   delayus();
   do
   {
   ;
   }
    while((ADC_CONTR&0X10)==1);//等待轉(zhuǎn)換結(jié)束//
 ADC_CONTR=ADC_CONTR&0XE0;//1110;0000清除ADC_FLAG,ADC_START//
 u_out=((u_out|ADC_DATA)<<2)|(ADC_LOW2&0X03);
 if(u_out>1024)
 u_out=1024;
 return(u_out);
 }
 void shutdown()
{
 inv_flag=0;//禁止中斷//
        CCAP0H=0;
        CCAP3H=0;
        CCAPM1=0X00;//設(shè)置PMW1,PWM2關(guān)閉//
        CCAPM2=0X00;////
        //P2&=0XFE;//1111,1110將P2^0置低//
      //  P3&=0XEF;//1110,1111將P3^5置低;關(guān)閉兩只上管//
 }
 
     //***************************軟啟動*******************************//
 void soft_start(void)
 {unsigned char i;
 m=0;
 do            
 {
   m=m+9;
   for(i=0;i<20;i++)
   {
   load+=ad(4);
    bat+=ad(1);
    }
    bat/=20;
    load/=20;
    if((batoverload))
    {
     shutdown();
     }
   delay(10);
   }while(m<189);
 }
 //*****************************逆變程序*******************************************//
       void nibian()
{   unsigned char i;
            out=0;
            load=0;
            bat=0;
    for(i=0;i<20;i++)
   { 
    out+=ad(2);
    load+=ad(4);
    bat+=ad(1);
       }
    out/=60;
   
    load=load/20;
    bat=bat/20;
    if((batoverload)||batlow_flag)
    {    shutdown();
                if(bat                 {
                 batlow_flag=1;
                 }
     }
     if((batoverload_L))
     {
      led=1;     //過載,電池低壓,亮燈//
      }
      else
      led=0;
      if(fabs(out-220)>4)          //調(diào)整輸出電壓//
    { if(out>220)
          m=m-3;
         else
    m=m+3;
       }
 }
void main()

 unsigned char n,l; 
 init_spi();
 res=0;
 for(n=0;n<250;n++);
 res=1;    //LCD復(fù)位
 LCD_init();   //初始化LCD模塊
 LCD_clear();   //清屏幕 
 pwm_init();
 time_init();
 AD_init();
 soft_start();

 while(1)
 {
  for(l=0;l<3;l++)
  {
   nibian();
   disp(l,0);
   }
          } 
}

 

0
回復(fù)
2011-05-06 21:12
@重慶醬油仔
******************************************************************//#include // 20M#include"math.h"#include"absacc.h"    #define inv_flag     ET1  //T1中斷開關(guān),用作逆變信號點(diǎn)//#define overload     380  //過載封鎖值//#define overload_L   320  //過載報警值//#define batlow       615#define batlow_L     650sbit   led=P2^7;sbit   sce=P3^4; //片選sbit   res=P2^1; //復(fù)位,0復(fù)位sbit   dc=P1^6;   //1寫數(shù)據(jù),0寫指令sbit   sdin=P1^5; //數(shù)據(jù)sbit   sclk=P1^7; //時鐘   bitbatlow_flag;unsignedintm,pwm_1,pwm_2;unsignedchark=0,i,j,pwm1,pwm2;unsignedcharcodepwm[31]={13,39,64,89,112,135,156,176,193,209,223,234,243,249,254,255,254,249,243,234,223,209,193,176,156,135,112,89,64,39,13};voiddelay(unsignedinttime){   unsignedinta=0,b;   for(a=0;a
另外求一個 :saber license。哪位好心的分享一個啊
0
回復(fù)
631405972
LV.3
30
2011-05-06 21:23
@重慶醬油仔
******************************************************************//#include // 20M#include"math.h"#include"absacc.h"    #define inv_flag     ET1  //T1中斷開關(guān),用作逆變信號點(diǎn)//#define overload     380  //過載封鎖值//#define overload_L   320  //過載報警值//#define batlow       615#define batlow_L     650sbit   led=P2^7;sbit   sce=P3^4; //片選sbit   res=P2^1; //復(fù)位,0復(fù)位sbit   dc=P1^6;   //1寫數(shù)據(jù),0寫指令sbit   sdin=P1^5; //數(shù)據(jù)sbit   sclk=P1^7; //時鐘   bitbatlow_flag;unsignedintm,pwm_1,pwm_2;unsignedchark=0,i,j,pwm1,pwm2;unsignedcharcodepwm[31]={13,39,64,89,112,135,156,176,193,209,223,234,243,249,254,255,254,249,243,234,223,209,193,176,156,135,112,89,64,39,13};voiddelay(unsignedinttime){   unsignedinta=0,b;   for(a=0;a
LZ真是高手,真是佩服得五體投地了。
0
回復(fù)
631405972
LV.3
31
2011-05-06 21:32
@重慶醬油仔
另外求一個:saberlicense。哪位好心的分享一個啊
LZ要去saber仿真論壇http://www.saberbbs.com去看看吧,這里好像討論仿真的不是很多,這個論壇也是我從網(wǎng)上搜的,不知有沒有。
0
回復(fù)
發(fā)