• 我的 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 }


  • 相关阅读:
    算法之二叉树各种遍历
    File类基本操作之OutputStream字节输出流
    W3C DOM 事件模型(简述)
    Linux多线程编程小结
    linux下getsockopt和setsockopt具体解释及測试
    MyBatis入门学习(一)
    [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use &#39;track by&#39; expression to specify uniq
    java中substring的使用方法
    Java Map遍历方式的选择
    E6全部刷机包
  • 原文地址:https://www.cnblogs.com/crazyxu/p/2054043.html
Copyright © 2020-2023  润新知