- #define hardware_spi 0
 
 
- #define software_spi 1
 
 
-  
 
 
- #define LCD_SPI   hardware_spi
 
 
-  
 
 
- void LCD_GPIO_Init(void)
 
 
- {
 
 
-        GPIO_InitType GPIO_InitStructure;
 
 
-       
 
 
-       RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOA);    //使能A端口时钟
 
 
-       
 
 
-        GPIO_Structure_Initialize(&GPIO_InitStructure);
 
 
- #if LCD_SPI==software_spi
 
 
-        /* Select the GPIO pin to control */
 
 
-        GPIO_InitStructure.Pin          = GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;
 
 
-        /* Set pin mode to general push-pull output */
 
 
-        GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_OUT_PP;
 
 
-        /* Set the pin drive current to 4MA*/
 
 
-        GPIO_InitStructure.GPIO_Current = GPIO_DS_4MA;
 
 
-        /* Initialize GPIO */
 
 
-        GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);
 
 
-  
 
 
-        GPIO_Pins_Set(GPIOA,GPIO_PIN_5|GPIO_PIN_7|GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);
 
 
-       
 
 
- #elif LCD_SPI==hardware_spi
 
 
-       
 
 
-  
 
 
-        SPI_InitType SPI_InitStructure;
 
 
-  
 
 
-     GPIO_Structure_Initialize(&GPIO_InitStructure);
 
 
-       
 
 
-        RCC_APB2_Peripheral_Clock_Enable(RCC_APB2_PERIPH_SPI1);
 
 
-     /* Configure master pins: NSS, SCK, MISO and MOSI */
 
 
-     /* Confugure SPI pins as Alternate Function Push Pull */
 
 
-     GPIO_InitStructure.Pin        = GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7;
 
 
-     GPIO_InitStructure.GPIO_Mode  = GPIO_MODE_AF_PP;
 
 
-     GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
 
 
-     GPIO_InitStructure.GPIO_Alternate = GPIO_AF1_SPI1;
 
 
-     GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);
 
 
-       
 
 
-        GPIO_InitStructure.Pin          = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4;
 
 
-        /* Set pin mode to general push-pull output */
 
 
-        GPIO_InitStructure.GPIO_Mode    = GPIO_MODE_OUT_PP;
 
 
-        /* Set the pin drive current to 4MA*/
 
 
-        GPIO_InitStructure.GPIO_Current = GPIO_DS_4MA;
 
 
-        /* Initialize GPIO */
 
 
-        GPIO_Peripheral_Initialize(GPIOA, &GPIO_InitStructure);
 
 
-  
 
 
-        GPIO_Pins_Set(GPIOA,GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4);
 
 
-       
 
 
- //     SPI_I2S_Reset(SPI1);
 
 
-        /* SPI_MASTER configuration ------------------------------------------------------*/
 
 
-     SPI_Initializes_Structure(&SPI_InitStructure);
 
 
-     SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;
 
 
-     SPI_InitStructure.SpiMode       = SPI_MODE_MASTER;
 
 
-     SPI_InitStructure.DataLen       = SPI_DATA_SIZE_8BITS;
 
 
-     SPI_InitStructure.CLKPOL        = SPI_CLKPOL_HIGH;
 
 
-     SPI_InitStructure.CLKPHA        = SPI_CLKPHA_SECOND_EDGE;
 
 
-     SPI_InitStructure.NSS           = SPI_NSS_SOFT;
 
 
-     /* It is recommended that the SPI master mode of the C version chips should not exceed 18MHz */
 
 
-     SPI_InitStructure.BaudRatePres  = SPI_BR_PRESCALER_2;
 
 
-     SPI_InitStructure.FirstBit      = SPI_FB_MSB;
 
 
-     SPI_InitStructure.CRCPoly       = 7;
 
 
-     SPI_Initializes(SPI1, &SPI_InitStructure);
 
 
-       
 
 
-        SPI_Set_Nss_Level(SPI1, SPI_NSS_HIGH);
 
 
-  
 
 
-        /* Enable SPI_MASTER */
 
 
-     SPI_ON(SPI1);
 
 
-       
 
 
- #endif
 
 
- }
 
 
-  
 
 
-  
 
 
- /******************************************************************************
 
 
-       函数说明:LCD串行数据写入函数
 
 
-       入口数据:dat  要写入的串行数据
 
 
-       返回值:  无
 
 
- ******************************************************************************/
 
 
- void LCD_Writ_Bus(u8 dat)
 
 
- {     
 
 
- #if LCD_SPI==software_spi
 
 
-        u8 i;
 
 
-        for(i=0;i<8;i++)
 
 
-        {                     
 
 
-               LCD_SCLK_Clr();
 
 
-               if(dat&0x80)
 
 
-               {
 
 
-                  LCD_MOSI_Set();
 
 
-               }
 
 
-               else
 
 
-               {
 
 
-                  LCD_MOSI_Clr();
 
 
-               }
 
 
-               LCD_SCLK_Set();
 
 
-               dat<<=1;
 
 
-        }     
 
 
- #elif LCD_SPI==hardware_spi
 
 
-               while(SPI_I2S_Flag_Status_Get(SPI1, SPI_I2S_FLAG_TE) == RESET);
 
 
-               SPI_I2S_Data_Transmit(SPI1,dat);
 
 
-               while (SPI_I2S_Flag_Status_Get(SPI1, SPI_I2S_FLAG_RNE) == RESET);
 
 
-               SPI_I2S_Data_Get(SPI1);
 
 
- #endif
 
 
- }
 
 
-  
看下代码就是上面的,初始化IO和发送函数里面我们添加了区分,其余地方软件和硬件SPI都一样。
原本我只使用发送的,结果屏幕就是没有亮,加上读取SPI数据后就能点亮了,应该就这块要注意下。
-               SHT20_GetValue();
 
 
-              
 
 
-               LCD_ShowChinese(0,0,"国民技术",RED,WHITE,32,0);
 
 
-       
 
 
-               //温湿度显示
 
 
-               LCD_ShowString(0,60,"TEMP:",BLACK,WHITE,24,0);
 
 
-               LCD_ShowFloatNum1(100,60,sht20Info.tempreture,4,BLACK,WHITE,24);
 
 
-               LCD_ShowString(150,60,"C",BLACK,WHITE,24,0);
 
 
-  
 
 
-               LCD_ShowString(0,90,"HUMI:",BLACK,WHITE,24,0);
 
 
-               LCD_ShowFloatNum1(100,90,sht20Info.humidity,4,BLACK,WHITE,24);
 
 
-               LCD_ShowString(150,90,"%",BLACK,WHITE,24,0);    
然后我们加如温湿度显示数据,这样屏幕上就能获取到我们温湿度传感器数据然后显示出来了。非常的直观。
下面看下硬件接线。
后续我们也可以制作中文字体替换。