五、LCD屏填充纯色

  废话不说,直接上代码:

  lcd.c

 1 #include "lcd.h"
 2
 3 static int PEN_COLOR = LCD_RED;     /* 定义画笔(前景)颜色 */
 4 static int BK_COLOR  = LCD_BLACK;   /* 定义背景颜色 */
 5
 6 /**
 7  * \brief LCD初始化
 8  */
 9 void lcd_init (void)
10 {
11     GPICON = 0;
12     GPICON |= 0xaaaaaaaa;
13     GPJCON = 0;
14     GPJCON |= 0xaaaaaa;
15
16     MIFPCON &= ~(0x1<<3);
17     SPCON &= ~0x3;
18     SPCON |= 0x1;
19
20     VIDCON0 = (14<<6) | (0x1<<4) | (0x3);
21     VIDCON1 = (0x1<6) | (0x1<<5);
22
23     VIDTCON0 = (1<<16) | (1<<8) | (9);
24     VIDTCON1 = (1<<16) | (1<<8) | (40);
25
26     VIDTCON2 = ((LCD_HEIGHT - 1) << 11) | (LCD_WIDTH - 1);
27     WINCON0 = (0xb<<2) | (0x1);
28
29     VIDOSD0A = 0;
30     VIDOSD0B = ((LCD_WIDTH - 1) << 11) | ((LCD_HEIGHT - 1));
31
32     VIDOSD0C = LCD_WIDTH * LCD_HEIGHT;
33
34     VIDW00ADD0B0 = SHOW_BUF;
35 }
36
37 /**
38  * \brief 设置画笔颜色
39  */
40 void set_pen_color (int color)
41 {
42     PEN_COLOR = color;
43 }
44
45 /**
46  * \brief 设置背景颜色
47  */
48 void set_bk_color (int color)
49 {
50     BK_COLOR = color;
51 }
52
53 /**
54  * \brief 绘制一个点
55  */
56 void lcd_draw_point (int x, int y)
57 {
58     *((int *)SHOW_BUF + x + y * LCD_WIDTH) = PEN_COLOR;
59 }
60
61 void lcd_draw_bk (int x, int y)
62 {
63     *((int *)SHOW_BUF + x + y * LCD_WIDTH) = BK_COLOR;
64 }
65
66 /**
67  * \brief 清屏(填充背景色)
68  */
69 void lcd_clean (void)
70 {
71     int i, j, k;
72     for(i=0; i<LCD_HEIGHT; i++) {
73         for(j=0; j<LCD_WIDTH; j++) {
74             lcd_draw_bk(j, i);
75         }
76     }
77 }

  lcd.h

 1 #ifndef __LCD_H
 2 #define __LCD_H
 3
 4 /* 定义寄存器地址 */
 5 #define GPICON  (*(unsigned int *)0x7F008100)
 6 #define SPCON   (*(unsigned int *)0x7F0081A0)
 7 #define MIFPCON (*(unsigned int *)0x7410800c)
 8 #define GPJCON  (*(unsigned int *)0x7F008120)
 9
