/***************************************************** 函数功能:从1302读一个字节数据 入口参数:x ***************************************************/ uchar Read1302(void) { uchar i,dat; Delaynus(5); //稍微等待,使硬件做好准备 for(i=0;i<8;i++) //连续读8个二进制位数据 { dat>>=1; if(DATA==1) //如果读出的数据是1 dat|=0x80; //将1取出,写在dat的最高位 SCLK=1; //将SCLK置于高电平,为下降沿读出 Delaynus(5); //稍微等待 SCLK=0; //拉低SCLK,形成脉冲下降沿 Delaynus(5); //稍微等待 } return dat; //将读出的数据返回 }
/***************************************************** 函数功能:向1302写一个字节数据 入口参数:x ***************************************************/ void Write1302(uchar dat) { uchar i; SCLK=0; //拉低SCLK,为脉冲上升沿写入数据做好准备 Delaynus(5); //稍微等待,使硬件做好准备 for(i=0;i<8;i++) //连续写8个二进制位数据 { DATA=dat&0x01; //取出dat的第0位数据写入1302 低位在前,高位在后 Delaynus(5); //稍微等待,使硬件做好准备 SCLK=1; //上升沿写入数据 Delaynus(5); //稍微等待,使硬件做好准备 SCLK=0; //重新拉低SCLK,形成脉冲 dat>>=1; //将dat的各数据位右移1位,准备写入下一个数据位 } }
// 产生复位脉冲 static void LcdReset(void) { GPIO_ResetBits( LCD_RESET_CTL_Pins , LCD_RST ); Delaynus(500); GPIO_SetBits( LCD_RESET_CTL_Pins , LCD_RST ); }
int main(void) { /* Clock Config */ RCC_Configuration(); /* Configure the GPIO ports */ //GPIO_Configuration_Main(); /* Interrupt Config */ NVIC_Configuration(); ///////////////// SDCARD Initialisation //// // SDCard_Configuration(); // res = f_open(&fsrc, "a.txt", FA_OPEN_ALWAYS | FA_WRITE |FA_READ); // if(res==FR_OK) // printf("File opened successfully.\n\r"); // else // { // printf("File open error.\n\r"); // return 1; // } // printf("****************File Start***************\n\r"); // while(f_read(&fsrc, fileBuff, buffsize,&br)==FR_OK) // { // printf("\n\r%s\n\r",fileBuff); // if(br!=buffsize) // break; // } // printf("****************File End*****************\n\r"); // if(f_close(&fsrc)==FR_OK) // printf("\n\rFile closed.\n\r"); LcdInit(); while(1) { LcdWriteDC(COMMAND , 0x0c ); /*标准显示模式*/ // LcdDrawBitmap(0, 0, (uint8_t *)logo, 80, 6); //画一个接近全屏的位图 LcdPutString(0, 0, "Nokia 5110 LCD"); //在位图的左上方覆盖英文字符 LcdPutString(0, 1, "--0123456789--"); //在位图的左上方覆盖英文字符 LcdPutString(0, 2, "--9876543210--"); //在位图的左上方覆盖英文字符 LcdPutString(0, 3, "--0123456789--"); //在位图的左上方覆盖英文字符 LcdPutString(0, 4, "--9876543210--"); LcdPutString(0, 5, "--0123456789--"); Delaynus(1000000); LcdWriteDC(COMMAND , 0x0d); /*反显*/ Delaynus(1000000); } }
// 使能信号传输 // true : 使能 false : 禁止 static void LcdEnable(bool Enable) { if( Enable == TRUE ) LCD_SCE_LOW(); else LCD_SCE_HIGH(); Delaynus(1); }
/***************************************************** 函数功能:根据命令字,向1302写一个字节数据 入口参数:Cmd,储存命令字;dat,储存待写的数据 ***************************************************/ void WriteSet1302(uchar Cmd,uchar dat) { RST=0; //禁止数据传递 SCLK=0; //确保写数居前SCLK被拉低 RST=1; //启动数据传输 Delaynus(5); //稍微等待,使硬件做好准备 Write1302(Cmd); //写入命令字 Write1302(dat); //写数据 SCLK=1; //将时钟电平置于高电平状态 RST=0; //禁止数据传递 }
// 发送数据或指令 // DC : 数据或指令 // info : 发送的信息 void LcdWriteDC(u8 DC, uint8_t info) { LcdEnable(TRUE); if( DC == DATA) LCD_DC_HIGH(); else LCD_DC_LOW(); Delaynus(5); SpiSendByte(info); LcdEnable(FALSE); }
void LCD_Reset(void) { GPIO_ResetBits( LCD_RESET_CTL_Pins , LCD_RST ); Delaynus(1000); GPIO_SetBits( LCD_RESET_CTL_Pins , LCD_RST ); }