用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

STM32对电子纸驱动波形文件

2014-09-16 作者: Sio举报

[c]代码库

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"

//u16 DeviceCode;
/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

#define EPD_TIMER_DELAY                 0xf//0x11111111
#define LOOP_TIME                       4  
extern const unsigned char array0[];
extern const unsigned char array1[];
unsigned char *ptr_old_pic;
unsigned char *ptr_new_pic;

//------------------ four state of  buff -------------------------------------------

	
#define EPD_TIMER_DELAY_FUNC

//---------------------------------------------------------------------
#define EPD_CL                             GPIO_Pin_1				//PA1
#define EPD_XCE1                        GPIO_Pin_2				//PA2
#define EPD_XCE2                        GPIO_Pin_3				//PA3
#define EPD_LE                              GPIO_Pin_8				//PA8
#define KEY_WKUP                          GPIO_Pin_0				//PA0

#define EPD_OE                             GPIO_Pin_0				//PB0
#define EPD_STL                           GPIO_Pin_1				//PB1
#define EPD_SHR                          GPIO_Pin_8				//PB8
#define EPD_XRL                           GPIO_Pin_9				//PB9
#define EPD_GMODE2                      GPIO_Pin_10				//PB10
#define EPD_GMODE1                      GPIO_Pin_11				//PB11
#define VBO_CTR1                        GPIO_Pin_12				//PB12
#define VBO_CTR2                        GPIO_Pin_13				//PB13
#define AAT_EN1                         GPIO_Pin_14                                 //PB14
#define AAT_EN2                         GPIO_Pin_15                                //PB15

#define EPD_DB_0                        GPIO_Pin_0				//PC0
#define EPD_DB_1                        GPIO_Pin_1				//PC1
#define EPD_DB_2                        GPIO_Pin_2				//PC2
#define EPD_DB_3                        GPIO_Pin_3				//PC3
#define EPD_DB_4                        GPIO_Pin_4				//PC4
#define EPD_DB_5                        GPIO_Pin_5				//PC5
#define EPD_DB_6                        GPIO_Pin_6				//PC6
#define EPD_DB_7                        GPIO_Pin_7				//PC7

#define EPD_DB_7_OT                        GPIO_Pin_12				//PC7

#define EPD_XSPV                        GPIO_Pin_8				//PC8
#define EPD_CLK                          GPIO_Pin_9				//PC9
#define VCOM_CTR2                     GPIO_Pin_10				//PC10
#define KEY_USER3                      GPIO_Pin_11				//PC11
#define KEY_USER4                     GPIO_Pin_12				//PC12
#define KEY_TANPER                   GPIO_Pin_13				//PC13

#define POWER_CTR                   GPIO_Pin_2				//PD2

#define VCOM_CTR1                       GPIO_Pin_4				//PE4

#define KEY_USER1                      GPIO_Pin_10				//PF10
#define KEY_USER2                      GPIO_Pin_11				//PF11
#define SD1_PIN                              GPIO_Pin_6				//PF6
#define SD2_PIN                              GPIO_Pin_7				//PF7

#define AAT_EN3                         GPIO_Pin_8				//PG8
#define AAT_EN4                         GPIO_Pin_15				//PG15

//---------------------------------------------------------------------

#define EPD_XCE_PORT                                          GPIOA
#define EPD_CL_PORT						GPIOA
#define EPD_LE_PORT						GPIOA
#define KEY_WKUP_PORT				              GPIOA

#define VBO_CTR_PORT                                          GPIOB			
#define EPD_GMODE_PORT               	                  GPIOB
#define EPD_OE_PORT					GPIOB
#define EPD_STL_PORT					GPIOB
#define EPD_SHR_PORT					GPIOB
#define EPD_XRL_PORT					GPIOB
#define AAT_EN1_PORT                                           GPIOB
#define AAT_EN2_PORT                                           GPIOB

#define EPD_XSPV_PORT					GPIOC
#define EPD_CLK_PORT				         GPIOC
#define VCOM_CTR2_PORT                                   GPIOC
#define EPD_DB_PORT                                           GPIOC
#define KEY_USER3_PORT                                            GPIOC
#define KEY_USER4_PORT                                          GPIOC
#define KEY_TANPER_PORT                                           GPIOC

