查看: 5715|回复: 3

[原创] LPC1768 Dev kit 开发板 + 12、rt-thread系统点亮LCD显示屏

[复制链接]
  • TA的每日心情
    开心
    2024-4-10 10:22
  • 签到天数: 1317 天

    [LV.10]以坛为家III

    124

    主题

    2831

    帖子

    31

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    7570
    最后登录
    2024-4-10
    发表于 2019-4-1 23:11:34 | 显示全部楼层 |阅读模式
        在rt-Thread系统下,驱动LCD显示屏。
        一、硬件电路


        2.1、底板LCD部分电路图


        1.png
        2.png
        2.2、核心板LCD部分电路图
        3.png


        WR引脚底板和核心板上有点区别

        二、程序部分


        2.1、lcd.c
    1. #include <LPC17xx.H>
    2. #include "lcd.h"
    3. #include <string.h>
    4. #include <stdio.h>

    5. //LCD初始化
    6. void init_lcdport(void)
    7. {
    8.         LPC_GPIO2->FIODIR  |= 0x1ff;           //P2.0-2.8为输出
    9.         LPC_GPIO2->FIODIR  |= (1<<10);                                //P2.10为输出
    10.         LPC_GPIO0->FIODIR  |= (1<<22);                                //P0.22为输出
    11.        

    12.         LPC_GPIO2->FIOPIN &= ~0x1ff;                                //输出为0
    13.         LPC_GPIO2->FIOPIN &= ~(1<<10);
    14.         LPC_GPIO0->FIOPIN &= ~(1<<22);
    15. }

    16. //延时函数
    17. int32_t Delayms(uint32_t ms)
    18. {
    19.         int n,m=100000;
    20.         for(n=0;n<ms;n++)
    21.         {
    22.                 while(m)
    23.                 {
    24.                         m--;
    25.                 }
    26.         }
    27.         return 0;
    28. }

    29. //写命令
    30. int32_t LCD_Write_CMD(int8_t cmd)
    31. {
    32.         RS_L();
    33.         RW_L();
    34.         Delayms(1);
    35.         EN_H();
    36.         LPC_GPIO2->FIOMASK = ~0xff;
    37.         LPC_GPIO2->FIOPIN = cmd;
    38.         LPC_GPIO2->FIOMASK =0;
    39.         EN_L();
    40.         RW_H();
    41.         Delayms(2);
    42. }
    43. //写数据
    44. int32_t LCD_Write_Data(int8_t data)
    45. {
    46.         RS_H();
    47.         RW_L();
    48.         Delayms(1);
    49.         EN_H();
    50.         LPC_GPIO2->FIOMASK = ~0xff;
    51.         LPC_GPIO2->FIOPIN  = data;
    52.         LPC_GPIO2->FIOMASK=0;
    53.         EN_L();
    54.         RW_H();
    55.         Delayms(2);
    56.         return 0;
    57. }
    58. //初始化LCD
    59. int32_t LCD_Init(void)
    60. {
    61.         init_lcdport();                //初始化端口
    62.         LCD_Write_CMD(INSTR_FUNC(IFUNC_8BIT|IFUNC_TWO_LINE|IFUNC_DISPLAY_ON));
    63.         LCD_Write_CMD(INSTR_DISPLAY(IDISPLAY_ON|IDISPLAY_CURSOR_OFF|IDISPLAY_BLINK_OFF));
    64.         LCD_Write_CMD(INSTR_CLEAR);
    65.         LCD_Write_CMD(INSTR_ENTRY_MODE(IENTRY_INCREMENT|IENTRY_SHIFT_OFF));
    66.         return 0;
    67. }

    68. //显示字符
    69. int32_t LCD_WR_Str(char * str)
    70. {
    71.         int i;
    72.         for(i=0;i<(strlen(str));i++)
    73.         {
    74.            LCD_Write_Data(str[i]);
    75.         }
    76.         return 0;
    77. }
    78. //清屏
    79. int32_t LCD_Clr_Screen(void)
    80. {
    81.   LCD_Write_CMD(INSTR_CLEAR);
    82.         return 0;
    83. }

    84. int32_t LCD_Set_RowCol(char x,char y)
    85. {
    86.         uint8_t addr;
    87.         switch (y){
    88.                 case 1:
    89.                         addr=64;
    90.                         break;
    91.                 case 2:
    92.                         addr=20;
    93.                         break;
    94.                 case 3:
    95.                         addr=84;
    96.                         break;
    97.                 default:
    98.                         addr=0;
    99.         }
    100.         addr+=x;
    101.         LCD_Write_CMD(INSTR_SET_DDRAM_ADDR(addr));
    102.         return 0;
    103. }
    复制代码

        2.2、创建的线程
       

    1. #include "platform.h"
    2. #include "ledt.h"
    3. #include "lcd.h"
    4. #include "stdio.h"


    5. //LCD线程入口
    6. static void lcd_thread_entry(void* parameter)
    7. {
    8.         rt_uint32_t count=0;
    9.         char buff[30];
    10.         while(1)
    11.         {
    12.                 rt_kprintf("lcd thread count:%d\n",count++);
    13.                 LCD_Set_RowCol(0,0);
    14.                 LCD_WR_Str("LPC1768 rt-Thread");
    15.                
    16.                 LCD_Set_RowCol(0,1);
    17.                 LCD_WR_Str("LCD thread test:");
    18.                
    19.                 sprintf(buff,"thread count = %d",count);
    20.                 LCD_Set_RowCol(0,2);                       
    21.                 LCD_WR_Str(buff);
    22.                
    23.                 rt_thread_delay(50);
    24.         }
    25. }

    26. //Uart线程入口
    27. static void uart_thread_entry(void* parameter)
    28. {
    29.         rt_uint32_t count=0;
    30.         while(1)
    31.         {
    32.                 rt_kprintf("uart thread count:%d\n",count++);
    33.                 rt_thread_delay(50);
    34.         }
    35. }
    36. //led线程入口
    37. static void led_thread_entry(void* parameter)
    38. {
    39.         rt_uint8_t led_bf=0;
    40.         while(1)
    41.         {
    42.                 led_bf=~led_bf;
    43.                 if(led_bf)
    44.                 {
    45.                         led_on();
    46.                         rt_kprintf("led open\n");
    47.                 }
    48.                 else
    49.                 {
    50.                         led_off();
    51.                         rt_kprintf("led close\n");
    52.                 }
    53.                 //rt_kprintf("led thread run");
    54.                
    55.                 rt_thread_delay(50);
    56.         }
    57. }


    58. //初始化
    59. void init_board(void)
    60. {
    61.         init_led();
    62.         LCD_Init();                //初始化
    63.        
    64. //        LCD_Clr_Screen();
    65. //        LCD_Set_RowCol(0,1);
    66. //        LCD_WR_Str("Hello LPC1768 Board!");
    67.         //LCD_WR_Str("zhangxiaohui");
    68. }



    69. //初始化线程
    70. void fun_init_thread_entry(void)
    71. {
    72.         rt_thread_t uart_thread;   //串口线程
    73.         rt_thread_t led_thread;   //LED指示灯线程
    74.         rt_thread_t lcd_thread;   //LCD显示线程
    75.        
    76.         //创建串口线程
    77.                
    78.                 uart_thread = rt_thread_create(
    79.                                                         "uart",                                                                //线程名称
    80.                                                         uart_thread_entry,                 //线程入口函数
    81.                                                         RT_NULL,                                                        //线程入口参数
    82.                                                         256,                                                                         //线程栈大小
    83.                                                         19,                                                                         //线程优先级
    84.                                                         20);                                                                        //线程时间片大小
    85.     if(uart_thread != RT_NULL)
    86.             rt_thread_startup(uart_thread);

    87.         //创建LED指示灯线程
    88.         led_thread = rt_thread_create(
    89.                                                         "led",                                                                //线程名称
    90.                                                         led_thread_entry,                 //线程入口函数
    91.                                                         RT_NULL,                                                        //线程入口参数
    92.                                                         256,                                                                         //线程栈大小
    93.                                                         18,                                                                         //线程优先级
    94.                                                         20);                                                                        //线程时间片大小
    95.     if(led_thread != RT_NULL)
    96.             rt_thread_startup(led_thread);
    97.         //创建LCD显示线程
    98.         lcd_thread = rt_thread_create(
    99.                                                         "lcd",                                                                //线程名称
    100.                                                         lcd_thread_entry,                 //线程入口函数
    101.                                                         RT_NULL,                                                        //线程入口参数
    102.                                                         256,                                                                         //线程栈大小
    103.                                                         17,                                                                         //线程优先级
    104.                                                         20);                                                                        //线程时间片大小
    105.     if(lcd_thread != RT_NULL)
    106.             rt_thread_startup(lcd_thread);

    107. }

    复制代码



        三、程序执行结果


       3.1、串口输出
        4.png
       
        3.2、LCD显示


        100.gif








       

    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2019-4-2 11:44:09 | 显示全部楼层
    源代码啊~~
    今天晚上我验证一下啊~~

    话说楼主背景的白纸是不是用来白平衡的啊
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92618
    最后登录
    2024-4-24
    发表于 2019-4-3 16:07:56 | 显示全部楼层
    支持,学习一下~~ 01.png 02.png 03.png 04.png 05.png 06.png 07.png 08.png 09.png 10.png
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2019-5-1 06:15
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    0

    主题

    91

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    207
    最后登录
    2021-8-4
    发表于 2019-4-30 09:54:43 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 21:46 , Processed in 0.124964 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表