数字式开关电源的PID控制Word下载.docx
《数字式开关电源的PID控制Word下载.docx》由会员分享,可在线阅读,更多相关《数字式开关电源的PID控制Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
if(Mode==0)//恒压模式
DisplaySetU();
Delay(100);
ADC();
}
elseif(Mode==1)//恒流模式
DisplaySetI();
else//恒功率模式
DisplaySetP();
}
Part2Headfile
Part2.1LCD12864Headfile
#ifndef__LCD12864
#define__LCD12864
#defineLCD_CSBIT0
#defineLCD_SIDBIT2
#defineLCD_CLKBIT4
#defineLCD_ENP3DIR
#defineLCD_CTRLP3OUT
#defineLCD_CS_Set_highLCD_CTRL|=LCD_CS
#defineLCD_CS_Set_lowLCD_CTRL&
=~LCD_CS
#defineLCD_SID_Set_highLCD_CTRL|=LCD_SID
#defineLCD_SID_Set_lowLCD_CTRL&
=~LCD_SID
#defineLCD_CLK_Set_highLCD_CTRL|=LCD_CLK
#defineLCD_CLK_Set_lowLCD_CTRL&
=~LCD_CLK
#defineLCD_delay1
voidWrite_Data(unsignedcharbyte,unsignedcharreffer);
voidSend_Byte(unsignedcharbyte);
voidClearLCD(void);
voidPut_Array(unsignedchar*data,unsignedcharlength,unsignedcharaddress);
/*************延时**********************/
voidDelay(unsignedchartime)//主时钟1微秒延时
unsignedinti;
i=0x08*time;
for(;
i;
i--);
/************************************************
//函数名称:
Initial_LCD(void)
//函数功能:
启动初始化
************************************************/
voidInitial_LCD(void)
{
LCD_EN|=LCD_CS+LCD_SID+LCD_CLK;
Write_Data(0x30,0);
//基本指令集
Delay(LCD_delay);
Write_Data(0x30,0);
Write_Data(0x0C,0);
Write_Data(0x01,0);
//清屏
Write_Data(0x06,0);
/****************************************************************
*函数名称:
Write_Data(unsignedcharbyte,unsignedcharreffer)
*函数功能:
发送指令或数据
reffer数据1
指令0
*输入变量:
unsignedcharbyte
****************************************************************/
voidWrite_Data(unsignedcharbyte,unsignedcharreffer)
unsignedchartemp,stemp;
temp=byte;
LCD_CS_Set_high;
LCD_CLK_Set_low;
if(reffer==1)
Send_Byte(0xFA);
else
Send_Byte(0xF8);
//发送第一个字节
stemp=(temp&
0xF0);
Send_Byte(stemp);
stemp=temp<
<
4;
LCD_CS_Set_low;
/*********************************************************
Send_Byte(unsignedcharbyte)
发送一字节数据
unsignedcharbyte
*********************************************************/
voidSend_Byte(unsignedcharbyte)
unsignedchartemp,i;
for(i=0;
i<
8;
i++)//send8times
if(temp&
0x80)//sendthehighest
LCD_SID_Set_high;
else
LCD_SID_Set_low;
temp=(temp<
1);
LCD_CLK_Set_high;
/***********************************************************************************
*函数名称:
Put_Array(unsignedchardata,unsignedcharlength,unsignedcharaddress)
*函数功能:
在LCD上显示一个数组
*输入变量:
unsignedchardata
unsignedcharlength
unsignedcharaddress
***********************************************************************************/
voidPut_Array(unsignedchar*data,unsignedcharlength,unsignedcharaddress)
if(address!
=0)
Write_Data(address,0);
for(unsignedchari=0;
length;
i++)
Write_Data(data[i],1);
ClearLCD(void)
清屏
***************************************************/
voidClearLCD(void)
/***********************************************************************
*函数名称:
Set_cursor
*功能描述:
设置光标的位置为CurY行,CurX列
*输 入:
CurX=position(0:
7)CurY=line(0:
3)
***********************************************************************/
voidSet_cursor(unsignedcharCurY,unsignedcharCurX)
switch(CurY)
case0:
Write_Data(0x80+CurX,0);
break;
//写入第一行CurX列的地址
case1:
Write_Data(0x90+CurX,0);
//写入第二行CurX列的地址
case2:
Write_Data(0x88+CurX,0);
//写入第三行CurX列的地址
case3:
Write_Data(0x98+CurX,0);
//写入第四行CurX列的地址
default:
PutInt(unsignedintnum)
显示十进制数
voidPutInt(unsignedintnum)
unsignedintsnum;
unsignedchartemp[12]={0},temp1[12]={0};
unsignedchari=0,n=0;
snum=num;
if(snum==0)
temp[0]='
0'
;
i++;
}
while(num!
temp[i]=num%10+0x30;
num=num/10;
n=i;
n;
i++)
temp1[i]=temp[n-1-i];
Put_Array(temp1,n,0);
voidPutDig(unsignedcharnum)
unsignedcharsnum;
snum=num+0x30;
Write_Data(snum,1);
/***********************************************
**函数名称:
PutcLCD()
**功能描述:
LCD写char
**输 入:
LCD_Char
***********************************************/
voidPutcLCD(unsignedcharLCD_Char)
Write_Data(LCD_Char,1);
PutsLCD()
LCD写入RAM字符串
**输 入:
字符指针 Str
voidPutsLCD(constchar*Str)
intStr_Temp;
Str_Temp=*Str;
//Str_Temp所赋的值是Str所指向的字符
while(Str_Temp!
=0x00)//字符串还没有结束
Write_Data(Str_Temp,1);
Str++;
/*************************************
函数名:
ClrRam(void)
函数功能:
清整个GDRAM空间
*************************************/
voidClrRam()
unsignedcharx,y;
for(y=0;
y<
64;
y++)
for(x=0;
x<
16;
x++)
Write_Data(0x34,0);
Write_Data(y+0x80,0);
//行地址
Write_Data(x+0x80,0);
//列地址
Write_Data(0x00,1);
/***************************************************
ShowAll
函数说明:
显示一幅128*64的图画
传入参数:
图形指针*img
****************************************************/
voidShowAll(unsignedchar*pPicture)
unsignedchari,j,k;
Write_Data(0x36,0);
2;
i++)//分上下两屏写
for(j=0;
j<
32;
j++)//行
Write_Data(0x80+j,0);
//写X坐标(第几行上写)
if(i==0)//写Y坐标,判断哪一屏
Write_Data(0x80,0);
Write_Data(0x88,0);
for(k=0;
k<
k++)//写一整行数据(16个字节,合八个字符)
Write_Data(*pPicture++,1);
//Write_Data(0x36,0);
#endif
Part2.2TableHeadfile
externunsignedcharimg[]={
0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x07,0xFE,0x7F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0xFF,0x7F,0xFE,0xDF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1F,0xFF,0x7F,0xFF,0xBF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3F,0xFB,0xFF,0xF9,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x7F,0xFB,0xFF,0xFF,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x01,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0xFF,0xFE,0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0xFF,0xF8,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x07,0xFF,0xF0,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0x7F,0xC0,0x00,0x00,0x03,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xF7,0x80,0x00,0x00,0x01,0xF5,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFB,0x00,0x00,0x00,0x00,0xE3,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x1F,0xFF,0x03,0xF8,0x07,0xF8,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0xFE,0x0F,0xFE,0x1F,0xFC,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0xFC,0x1C,0x0F,0x7C,0x0C,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x3F,0xFC,0x1C,0x03,0xF0,0x06,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xF8,0x08,0x01,0xE0,0x0E,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xF8,0x08,0x07,0xF0,0x0E,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xF0,0x08,0x0F,0x38,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7F,0xF0,0x0C,0x1E,0x1E,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xF0,0x04,0x7C,0x0E,0x1C,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xF0,0x05,0xF8,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE3,0xBF,0x9C,0xFF,0xEF,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE3,0xBB,0x6D,0xFF,0xFF,0x87,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xEF,0xE3,0xBE,0x6F,0xF3,0xBB,0x87,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0xE3,0xBE,0xFF,0xFB,0xB8,0x07,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFE,0xE3,0xFB,0xFC,0x7B,0x9F,0x87,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE1,0xF3,0x1D,0xF3,0x9F,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xE0,0x07,0xF8,0x07,0x0C,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xF0,0x06,0xF8,0x0F,0x18,0x0F,0xFF,0x00,0x00,0x00,0x00,0x0