#define POWER_CTR_PORT                                 GPIOD

#define VCOM_CTR1_PORT                                   GPIOE

#define KEY_USER1_PORT                                   GPIOF
#define KEY_USER2_PORT                                   GPIOF
#define LED1_IN_PORT                                             GPIOF
#define LED2_IN_PORT                                             GPIOF

#define AAT_EN3_PORT                                        GPIOG
#define AAT_EN4_PORT                                        GPIOG

/* Values magic to the Board keys */
#define  NOKEY                             
#define  KEY1                                                      KEY_WKUP
#define  KEY2                                                      KEY_USER1
#define  KEY3                                                     KEY_USER2
#define  KEY4                                                     KEY_USER3
#define  KEY5                                                     KEY_USER4
#define  KEY6                                                    KEY_TANPER


//---------------------------------------------------------------------

#define PORT_A_PIN_EPD_USE              EPD_CL | EPD_XCE1 | EPD_XCE2 | EPD_LE
#define PORT_A_PIN_KEY_USE                KEY1
#define PORT_B_PIN_EPD_USE              EPD_OE | EPD_STL | EPD_SHR | EPD_XRL | EPD_GMODE2 | EPD_GMODE1  | VBO_CTR1 | VBO_CTR2 | AAT_EN1 | AAT_EN2

#if 1//由于PC7坏了,所以用PC12代替,原PC12是按键检测口,这里有改动
#define PORT_C_PIN_EPD_USE              EPD_XSPV | EPD_CLK | VCOM_CTR2 | EPD_DB_0 | EPD_DB_1 | EPD_DB_2 | EPD_DB_3 | EPD_DB_4 | EPD_DB_5 | EPD_DB_6 | EPD_DB_7 | EPD_DB_7_OT
#define PORT_C_PIN_KEY_USE              KEY4|KEY6// KEY4|KEY5|KEY6
#else
#define PORT_C_PIN_EPD_USE              EPD_XSPV | EPD_CLK | VCOM_CTR2 | EPD_DB_0 | EPD_DB_1 | EPD_DB_2 | EPD_DB_3 | EPD_DB_4 | EPD_DB_5 | EPD_DB_6 | EPD_DB_7 
#define PORT_C_PIN_KEY_USE              KEY4|KEY5|KEY6
#endif

#define PORT_D_PIN_EPD_USE              POWER_CTR
#define PORT_E_PIN_EPD_USE              VCOM_CTR1
#define PORT_F_PIN_EPD_USE              SD1_PIN|SD2_PIN
#define PORT_F_PIN_KEY_USE               KEY2|KEY3
#define PORT_G_PIN_EPD_USE              AAT_EN3 | AAT_EN4
//---------------------------------------------------------------------


//---------------------------------------------------------------------

#define RCC_GPIO_USE                    RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE| RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG

#if 1
#define GPIO_SPEED_EPD                  GPIO_Speed_50MHz
#else
#define GPIO_SPEED_EPD                  GPIO_Speed_2MHz//GPIO_Speed_10MHz
#endif

//----------------------------------------------------------------------
          
//---------------------------------------------------------------------


#if 1
#define FRAME_LEN	18

//波形Excel文件
unsigned char wave[4][FRAME_LEN]=
{
0,0,0,0,0,0,1,1,1,1,1,2,2,2,2,2,0,0,	//白到白
0,0,1,1,1,1,1,2,2,2,2,2,1,1,1,1,0,0,	//白到黑
0,0,2,2,2,2,1,1,1,1,1,2,2,2,2,2,0,0,	//黑到白
0,0,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,0,	//黑到黑
};


#define FRAME_INIT_LEN 44
unsigned char init_wave[FRAME_INIT_LEN]=
{
0,0,
0x55,0x55,0x55,0x55,0x55,
0,0,
0xaa,0xaa,0xaa,0xaa,0xaa,
0,0,
0x55,0x55,0x55,0x55,0x55,
0,0,
0xaa,0xaa,0xaa,0xaa,0xaa,
0,0,
0x55,0x55,0x55,0x55,0x55,
0,0,
0xaa,0xaa,0xaa,0xaa,0xaa,
0,0,
};
#endif

