⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 嵌入式编程
💻 C
📖 第 1 页 / 共 2 页
字号:
	for(Write_cnt=0;Write_cnt<6;Write_cnt++)
	 {
		REG_USI_Tx0 = *(W_buff++);
		REG_USI_CNTRL = 0x00000044;
		REG_USI_CNTRL = REG_USI_CNTRL | 0x01;
		while(REG_USI_CNTRL & 0x1);		
	 }	
	REG_USI_SSR = 0x0;
	while(USICheckBusy()); //检测是否写完
	printf("写数据完成....\n");
}

/*******************************************************************************
* Function Name  : USIRead_ID 
* Description    : 正确的ID=0xEF10
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USIRead_ID(void)
{   
	U8 instruction_code = 0x90;//读ID命令
	U32 Device_ID;
	REG_USI_SSR = 0x1;
	REG_USI_CNTRL = 0x00000004; 
	REG_USI_Tx0 = instruction_code << 24;
	REG_USI_CNTRL = REG_USI_CNTRL | 0x01;
	while(REG_USI_CNTRL & 0x1);
	 
	REG_USI_Tx0 = 0xffff;//提供读数据时钟
	REG_USI_CNTRL = REG_USI_CNTRL | 0x01;
	while(REG_USI_CNTRL & 0x1);
	 
	Device_ID = REG_USI_Rx0;
	REG_USI_SSR = 0x0;
	printf("Device_ID=0x%x\n", Device_ID & 0xffff);
}

/*******************************************************************************
* Function Name  : chip_erease()
* Description    : 
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USISectorErease(U32 Erea_addr)
{
  	 USIWriteEnable();
  	 REG_USI_Tx0 = 0xD8;//扇区擦除命令
	 REG_USI_CNTRL = 0x00000044; 
	 REG_USI_SSR=0x1;
	 REG_USI_CNTRL = REG_USI_CNTRL|0x01;
	 while(REG_USI_CNTRL & 0x1);
	 
	 REG_USI_Tx0 = Erea_addr;
	 REG_USI_CNTRL = 0x000000C4; 
	 REG_USI_CNTRL = REG_USI_CNTRL | 0x01;
	 while(REG_USI_CNTRL & 0x1);
     REG_USI_SSR = 0x0;
	 while(USICheckBusy());//等待检测是否擦除结束
	 printf("擦除完成....\n");
}

/*******************************************************************************
* Function Name  : Write_disable()
* Description    : OK
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void USIWriteDisable(void)
{
  	REG_USI_Tx0 = 0x04;//禁止写命令
	REG_USI_CNTRL = 0x00000044;
	REG_USI_SSR = 0x1;
    REG_USI_CNTRL = REG_USI_CNTRL | 0x01;
    while(REG_USI_CNTRL & 0x1);
    REG_USI_SSR = 0x0; 
}

/*******************************************************************************
* Function Name  : EBILedInit
* Description    : LED的初始化
* Input          : LED的状态值
* Output         : None
* Return         : None
*******************************************************************************/
void EBILedInit(U8 Value)
{
    REG_EXT0CON = EBI_EXT0_VALUE;
    EBILedSet(Value);
}


/*******************************************************************************
* Function Name  : EBILedSet
* Description    : 用于控制LED的亮灭
* Input          : LED的状态值
* Output         : None
* Return         : None
*******************************************************************************/
void EBILedSet(U8 Value)
{
    (VPint(EBILED_ADDRESS)) = ~Value;
}
/*******************************************************************************
* Function Name  : LCDInit
* Description    : LCD初始化
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LCDInit(void)
{
    REG_GPIO_CFG6 = 0x555555;
    
    REG_LCD_LCDCON = 0x30c05;
    REG_LCD_FIFO1PRM = 0xa;
    
    REG_LCD_F1DREQCNT = 0x1e000f0;
    REG_LCD_FIFO1RELACOLCNT = 0x1e0;
    //LCD CLK
    REG_LCD_LCDTCON1 = 0x3b166; 
    REG_LCD_LCDTCON2 = 0x3bf00f1;
    REG_LCD_LCDTCON3 = 0x105401;
    REG_LCD_LCDTCON4 = 0x20101;
    REG_LCD_LCDTCON5 = 0xe;
}

/*******************************************************************************
* Function Name  : LCDShow
* Description    : 设置LCD显示位置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LCDShow(LCD_IMAGE_T Size, LCD_LOCATION_T Location)
{
    REG_LCD_F1DREQCNT = (Size.width <<15 ) + Size.height;
    REG_LCD_FIFO1RELACOLCNT = (Size.width >> 1);
    
    REG_LCD_DISPWINS = (Location.StartY << 16) + Location.StartX;
    REG_LCD_DISPWINE = (Location.EndY << 16) + Location.EndX;
}

/*******************************************************************************
* Function Name  : LCDFIFOBufferSet
* Description    : 指向LCD缓冲区存取图像内容
* Input          : 数组名称
* Output         : None
* Return         : None
*******************************************************************************/
void LCDFIFOBufferSet(PUINT8 Buffer)
{
    REG_LCD_F1SADDR = (U32) Buffer;
}

