今天决定自己尝试写LCD程序,遇到问题自己解决 看芯片手册 原理图。
努力变得更好。
还是很多根据韦东山老师视频的思路 我看了一遍,想了下,觉得要自己手动写一下可能会学到更多。
首先 大概思路:根据面向对象编程的思路,写上层函数套用下层函数,lcd.c 里面写 lcd所需要的参数的结构体,供下层函数lcd.c调用。
框架与准备
需求:让jz2440屏幕上能实现画点线圆
配置寄存器 写需求函数 寸步难行啊感觉,
头疼了一天 终于是弄出来了编译通过了 也不知道能不能用 自己还差的很远 还是要好好学习呀
今天写代码 发现自己的c语言也不是很好
巩固一下typedef struct static extern
typedef struct lcd_params_polar{
/* lcd 引脚极性 */
int vsync;
int hsync;
int vclk;
int rgb;
int vden;
int lend;
int pwren;
}lcd_pol,*p_lcd_pol;
typedef struct lcd_clock{
int tvp; // 脉冲宽度
int tvb; //垂直上面延时
int tvf; //垂直下方延时
int thp; //水平方向上脉冲宽度
int thb; //水平左方延时
int thf; //水平右方延时
int vclk;
}lcd_clk,*p_lcd_clk;
typedef struct lcd_params {
/* led参数 */
/* 引脚极性 */
lcd_pol pin_pol;
/* 时序 */
lcd_clk time_seq;
/* 分辨率,bpp */
int yres;
int xres;
int bpp; //像素深度
/* framebuffer地址 */
int fb;
}lcd_par,*p_lcd_par;
struct 是定义一个结构体,但系统不会为这个结构体分配全部的内存 只会留一个最大的成员的内存空间,
typedef 是为一个类型起一个新名字 还可以带指针 但指针使用指向成员时需要-> 不是指针的时候可以用.
lcd->pin_pol.hsync = 525;
lcd->pin_pol.vsync = 286;
lcd->xres = 480;
lcd->yres = 272;
lcd->time_seq.thb = 2 ;
lcd->time_seq.thf = 2;
lcd->time_seq.thp = 41;
就像这样
static 关键字可以用来修饰局部变量 全局变量以及函数 不同情况下作用也不一样
一般情况下 局部变量时放在栈区的 局部变量的生命再该区域块运行结束时也就结束了 但局部变量如果使用static 修饰后 该变量就会放在静态数据区,其生命一直到程序结束时才结束,
一个变量为全局变量时 该变量不仅当前文件可以使用,其工程的其他文件也可以使用 需用extern声明
但若该全局变量被static关键词修饰后 该变量只能用于其所在的源文件内
extern不能定义变量 该关键词的含义主要在 修饰的变量不在本源文件中定义 可以在其他源文件中寻找
回来总结一下c里面的关键字