|
//-----------------并行 //SPI//模拟SPI//都有 #include "lcd12864.h" /****************************************/void LCD_IOinit_OUT(void) { . f3 g! h, n4 N GPIO_InitTypeDef GPIO_InitStructure; 3 b$ R+ @2 h6 N9 U! ~: n! G3 Y RCC_APB2PeriphClockCmd(GPIO , ENABLE); GPIO_InitStructure.GPIO_Pin =CS|RW|CLK|PSB|RST; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ; _7 T7 @9 E: Y" V, x/ i GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 9 E& ^2 X9 [" Z/ H9 N GPIO_Init(LCD_IO, &GPIO_InitStructure); } /********»ù±¾º¯Êý*********/ void LCD_Write(uint32_t cmd,uint8_t ddata) { uint32_t temp=cmd; 4 M% O3 _/ j+ B$ t# v uint32_t i; ! l- Y6 v/ I6 V6 D& k 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++) / [: _& E: v% B2 |, a { if(temp&0x80000000)SET(RW); else RESET(RW); SET(CLK); delay_ms(1); RESET(CLK); temp=temp<<1; } RESET(CS); 2 l. V. M) e' D3 ~1 C } u32 ReaddDate ; u8 ReaddDatebit=0; u8 J=0; ' o% a$ y5 o0 I' ~. e3 l& E 6 C7 M7 C# n5 x, ? /**************/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); } } , G! ^( l- x6 b; w3 T ( n6 n7 k3 m% W3 c; J /*******ÔÚÖ¸¶¨Î»ÖÃÏÔʾ×Ö·û´®***************/ 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; $ m$ K6 @- U/ @5 k1 P) N RCC_APB2PeriphClockCmd(GPIO,ENABLE); GPIO_InitStructure.GPIO_Pin =CS |PSB|RST; 2 I- V. X( z; U* b! H GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; # T6 {- `* m, \# F; G* y8 K9 t$ T GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 2 H _5 T7 s+ w$ C/ ? A! m 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); } " v! k' D5 k* Z1 k! w6 b, t1 i 4 k! ~" k5 i/ d5 R* A! _+ @ 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) ) I! f" z3 w& P { 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); } + F9 \' a. @0 p ^) i! p7 D0 c2 W6 p% j |
微信公众号
手机版