
//-----------------并行 //SPI//模拟SPI//都有 #include "lcd12864.h" /****************************************/void LCD_IOinit_OUT(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(GPIO , ENABLE); GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_IO, &GPIO_InitStructure); } /********»ù±¾º¯Êý*********/ void LCD_Write(uint32_t cmd,uint8_t ddata) { uint32_t temp=cmd; uint32_t i; RESET(CS); temp|=((uint32_t)(ddata&(uint8_t)0xf0)<<16)+((uint32_t)(ddata&(uint8_t)0x0f)<<12); SET(CS); for(i=0;i<24;i++) { if(temp&0x80000000)SET(RW); else RESET(RW); SET(CLK); delay_ms(1); RESET(CLK); temp=temp<<1; } RESET(CS); } u32 ReaddDate ; u8 ReaddDatebit=0; u8 J=0; /**************/void Display(uint8_t addr,uint8_t *Chinese) { LCD_Write(CMD,addr); delay_us(100); while(*Chinese!='\0') { LCD_Write(DATE,*Chinese); Chinese++; delay_ms(1); } } /*******ÔÚÖ¸¶¨Î»ÖÃÏÔʾ×Ö·û´®***************/ void LCD_Show_String_On_Position(u8 y,u8 x, u8 *adata){ u8 address; u8 i=0; switch (y) { case 1:address=0x80+x;break; case 2:address=0x90+x;break; case 3:address=0x88+x;break; case 4:address=0x98+x;break; default:break; } LCD_Write(CMD,address); while(*(adata+i)) { LCD_Write(DATE,*(adata+i)); i++; }}/****************************/ void LCD_ShowNum(u8 y,u8 x,u16 num ){ u8 address; u8 i=0; u8 str[5]; u8 shi,ge,bai ,qian; switch (y) { case 1:address=0x80+x;break; case 2:address=0x90+x;break; case 3:address=0x88+x;break; case 4:address=0x98+x;break; default:break; } LCD_Write(CMD,address); if(num>10000) { num=0;} else num=num; qian=num/1000; bai=(num-qian*1000)/100; shi=(num-bai*100-qian*1000)/10; ge=num%10; str[0]=qian+'0'; str[1]=bai+'0'; str[2]=shi+'0'; str[3]='.'; str[4]=ge+'0'; if(qian==0) { if (bai==0) { if(shi==0) { for(i=2;i<5;i++) LCD_Write(DATE,*(str+i)); } else for(i=2;i<5;i++) LCD_Write(DATE,*(str+i)); } if(bai!=0) { for(i=1;i<5;i++) LCD_Write(DATE,*(str+i)); }}else for(i=0;i<5;i++) LCD_Write(DATE,*(str+i)); }/************³õʼ»¯LCDµÄÅäÖÃ******************/void LCD_Init(void) { LCD_IOinit_OUT(); RESET(CS); RESET(PSB); RESET(RST); delay_ms(1); SET(RST); delay_ms(1); LCD_Write(CMD,0x30); delay_ms(1); LCD_Write(CMD,0x0c); delay_ms(10); LCD_Write(CMD,0x01); delay_ms(1); LCD_Write(CMD,0X04); delay_ms(1); LCD_Write(CMD,0x06); delay_ms(1); } //==============================================================#include "SPI_LCD.h"#include "spi.h"void SPI_LCD_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(GPIO,ENABLE); GPIO_InitStructure.GPIO_Pin =CS |PSB|RST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(LCD_IO, &GPIO_InitStructure); SPI2_Init(); } void LCD_Write(uint8_t cmd,uint8_t ddata) { RESET(CS); SET(CS); SPI2_WriteByte(cmd); SPI2_WriteByte(ddata&0xf0); SPI2_WriteByte((ddata&0x0f)<<4); RESET(CS); } void LCD_Show_String_On_Position(u8 y,u8 x, u8 *adata){ u8 address; u8 i=0; switch (y) { case 1:address=0x80+x;break; case 2:address=0x90+x;break; case 3:address=0x88+x;break; case 4:address=0x98+x;break; default:break; } LCD_Write(CMD,address); while(*(adata+i)) { LCD_Write(DATE,*(adata+i)); i++; } } void SPI_LCD_Init(void) { SPI_LCD_Config(); RESET(CS); RESET(PSB); RESET(RST); delay_ms(1); SET(RST); delay_ms(1); LCD_Write(CMD,0x30); delay_ms(1); LCD_Write(CMD,0x0c); delay_ms(10); LCD_Write(CMD,0x01); delay_ms(1); LCD_Write(CMD,0X04); delay_ms(1); LCD_Write(CMD,0x06); delay_ms(1); } |