//生成于Ram的波形数据表
unsigned char wave_table[256][FRAME_LEN]={0};

unsigned char g_dest_data[200];

unsigned char loop = 0;
unsigned char column = 0;
unsigned int old_data;
unsigned int new_data;
//---------------------------------------------------------------------
  
//---------------------------------------------------------------------
#define EPD_CL_H                       EPD_CL_PORT->BSRR =EPD_CL
#define EPD_CL_L                       EPD_CL_PORT->BRR =EPD_CL

#define EPD_LE_H                       EPD_LE_PORT->BSRR =EPD_LE
#define EPD_LE_L                       EPD_LE_PORT->BRR =EPD_LE

#define EPD_OE_H                       EPD_OE_PORT->BSRR =EPD_OE
#define EPD_OE_L                       EPD_OE_PORT->BRR =EPD_OE

#define EPD_STL_H                      EPD_STL_PORT->BSRR =EPD_STL
#define EPD_STL_L                      EPD_STL_PORT->BRR =EPD_STL

#define EPD_XSPV_H                     EPD_XSPV_PORT->BSRR =EPD_XSPV
#define EPD_XSPV_L                     EPD_XSPV_PORT->BRR =EPD_XSPV

#define EPD_CLK_H                      EPD_CLK_PORT->BSRR =EPD_CLK
#define EPD_CLK_L                      EPD_CLK_PORT->BRR =EPD_CLK


/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/
GPIO_InitTypeDef GPIO_InitStructure;
ErrorStatus HSEStartUpStatus;




/* Private function prototypes -----------------------------------------------*/

void Delay(vu32 nCount);

void SYS_Init(void);
void AAT1156_ON(void);
void AAT1156_OFF(void);
void EPD_Init(void);
void EPD_Start_Scan(void);
void EPD_End_Scan(void);
void EPD_Send_Row_Data(u8 *pArray);
void EPD_Display_end_Screen(void);

void EPD_Display_ChagnePIC(const unsigned char *pold, const unsigned char *pnew);
void EPD_Display_INIT();
void EPD_Display_TEST();
void EPD_Display_PIC(const unsigned char *pnew);
/*------------------------------------------------------*/

//void EPD_Display(const unsigned char *pic);

//
void make_wave_table()
{
	int frame, num;
	unsigned char tmp,value;
	
	
	for(frame=0; frame<FRAME_LEN; frame++)
	{		
		for(num=0; num<256; num++)
		{
			tmp = 0;
			tmp = wave[(((num>>7)&0x1)*2 + ((num>>3)&0x1))][frame];
					
			tmp = tmp<< 2;
			tmp &= 0xfffc;
			tmp |= wave[(((num>>6)&0x1)*2 + ((num>>2)&0x1))][frame];

			tmp = tmp<< 2;
			tmp &= 0xfffc;
			tmp |= wave[(((num>>5)&0x1)*2 + ((num>>1)&0x1))][frame];

			tmp = tmp<< 2;
			tmp &= 0xfffc;
			tmp |= wave[(((num>>4)&0x1)*2 + ((num>>0)&0x1))][frame];

			value = 0;
			value = (tmp <<6) & 0xc0;
			value += (tmp<<2) & 0x30;
			value += (tmp>>2) & 0x0c;
			value += (tmp>>6) & 0x03;
			wave_table[num][frame] = value;
		}
	}
}



/*******************************************************************************
* Function Name  : main
* Description    : Main program.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{
	SYS_Init();
	AAT1156_OFF();

	//SPI_Flash_Init(); 
	
	EPD_Init();
	GPIO_ResetBits(LED1_IN_PORT ,SD1_PIN);
	GPIO_SetBits(LED1_IN_PORT ,SD1_PIN);
    GPIO_ResetBits(LED2_IN_PORT ,SD2_PIN);

	make_wave_table();
	
#if 0
	EPD_Display_INIT();
	EPD_Display_PIC(array0);
	Delay(0x03ffffff);
	EPD_Display_INIT();
	EPD_Display_PIC(array1);
#else
	EPD_Display_INIT();						//第一次开机状态未知,故需刷屏
	EPD_Display_PIC(array0);
	Delay(0x03ffffff);
	EPD_Display_ChagnePIC(array0, array1);
#endif

    GPIO_ResetBits(LED2_IN_PORT ,SD2_PIN);


    GPIO_ResetBits(LED2_IN_PORT ,SD2_PIN);
	GPIO_ResetBits(LED1_IN_PORT ,SD1_PIN);

	
      	
	while(1);
 }
  



/*******************************************************************************
* Function Name  : Delay
* Description    : Inserts a delay time.
* Input          : nCount: specifies the delay time length.
* Output         : None
* Return         : None
*******************************************************************************/
void Delay(vu32 nCount)
{
  for(; nCount != 0; nCount--);
}