10 #define VIDCON0       (*(unsigned int *)0x77100000)
11 #define VIDCON1       (*(unsigned int *)0x77100004)
12 #define VIDCON2       (*(unsigned int *)0x77100008)
13 #define VIDTCON0      (*(unsigned int *)0x77100010)
14 #define VIDTCON1      (*(unsigned int *)0x77100014)
15 #define VIDTCON2      (*(unsigned int *)0x77100018)
16 #define WINCON0       (*(unsigned int *)0x77100020)
17 #define WINCON1       (*(unsigned int *)0x77100024)
18 #define WINCON2       (*(unsigned int *)0x77100028)
19 #define WINCON3       (*(unsigned int *)0x7710002C)
20 #define WINCON4       (*(unsigned int *)0x77100030)
21 #define VIDOSD0A      (*(unsigned int *)0x77100040)
22 #define VIDOSD0B      (*(unsigned int *)0x77100044)
23 #define VIDOSD0C      (*(unsigned int *)0x77100048)
24 #define VIDOSD1A      (*(unsigned int *)0x77100050)
25 #define VIDOSD1B      (*(unsigned int *)0x77100054)
26 #define VIDOSD1C      (*(unsigned int *)0x77100058)
27 #define VIDW00ADD0B0  (*(unsigned int *)0x771000A0)
28 #define GPECON        (*(unsigned int *)0x7f008080)
29 #define GPEDAT        (*(unsigned int *)0x7f008084)
30
31 #define LCD_WIDTH   480     /* 定义LCD宽度 */
32 #define LCD_HEIGHT  272     /* 定义LCD高度 */
33
34 /* 定义显存地址 */
35 #define SHOW_BUF 0x54000000
36
37 /* 定义常用颜色 */
38 #define COL(R,G,B)   ((R<<16) | (G<<8) | (B))
39 #define LCD_RED          COL(0xFF, 0, 0)
40 #define LCD_GREEN     COL(0, 0xFF, 0)
41 #define LCD_BLUE      COL(0, 0, 0xFF)
42 #define LCD_WHITE     COL(0xFF, 0xFF, 0xFF)
43 #define LCD_BLACK     COL(0, 0, 0)
44
45 /******************************* 函数声明 **************************/
46 /**
47  * \brief LCD初始化
48  */
49 extern void lcd_init (void);
50
51 /**
52  * \brief 设置画笔颜色
53  */
54 extern void set_pen_color (int color);
55
56 /**
57  * \brief 设置背景颜色
58  */
59 extern void set_bk_color (int color);
60
61 /**
62  * \brief 绘制一个点
63  */
64 extern void lcd_draw_point (int x, int y);
65
66 /**
67  * \brief 清屏(填充背景色)
68  */
69 extern void lcd_clean (void);
70
71 #endif

  main.c

1 #include "lcd.h"
2
3 int main(int argc, const char *argv[])
4 {
5     lcd_init();
6     set_bk_color(LCD_RED);
7     lcd_clean();
8     return 0;
9 }

  start.s

1 .section .text
2 .global _start
3
4 _start:
5     b main
6     .end

 Makefile

 1 CC = arm-none-linux-gnueabi-
 2 objs = main.o lcd.o start.o
 3
 4 test.bin:$(objs)
 5     $(CC)ld $(objs) -Ttext 50008000 -o test.elf
 6     $(CC)objcopy -O binary test.elf test.bin
 7
 8 %.o:%.c
 9     $(CC)gcc -c $< -o [email protected]
10
11 %.o:%.s
12     $(CC)gcc -c $< -o [email protected]
13
14 clean:
15     rm *.o *.elf *.bin

原文地址:https://www.cnblogs.com/Suzkfly/p/10312086.html

时间: 2024-10-24 07:56:11

五、LCD屏填充纯色的相关文章

嵌入式Linux基于framebuffer的jpeg格式本地LCD屏显示

在基于Linux的视频监控采集系统中,摄像头采集到的一帧视频图像数据一般都是经过硬件自动压缩成jpeg格式的,然后再保存到摄像头设备的缓冲区.如果要把采集到的jpeg格式显示在本地LCD屏上,由于我们的Linux系统没有移植任何GUI系统,就要考虑以下方面:1. 将jpeg格式解压缩为位图格式,也就是jpeg解码. 2. 将解码出来的位图格式输出到本地的LCD屏上. 在Linux系统下是通过写入帧缓冲(framebuffer)来实现的. 3. framebuffer相当于为LCD设备提供一个统一

PyQt5快速上手基础篇2-按钮控制LCD屏显示

前言 上一节我们完成了PyQt5开发环境搭建,本节开始我们正式进入PyQt5的世界,首先我给大家介绍下QT的信号与槽,然后利用这一特点完成点击按钮触发LCD屏显示功能. 一.基础知识 1. PyQt5信号与槽简介 信号与槽是QT中的核心机制,也是PyQt5中对象直接进行通信的机制,当一个信号释放的时候,连接的槽函数会自动执行,比如点击/释放按钮都可以触发槽函数. 信号与槽特点如下: (1) 一个信号可以连接多个槽函数(2) 一个槽可以监听多个信号(3) 一个信号可以连接另一个信号(4) 信号与槽

PyQt5快速上手基础篇4-将lineEdit输入框数据同步显示再label和LCD屏上面

