我的 sed1330 底层驱动

初始化对照数据手册,和借鉴网友写的程序很容易理解。 主要的是理解打点函数write(1,2,3,4); 我是这样理解的:
把屏幕上每一行都首位连起来,然后把他们放到 sed1300的RAM地址中,一次可以控制8位,也就是8个点,然后就是计算怎么样
控制所有的点。只要能点亮第一个8位的点,后面的就好说了。 好像还有图形模式和分区显示,在这个项目中没用到,我就没有
深入了解,等用到的时候再说吧


1 void lcd_init(void)
2 {
3 uint i;
4 LcdCommand=0x40; /* ---------LCD SYSTEM SET系统设置令,8个参数-------- */
5 LcdDataWrite=0x30;
6 LcdDataWrite=0x87;
7 LcdDataWrite=0x07;
8 LcdDataWrite=40; /* 显示域长度为320dot */
9 LcdDataWrite=0x36; /* 确定液晶工作频率 */
10 LcdDataWrite=240; /* 显示屏高度为240dot */
11 LcdDataWrite=40; /* 显示屏一行所占显示缓冲区字节数(L) */
12 LcdDataWrite=0; /* 显示屏一行所占显示缓冲区字节数(H) */
13
14 LcdCommand=0x44; /* ---------LCD SCROLL显示区设置命令,最多10个参数--------- */
15 LcdDataWrite=0x00; /* 显示1区对应的显示RAM起始高8位地址 */
16 LcdDataWrite=0x00; /* 显示1区对应的显示RAM起始低8位地址 */
17 LcdDataWrite=240; /* 显示1区占用240个dot行 */
18 LcdDataWrite=0x80; /* 显示2区对应的显示RAM起始低8位地址 */
19 LcdDataWrite=0x25; /* 显示2区对应的显示RAM起始高8位地址 */
20 LcdDataWrite=240; /* 显示2区占用240个dot行 */
21 LcdDataWrite=0x00; /* 显示3区对应的显示RAM起始低8位地址 */
22 LcdDataWrite=0x4b; /* 显示3区对应的显示RAM起始高8位地址 */
23 LcdDataWrite=0x80; /* 显示4区对应的显示RAM起始低8位地址 */
24 LcdDataWrite=0x70; /* 显示4区对应的显示RAM起始高8位地址 */
25
26 LcdCommand=0x5a; /* 水平卷动,初始化时必须清零 */
27 LcdDataWrite=0x00;
28
29 LcdCommand=0x5b; /* 各个显示区的合成方式,1个参数 */
30 LcdDataWrite=0x0c; /* 参数:显示方式为双屏图形叠加,逻辑或 */
31
32 LcdCommand=0x4c; /* 光标自动向右增一*/
33
34 LcdCommand=0x46; /* 设定光标位置命令 */
35 LcdDataWrite=0; /* 从0000位置开始 */
36 LcdDataWrite=0;
37
38 LcdCommand=0x42; /* 允许MPU连续地把显示数据写入显示区内命令 */
39 for(i=0;i<32760;i++)
40 {
41 LcdDataWrite=0x00; /* 将32K显缓全部清零,即LCD不显示任何东西 */
42 }
43
44 LcdCommand=0x59; /* 打开显示,1个参数 */
45 LcdDataWrite=0x04; /* 只显示第一个区并关闪烁 */
46 }
47
48
49
50  void SetCursor(uchar CursorHIGH,uchar CursorLOW) /* -- 设定光标,允许显示 -- */
51 {
52
53 LcdCommand=0x46; /* 设定光标位置命令 */
54 LcdDataWrite=CursorLOW;
55 LcdDataWrite=CursorHIGH;
56
57 LcdCommand=0x42; /* 允许MPU连续地把显示数据写入显示区内命令 */
58 }
59
60
61  void clearall()
62 {
63 uint i;
64 LcdCommand=0x4c; /* 光标自动向右增一*/
65
66 LcdCommand=0x46; /* 设定光标位置命令 */
67 LcdDataWrite=0; /* 从0000位置开始 */
68 LcdDataWrite=0;
69
70 LcdCommand=0x42; /* 允许MPU连续地把显示数据写入显示区内命令 */
71 for(i=0;i<32760;i++)
72 {
73 LcdDataWrite=0x00; /* 将32K显缓全部清零,即LCD不显示任何东西 */
74 }
75
76 }
77
78
79  void delay(uint u)
80 {while(u--);}
81
82
83
84
85
86 /*任意起始点写入gaoXkuan数据;px一个移动单位是字节,PY是40个字节(320X240) */
87 void write(uchar px,uchar py,uint gao,uint kuan,uchar *p)
88 {
89 uint pxy;
90 uint i=0,ii=0,iii=0;
91 for(i=0;i<gao;i++)
92 {
93 pxy=(py*40+px)+40*i;
94
95 for(ii=0;ii<(kuan/8);ii++)
96 {
97 SetCursor(pxy>>8,pxy&0xff);
98 LcdDataWrite=p[iii];
99 iii++; //元素自加 与循环无关
100 pxy++; //地址自加 内循环完重置
101 }
102   
103 }
104 }


posted on 2011-05-23 09:28  码农也疯狂  阅读(369)  评论(0编辑  收藏  举报

导航