void SYS_Init(void)
{
    SystemInit();//
  
    RCC_APB2PeriphClockCmd(RCC_GPIO_USE, ENABLE); /*使能系统使用到的GPIO的时钟*/

    //配置EPD使用到的GPIO的参数
	GPIO_InitStructure.GPIO_Pin = PORT_A_PIN_EPD_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = PORT_A_PIN_KEY_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOA, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = PORT_B_PIN_EPD_USE; 
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOB, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = PORT_C_PIN_EPD_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOC, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = PORT_C_PIN_KEY_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOC, &GPIO_InitStructure);
			
	GPIO_InitStructure.GPIO_Pin = PORT_D_PIN_EPD_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOD, &GPIO_InitStructure);
			
	GPIO_InitStructure.GPIO_Pin = PORT_E_PIN_EPD_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOE, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = PORT_F_PIN_EPD_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOF, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin = PORT_F_PIN_KEY_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOF, &GPIO_InitStructure);

	GPIO_InitStructure.GPIO_Pin = PORT_G_PIN_EPD_USE; 
  	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  	GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_EPD;
  	GPIO_Init(GPIOG, &GPIO_InitStructure);
	//---------END----------------
}

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void AAT1156_ON(void)
{
	GPIO_SetBits(AAT_EN1_PORT,AAT_EN1);
	GPIO_SetBits(AAT_EN2_PORT,AAT_EN2);
	GPIO_SetBits(AAT_EN3_PORT,AAT_EN3);
	GPIO_SetBits(AAT_EN4_PORT,AAT_EN4);
	Delay(0xff);

	
	GPIO_SetBits(VCOM_CTR1_PORT,VCOM_CTR2);//VCOM = -V
	GPIO_ResetBits(VCOM_CTR2_PORT,VCOM_CTR1);
	GPIO_SetBits(GPIOB,VBO_CTR2);//VBORDER = -15V
	GPIO_ResetBits(GPIOB,VBO_CTR1);
	Delay(0xff);
	
}

   
void AAT1156_OFF(void)
{
	GPIO_SetBits(VCOM_CTR1_PORT,VCOM_CTR2);//VCOM = -V
	GPIO_SetBits(VCOM_CTR2_PORT,VCOM_CTR1);
	GPIO_SetBits(GPIOB,VBO_CTR2);//VBORDER = -15V
	GPIO_SetBits(GPIOB,VBO_CTR1);
	Delay(0xff);
	
	GPIO_ResetBits(AAT_EN4_PORT,AAT_EN4);
	GPIO_ResetBits(AAT_EN3_PORT,AAT_EN3);
	GPIO_ResetBits(AAT_EN2_PORT,AAT_EN2);
	GPIO_ResetBits(AAT_EN1_PORT,AAT_EN1);

	Delay(0xff);
}


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