前言 本节我们将介绍lineEdit的使用方法,同时将输入框输入的数据同步显示再label和LCD屏幕上面. 一.基础知识 1. lineEdit简介 lineEdit是文本框,可以输入和显示文本信息,同时可以设置显示格式和文本框属性,其主要函数说明如下 常用信号如下 二.实例 1. QT Designer设计UI 打开designer.exe,使用默认的Main Window创建,直接点击Create按钮即可 设计UI图如下,并保存为edit.ui 2 将edit.ui转换为ui_edit.p

stm32点亮st7735s的0.96寸lcd屏(调试中)

今天在调试这个0.96寸的lcd屏怎么也点不亮,用了卖家提供的程序只能在c8t中使用 把代码移植到f103vet6的工程居然就点不亮了???迷惑 想了一下这块和之前的1.44用的同一个ic,索性就用以前1.44寸LCD程序试试居然点亮了,这里记录一下后续继续修改 原文地址:https://www.cnblogs.com/hjf-log/p/12570258.html

LCD屏参数及应用举例

 1.  LCD参数及原理 R G B 信号 PCLK(像素时钟),LCLK(HSYNC,线时钟,水平同步时钟),FCLK(VSYNC,帧时钟,垂直同步时钟) 7寸屏一般由两种工作模式DE和时钟模式,一般都采用时钟模式.4.3寸以下(包含3.5寸屏)与7寸屏不同,需要通过SPI接口初始化. 时序(800*480):帧同步用FCLK(VSYNC),一帧数据即一个画面: 行同步用LCLK(HSYNC),一帧数据包含480个行同步信号: 像素时钟用于采集1组RGB数据,一行数据有像素时钟800个(至少

RK3288 LVDS LCD屏DTS相关参数设置

本文记录调试 LVDS接口屏的一些关键步骤,主要是dts文件中关于 频率.分辨率 .时序参数的设置 环境: RK3288 9tripod CV5 linux 4.4.189 LCD:JYT121XQ01 (追曦 DS1212)12.1电容触控屏 查看屏幕规格书 只要在rockchip dts 中 设置 T(HB)=Thb+Thf+Thsyn=320clock  T(VB)==Tvb+Tvf+Tvsyn=38 即可: 同时注意,该屏幕可以选择6位和8位模式 需要通过GPIO 控制该引脚同时需注意背

WPF布局之让你的控件随着窗口等比放大缩小,适应多分辨率满屏填充应用

一直以来,我们设计windows应用程序,都是将控件的尺寸定好,无论窗体大小怎么变,都不会改变,这样的设计对于一般的应用程序来说是没有问题的,但是对于一些比较特殊的应用,比如有背景图片的,需要铺面整个屏幕,由于存在多种不同的分辨率,所以会出现布局混乱的情况.今天我们来看看WPF中如何让我们的控件也随着分辨率放大缩小.下面来写一个例子看看效果吧~  一.普通布局中的问题 这里我们写一个简单的页面,新建WPF项目,在MainWindow里面添加按钮,如下图: 这个页面很简单,只有三个按钮,我们想的是

解决浏览器窗口变小后右侧出现空白背景颜色或者图片不能全屏填充的方法

在做全屏网页的时候会出现这样的情况: 窗口最大化显示时正常,当缩小窗口时,出现了滚动条,将滚动条拖动到右侧就会出现空白,背景颜色都不显示但是元素还在例如下图: 全屏显示正常的,然后把窗口缩小 就会出现这样的效果,解决办法就是给body加一个最小高度,至于数值大小取决于网页的基本宽度,或者就是你导航元素占据的宽度(不是背景),就以此网页为例,网页主体1200px那么就在css中添加最小高度 body{ min-height:1200px; } 然后问题就解决了

LCD屏背光驱动调试心得---血的教训

开发板:明远智睿MY-IMX6-EK140 内核源码:linux-3.14.52 背光驱动IC:MP3202 调光原理:通过开发板的核心板PWM4引脚控制MP3202的EN脚,输出不同的占空比从而达到输出平均电流的不同,这样就可以达到调节背光亮度的目的 调试过程: 1.从硬件图可以看出核心板的PWM4引脚连接到了背光驱动IC MP3202的EN脚,所以我们通过搜索PWM4来找设备树上的硬件节点 2.在明远智睿MY-IMX6-EK140设备树,arch/arm/boot/dts/myimx6ek1