/*******************************************************************************
* Function Name  : LCDDisplayOn
* Description    : 打开LCD
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LCDDisplayOn(void)
{
    lcdIoctl(1, 1, 0);
}

/*******************************************************************************
* Function Name  : LCDDisplayOff
* Description    : 关闭LCD
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void LCDDisplayOff(void)
{
    lcdIoctl(1, 2, 0);
}


/*******************************************************************************
* Function Name  : Delay
* Description    : 用于不精确延时
* Input          : 延时时间
* Output         : None
* Return         : None
*******************************************************************************/



/*******************************************************************************
* Function Name  : StringShow
* Description    : 显示单个字符
* Input          : LCD显示字符相关信息
* Output         : None
* Return         : None
*******************************************************************************/
void StringShow(LCDShowParameter LCDShowPara)
{
    //用于取汉字点阵图
    U32 Offset = 0, Length = 0; 
    U8 PBuffer[32] = {0};
    //用于将汉字点阵图转化为LCD显示图
    U32 BitCounter = 8; //8  
    U32 ByteCounter = 0; //32
    U32 temp;
    U8 ColorHigh, ColorLow;
    //用于在LCD上显示汉字
    U32 X = 0, Y = 0, Line = 0, Row = 0;
    U8 LBuffer[512] = {0};
    
    
    Offset = ((LCDShowPara.LetterChar[0]-0xa1) * 0x5e + (LCDShowPara.LetterChar[1] - 0xa1)) << 5;
    for(Length = 0; Length < 32; Length++)
    {
        PBuffer[Length] = (* (unsigned int volatile *)(LCDShowPara.LibPlace + Offset + Length));
    }
    
    ColorLow = (U8)(0x00ff & LCDShowPara.Color); 
    ColorHigh = (U8)(0xff00 & LCDShowPara.Color >> 8);
    for(ByteCounter = 0; ByteCounter < 32; ByteCounter++)
    {
        BitCounter = 8;
        temp = PBuffer[ByteCounter];
        for(BitCounter = 0; BitCounter < 8; BitCounter++)
        {
        	
            if((temp & 0x80) == 0x80)
            {	
                LBuffer[(ByteCounter << 4) + (BitCounter << 1)] = ColorHigh;
                LBuffer[(ByteCounter << 4) + (BitCounter << 1) + 1] = ColorLow;
        	}
            else
        	{
                LBuffer[(ByteCounter << 4) + (BitCounter << 1)] = 0x00;
                LBuffer[(ByteCounter << 4) + (BitCounter << 1) + 1] = 0x00;
        	}
            temp <<= 1;
        }
    }
    
    for(Row = 0; Row < 16; Row++)
    {
        for(Line = 0; Line < 32; Line++)
        {
            X = (LCDShowPara.StartX << 5) + Line;
            Y = (LCDShowPara.StartY << 4)+ Row;
            LCDShowPara.LCDBuffer[X + 960 * Y] = LBuffer[Line + (Row << 5)];
        }
    }

}
/*******************************************************************************
* Function Name  : LCDOutputShow
* Description    : 显示多字符并自动换行
* Input          : LCD显示字符相关信息及字数
* Output         : None
* Return         : None
*******************************************************************************/
void LCDOutputShow(LCDShowParameter LCDShowPara, U32 NUM)
{
    U32 temp;
    StringShow(LCDShowPara);

    for(temp=1; temp < NUM; temp++)
    {
        LCDShowPara.StartX = LCDShowPara.StartX + 1;
        if(LCDShowPara.StartX > 29)
        {
            LCDShowPara.StartY = LCDShowPara.StartY + 1;
            LCDShowPara.StartX = 0;
        }
        LCDShowPara.LetterChar = &LCDShowPara.LetterChar[2];
        StringShow(LCDShowPara);        
    }


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -