龙芯1B:LCD显示图片,打印字符,字符串,汉字,五角星例程

 一、取模软件Imague2Lcd

二、打开bsp.h文件,删去注释“#define BSP_USE_FB”“#define BSP_USE_I2C0”“#define GT1151_DRV”前的“//”;

二、显示图片的画图函数在ls1x_fb_utils.c 中没有,需要自己添加;

/*    unsigned short xsta --列数
      unsigned short ysta --行数
      unsigned char*gImage_sflg --图片数据数组 */
  


void display_pic(unsigned short xsta,unsigned short ysta,unsigned char*gImage_sflg)
{
    unsigned char a,b;
    unsigned short x,y,color;
    int p=0;
    union multiptr loc;
    for(y=0;y<ysta;y++)
    {
        for(x=0;x<xsta;x++)
        {
            a=(gImage_sflg[p]);
            b=(gImage_sflg[p+1]);
            color=((a<<8)|b);
            loc.p8=fb->lineAddr[y]+(x)*fb->bytes_per_pixel;
            fb_set_pixel_internal(loc,0,color);
            p +=2;
        }
    }
}

 三、通过按键进行图片的切换(新建一个bmp.h存放图片取模文件)

/*
 * Copyright (C) 2020-2021 Suzhou Tiancheng Software Ltd.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/*
 * Loongson 1B Bare Program, Sample main file
 */

#include <stdio.h>

#include "ls1b.h"
#include "mips.h"
//#include "libc/lwmem.h"

//-------------------------------------------------------------------------------------------------
// BSP
//-------------------------------------------------------------------------------------------------
#include "bmp.h"  //存放图片取模文件(新建一个头文件把图片数据代码写入)
#include "ls1b_gpio.h"
#include "bsp.h"
#ifdef BSP_USE_FB
  #include "ls1x_fb.h"
  #ifdef XPT2046_DRV
    char LCD_display_mode[] = LCD_800x480;
  #elif defined(GT1151_DRV)
    char LCD_display_mode[] = LCD_480x800;
  #else
    #error "在bsp.h中选择配置 XPT2046_DRV 或者 GT1151_DRV"
           "XPT2046_DRV:  用于800*480 横屏的触摸屏."
           "GT1151_DRV:   用于480*800 竖屏的触摸屏."
           "如果都不选择, 注释掉本 error 信息, 然后自定义: LCD_display_mode[]"
  #endif
#endif

//-------------------------------------------------------------------------------------------------
// 主程序
//-------------------------------------------------------------------------------------------------
#define DIR_OUT     0
#define DIR_IN      1
#define LED1        54
#define LED2        55
#define LED3        2
#define LED4        3
#define KEYUP       0
#define KEY1        1
#define KEY2        40  //按键定义
#define KEY3        41
#define ON   0
#define OFF  1
int main(void)
{
   // gpio_enable(KEY1,DIR_IN);
    unsigned int i=0;
    //gpio_enable(KEY2,DIR_IN);
    printk("\r\nmain() function.\r\n");

    ls1x_drv_init();            		/* Initialize device drivers 初始化外设设备*/

    install_3th_libraries()      		/* Install 3th libraies 初始化组件设备*/
    

       //获取屏幕分辨率
    int xres,yres;
    xres=fb_get_pixelsx();
    yres=fb_get_pixelsy();
    printk("xres=%d\r\nyres=%d\r\n\n",xres,yres);
    /*
     * 裸机主循环
     */
    for (;;)
    {

        //屏幕背景色切换
        //fb_cons_clear(); //清屏
        //ls1x_dc_ioctl(devDC,IOCTRL_FB_CLEAR_BUFFER,(void *)GetColor(cidxRED));//红
        //delay_ms(1000);
        //ls1x_dc_ioctl(devDC,IOCTRL_FB_CLEAR_BUFFER,(void *)GetColor(cidxGREEN));//绿
        //delay_ms(1000);
        //ls1x_dc_ioctl(devDC,IOCTRL_FB_CLEAR_BUFFER,(void *)GetColor(cidxBLUE));//蓝
        //delay_ms(1000);
        //fb_cons_clear();
       


        
        //char str[]="Hello,LS1B!";  //打印字符
        //fb_textout(200,376,(char *)str);
        //fb_textout(200,392,"名字");  //打印汉字
        //fb_textout(200,408,"XXX");  //打印字符串
        //delay_ms(1000);
        //fb_cons_clear();
       

         if(!gpio_read(KEY1)){
            while(!gpio_read(KEY1));     //按键切换图片
            if(++i==3) i=1;
        }
        switch(i)
        {

       case 1: display_pic(xres,yres,gImage_pic);break;    //显示图片
        case 2:display_pic(xres,yres,gImage_55);break;
        default:break;
    }
      
        //delay_ms(3000);
        //fb_cons_clear();
        
        //fb_drawline(100,450,400,350,cidxBRTRED); //打印五角星
        //delay_ms(100);
        //fb_drawline(400,350,180,580,cidxBRTRED);
        //delay_ms(100);
        //fb_drawline(180,580,250,230,cidxBRTRED);
        //delay_ms(100);
        //fb_drawline(250,230,370,580,cidxBRTRED);
        //delay_ms(100);
        //fb_drawline(370,580,100,450,cidxBRTRED);
        //delay_ms(100);
        //fb_drawline(308,500,210,200,cidxBRTRED);
        //delay_ms(100);
        //fb_drawline(210,200,170,320,cidxBRTRED);
        //delay_ms(100);

    }


    return 0;
}

/*
 * @@ End
 */

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值