在线时间796 小时
UID3067179
注册时间2014-10-23
NXP金币1077
TA的每日心情 | 开心 2024-5-5 08:01 |
---|
签到天数: 1319 天 [LV.10]以坛为家III
版主
- 积分
- 7578
- 最后登录
- 2024-5-5
|
这篇使用模拟SPI方式,来测试下转接板的SPI转并口LCD硬件电路部分。
一、硬件电路部分
1.1、LCD部分电路图
JP1连接LCD显示屏模块
1.2、硬件实物图
二、测试程序
2.1、lcd.c
- #include <rtthread.h>
- #include <rtdevice.h>
- #include "dfs_fs.h"
- #include "drv_pin.h"
- #define LCD_SPI_SCLK GET_PINS(1, 2) //LSPI_HS_SCK
- #define LCD_SPI_MOSI GET_PINS(0, 26) //LSPI_HS_MOSI
- #define LCD_CS GET_PINS(1, 1) //LSPI_SSEL
- #define LCD_RS GET_PINS(1, 9)
- #define LCD_RST GET_PINS(1, 10)
- #define LCD_BK GET_PINS(1, 19) //PLU_INO
- void sendbyte(uint8_t bt)
- {
- uint8_t i=0;
- rt_pin_write(LCD_SPI_SCLK, PIN_LOW);
- for(i=0;i<8;i++)
- {
- rt_pin_write(LCD_SPI_SCLK, PIN_LOW);
- if(bt&0x80)
- {
- rt_pin_write(LCD_SPI_MOSI, PIN_HIGH);
- }
- else
- {
- rt_pin_write(LCD_SPI_MOSI, PIN_LOW);
- }
- bt=bt<<1;
- rt_pin_write(LCD_SPI_SCLK, PIN_HIGH);
- }
- rt_pin_write(LCD_SPI_SCLK, PIN_LOW);
- }
- void senddat(uint16_t dat)
- {
- rt_pin_write(LCD_CS, PIN_HIGH);
- sendbyte((uint8_t)(dat>>8));
- rt_pin_write(LCD_CS, PIN_LOW);
- sendbyte((uint8_t)dat);
- rt_pin_write(LCD_CS, PIN_HIGH);
- }
- void LCD_Writ_Bus(uint8_t dat)
- {
- uint8_t i;
- rt_pin_write(LCD_CS, PIN_LOW);
- for(i=0;i<8;i++)
- {
- rt_pin_write(LCD_SPI_SCLK, PIN_LOW);
- if(dat&0x80)
- {
- rt_pin_write(LCD_SPI_MOSI, PIN_HIGH);
- }
- else
- {
- rt_pin_write(LCD_SPI_MOSI, PIN_LOW);
- }
- rt_pin_write(LCD_SPI_SCLK, PIN_HIGH);
- dat<<=1;
- }
- rt_pin_write(LCD_CS, PIN_HIGH);
- }
- void LCD_WR_DATA8(uint8_t dat)
- {
- LCD_Writ_Bus(dat);
- }
- void LCD_WR_DATA(uint16_t dat)
- {
- senddat(dat);
- }
- void LCD_WR_REG(uint16_t dat)
- {
- rt_pin_write(LCD_RS, PIN_LOW);
- senddat(dat);
- rt_pin_write(LCD_RS, PIN_HIGH);
- }
- void lcd_register_write(uint16_t register_id,uint16_t value)
- {
- LCD_WR_REG(register_id);
- LCD_WR_DATA(value);
- }
- void lcd_gram_write_prepare(void)
- {
- LCD_WR_REG(0x0022);
- }
- void lcd_gram_write(uint16_t rgb_code)
- {
- LCD_WR_DATA(rgb_code);
- }
- void init_lcd(void)
- {
- uint16_t i;
- rt_pin_mode(LCD_SPI_SCLK , PIN_MODE_OUTPUT);
- rt_pin_mode(LCD_SPI_MOSI , PIN_MODE_OUTPUT);
- rt_pin_mode(LCD_CS , PIN_MODE_OUTPUT);
- rt_pin_mode(LCD_RS , PIN_MODE_OUTPUT);
- rt_pin_mode(LCD_RST , PIN_MODE_OUTPUT);
- rt_pin_mode(LCD_BK , PIN_MODE_OUTPUT);
-
- rt_pin_write(LCD_BK, PIN_HIGH);
-
- rt_pin_write(LCD_RST, PIN_LOW);
- rt_thread_mdelay(100);
- rt_pin_write(LCD_RST, PIN_HIGH);
- rt_thread_mdelay(100);
-
- lcd_register_write(0x0000,0x0001);
- lcd_register_write(0x0003,0xA8A4);
- lcd_register_write(0x000C,0x0000);
- lcd_register_write(0x000D,0x080C);
- lcd_register_write(0x000E,0x2B00);
- lcd_register_write(0x001E,0x00B0);
- lcd_register_write(0x0001,0x2B3F);
- lcd_register_write(0x0002,0x0600);
- lcd_register_write(0x0010,0x0000);
- lcd_register_write(0x0011,0x6070);
- lcd_register_write(0x0005,0x0000);
- lcd_register_write(0x0006,0x0000);
- lcd_register_write(0x0016,0xEF1C);
- lcd_register_write(0x0017,0x0003);
- lcd_register_write(0x0007,0x0233);
- lcd_register_write(0x000B,0x0000);
- lcd_register_write(0x000F,0x0000);
- lcd_register_write(0x0041,0x0000);
- lcd_register_write(0x0042,0x0000);
- lcd_register_write(0x0048,0x0000);
- lcd_register_write(0x0049,0x013F);
- lcd_register_write(0x004A,0x0000);
- lcd_register_write(0x004B,0x0000);
- lcd_register_write(0x0044,0xEF00);
- lcd_register_write(0x0045,0x0000);
- lcd_register_write(0x0046,0x013F);
- lcd_register_write(0x0030,0x0707);
- lcd_register_write(0x0031,0x0204);
- lcd_register_write(0x0032,0x0204);
- lcd_register_write(0x0033,0x0502);
- lcd_register_write(0x0034,0x0507);
- lcd_register_write(0x0035,0x0204);
- lcd_register_write(0x0036,0x0204);
- lcd_register_write(0x0037,0x0502);
- lcd_register_write(0x003A,0x0302);
- lcd_register_write(0x003B,0x0302);
- lcd_register_write(0x0023,0x0000);
- lcd_register_write(0x0024,0x0000);
- lcd_register_write(0x0025,0x8000);
- lcd_register_write(0x004e,0);
- lcd_register_write(0x004f,0);
-
- for(i=50000;i>0;i--);
- }
- void lcd_cursor_set(uint16_t x,uint16_t y)
- {
- lcd_register_write(0x004e,x);
- lcd_register_write(0x004f,y);
- }
- void lcd_clear(uint16_t color)
- {
- uint32_t index=0;
- lcd_cursor_set(0,0);
- /* prepare to write GRAM */
- lcd_gram_write_prepare();
- for(index=0;index<76800;index++){
- LCD_WR_DATA(color);
- }
- }
- void lcd_point_set(uint16_t x,uint16_t y,uint16_t point)
- {
- if ((x > 240)||(y > 320)){
- return;
- }
- lcd_cursor_set(x,y);
- lcd_gram_write_prepare();
- lcd_gram_write(point);
- }
复制代码
2.2、main.c
- int main(void)
- {
- uint8_t i=0;
- #if defined(__CC_ARM)
- rt_kprintf("using armcc, version: %d\n", __ARMCC_VERSION);
- #elif defined(__clang__)
- rt_kprintf("using armclang, version: %d\n", __ARMCC_VERSION);
- #elif defined(__ICCARM__)
- rt_kprintf("using iccarm, version: %d\n", __VER__);
- #elif defined(__GNUC__)
- rt_kprintf("using gcc, version: %d.%d\n", __GNUC__, __GNUC_MINOR__);
- #endif
- //rt_pin_mode(LEDB_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */
- #ifdef RT_USING_SDIO
- rt_thread_mdelay(2000);
- if (dfs_mount("sd", "/", "elm", 0, NULL) == 0)
- {
- rt_kprintf("sd mounted to /\n");
- }
- else
- {
- rt_kprintf("sd mount to / failed\n");
- }
- #endif
-
- init_lcd();
-
- while (1)
- {
- lcd_clear(WHITE);
- rt_thread_mdelay(1000);
- lcd_clear(BLUE);
- rt_thread_mdelay(1000);
- }
- }
复制代码
三、运行情况
显示屏可以刷屏显示,这刷新速度也只能够演示下硬件接口没有问题。
|
|