void EPD_Init(void)
{
	GPIO_ResetBits(EPD_SHR_PORT,EPD_SHR);               	//Shift direction source driver	  
	GPIO_SetBits(EPD_GMODE_PORT,EPD_GMODE1 | EPD_GMODE2);	//one pulse mode	
	GPIO_ResetBits(EPD_XRL_PORT,EPD_XRL);               	//Shift direction gate driver
	GPIO_ResetBits(EPD_XCE_PORT,EPD_XCE1 | EPD_XCE2);       //EPD正像	

	GPIO_SetBits(VCOM_CTR1_PORT,VCOM_CTR2);					//VCOM = -V
	GPIO_ResetBits(VCOM_CTR2_PORT,VCOM_CTR1);

	GPIO_SetBits(GPIOB,VBO_CTR2);							//VBORDER = -15V
	GPIO_ResetBits(GPIOB,VBO_CTR1);

	EPD_LE_L;
	EPD_CL_L;
	EPD_OE_L;
	EPD_STL_H;
	EPD_XSPV_H;
	EPD_CLK_L;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//EPD开始时序
void EPD_Start_Scan(void)
{
       
	EPD_XSPV_H;                                             //XSPV先高

	loop = LOOP_TIME;                                       //DCLK跑3个时钟
	while(loop--)                            
	{
		EPD_CLK_L;
		Delay(EPD_TIMER_DELAY);	
		EPD_CLK_H;
		Delay(EPD_TIMER_DELAY);
	}
 
	EPD_XSPV_L;                                             //XSPV再低

	loop = LOOP_TIME;
	while(loop--)
	{
		EPD_CLK_L;                    						//DCLK跑3个时钟
		Delay(EPD_TIMER_DELAY);
		EPD_CLK_H;
		Delay(EPD_TIMER_DELAY);
	}

	EPD_XSPV_H;                                             //XSPV  变高
	loop = LOOP_TIME;
	while(loop--)
	{
		EPD_CLK_L;
		Delay(EPD_TIMER_DELAY);
		EPD_CLK_H;
		Delay(EPD_TIMER_DELAY);
	}
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//行结束扫描波形函数
void EPD_End_Scan(void)                          
{
	loop = 1;                                               //CL 又一个时钟,
	while(loop--)
	{
		EPD_CL_L;
		Delay(EPD_TIMER_DELAY);
		EPD_CL_H;
		Delay(EPD_TIMER_DELAY);
	}

	EPD_CLK_L;                                               //DCLK  变低

	EPD_OE_L;                                                //OE  变低
	
	loop = 3;                                                //cl循环3个时钟送数据。
	while(loop--)
	{
		EPD_CL_L;
		Delay(EPD_TIMER_DELAY);
		EPD_CL_H;
		Delay(EPD_TIMER_DELAY);
	}

	EPD_CLK_H;                                               //DCLK  变高( DCLK 一个时钟)
}

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//行扫描
void EPD_Send_Row_Data(u8 *pArray )      					//  送数据,
{

	EPD_LE_L;                                              	//LE 先低
	asm("NOP");
	asm("NOP");
	asm("NOP");
	asm("NOP");
	
	EPD_OE_H;                                              	//OE 先高
	asm("NOP");
	asm("NOP");
	asm("NOP");
	asm("NOP");

	EPD_STL_L;                                              //STL 先低,	                                           
	
	old_data = (uint16_t)EPD_DB_PORT->ODR;
	old_data &= 0xFF00;
	for(column= 0; column < 200; column++)          		// 写一行数据, 
	{
		new_data = old_data  | (u16)pArray[column];

#if 1	//PC7口坏了,用PC12代替	
		new_data &= 0xefff;
		if(((pArray [column]>>7)&0x1)==1)
			new_data |= 0x1000;
#endif
		EPD_DB_PORT->ODR = new_data;

		EPD_CL_L;
		EPD_CL_H;
	}

    loop = 2;                                               //CL又2  个时钟,
	while(loop--)
	{
		EPD_CL_L;
		EPD_CL_H;
	}


	EPD_LE_H;                                             	//LE 变高

    loop = 3;                                               //cl循环3个时钟送数据。
	while(loop--)
	{
		EPD_CL_L;
		EPD_CL_H;
	}
	
	EPD_LE_L;                                           	//LE 变低
    EPD_STL_H;                                             	//STL 高,
}




//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

void line_data_changepic(u8 *old_pic, u8 *new_pic, u8 frame)
{
	int i, j;
	unsigned char tmp =0;
	
	for(i=0, j=0; i<100; i++, j+=2)
	{
		tmp = (old_pic[i] & 0xf0);
		tmp += ((new_pic[i] & 0xf0) >> 4);
		g_dest_data[j] = wave_table[tmp][frame];		
		
		tmp = ((old_pic[i] & 0x0f) << 4 );
		tmp += ((new_pic[i] & 0x0f));		
		g_dest_data[j+1] = wave_table[tmp][frame];	
	}	
}

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void EPD_Display_ChagnePIC(const unsigned char *pold, const unsigned char *pnew)
{
  	int line, frame;
	bool led_flag = TRUE;

	AAT1156_ON();

	ptr_old_pic = (unsigned char *)pold;
	ptr_new_pic = (unsigned char *)pnew;	

	
	for(frame=0; frame<FRAME_LEN; frame++)//FRAME_LEN
	{
		if(led_flag)
		{
			GPIO_ResetBits(LED1_IN_PORT ,SD1_PIN);
			led_flag = FALSE;
		}
		else
		{
			GPIO_SetBits(LED1_IN_PORT ,SD1_PIN);
			led_flag = TRUE;
		}
		
		EPD_Start_Scan();
		for(line=0; line<600; line++)
		{
			line_data_changepic(ptr_old_pic + line*100, ptr_new_pic + line*100, frame);
			EPD_Send_Row_Data( g_dest_data );
			EPD_End_Scan();	
		}
	}

	GPIO_SetBits(LED1_IN_PORT ,SD1_PIN);

	AAT1156_OFF();
}


//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void line_data_init(u8 frame)
{
	int i, j;
	unsigned char tmp =0;
	
	for(i=0; i<200; i++)
	{
		g_dest_data[i] = init_wave[frame];	
	}	
}

//黑白黑白刷3次。最终到达白背景
void EPD_Display_INIT()
{
  	int line, frame;
	bool led_flag = TRUE;

	AAT1156_ON();
	
	for(frame=0; frame<FRAME_INIT_LEN; frame++)//FRAME_LEN
	{
		if(led_flag)
		{
			GPIO_ResetBits(LED1_IN_PORT ,SD1_PIN);
			led_flag = FALSE;
		}
		else
		{
			GPIO_SetBits(LED1_IN_PORT ,SD1_PIN);
			led_flag = TRUE;
		}
		
		EPD_Start_Scan();
		for(line=0; line<600; line++)
		{
			line_data_init(frame);
			line_data_init(frame);						//加该指令是保持时间与ChangePIC时一致
			line_data_init(frame);						//加该指令是保持时间与ChangePIC时一致
			EPD_Send_Row_Data( g_dest_data );
			EPD_End_Scan();	
		}
	}

	GPIO_SetBits(LED1_IN_PORT ,SD1_PIN);

	AAT1156_OFF();
}

//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
void line_init_pic(u8 *new_pic, u8 frame)
{
	int i, j;
	unsigned char tmp =0;
	
	for(i=0, j=0; i<100; i++, j+=2)
	{
		tmp = (new_pic[i] & 0x00);
		tmp += ((new_pic[i] & 0xf0) >> 4);
		g_dest_data[j] = wave_table[tmp][frame];		
		
		tmp = ((new_pic[i] & 0x00) << 4 );
		tmp += ((new_pic[i] & 0x0f));		
		g_dest_data[j+1] = wave_table[tmp][frame];	
	}	
}

//从白背景转到图片
void EPD_Display_PIC(const unsigned char *pnew)
{
  	int line, frame;
	bool led_flag = TRUE;

	AAT1156_ON();

	ptr_new_pic = (unsigned char *)pnew;
	
	for(frame=0; frame<FRAME_LEN; frame++)//FRAME_LEN
	{
		if(led_flag)
		{
			GPIO_ResetBits(LED1_IN_PORT ,SD1_PIN);
			led_flag = FALSE;
		}
		else
		{
			GPIO_SetBits(LED1_IN_PORT ,SD1_PIN);
			led_flag = TRUE;
		}
		
		EPD_Start_Scan();
		for(line=0; line<600; line++)
		{
			line_data_init(frame);							//加该指令是保持时间与ChangePIC时一致
			line_init_pic(ptr_new_pic + line*100, frame);
			EPD_Send_Row_Data( g_dest_data );
			EPD_End_Scan();	
		}
	}

	GPIO_SetBits(LED1_IN_PORT ,SD1_PIN);

	AAT1156_OFF();
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...