📄 main.c
字号:
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 + -