一、取模软件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
*/