模吧

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

10332查看 | 50回复

[DIY交流] 12864 更新已上传源码

  [复制链接]
发表于 2017-1-2 04:09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 ldy7474 于 2017-1-2 23:41 编辑

终究不是写代码的料磕磕拌拌
研究了一宿终于点亮JLX12864
内牛蛮面

     首先感谢萝莉大神一直孜孜不倦
        为我等小白传道授业解惑
        借用老师的座右铭
        为了星辰大海
        衷心希望萝莉老大的课程能够继续开展下去
        催更催更。。。。。
        硬件直接使用的是萝莉3代的。
        电路参照3代的LCD电路图即可。
         
        全篇做了详细注释。
        沉长的初始化代码
        可以省略不看,看了你也记不住
        以后要用到,直接贴过去,修改下引脚定义即可。
        重点看下主函数里的4段代码然后自己实验一下
        多练练手基本上就能玩转了
        //调用Display16x16();这段代码就可以显示你自己
        //想要显示的汉字 总共4段代码分别显示4个汉字
        //括号里的(1,1,)(1,16)等。。。。分别代表你想要
        //在12864的那个位置显示汉字有兴趣的同学可以试着修改
        //括号里的值然后编译一下看看下载到单片机里
        //观察一下假设把Display16x16(1,1,zhon);
        //第一段代码括号里的值修改为(5,64,zhon);
        //看看多改几次你就明白该怎么玩12864了
        //剩下的大家自由发挥哈哈       


12864 更新已上传源码 传道授业解惑,星辰大海,传道授业,写代码的,孜孜不倦 作者:ldy7474 2582 12864 更新已上传源码 传道授业解惑,星辰大海,传道授业,写代码的,孜孜不倦 作者:ldy7474 6739 12864 更新已上传源码 传道授业解惑,星辰大海,传道授业,写代码的,孜孜不倦 作者:ldy7474 9674
改明上传源码
12864 更新已上传源码 传道授业解惑,星辰大海,传道授业,写代码的,孜孜不倦 作者:ldy7474 2763
12864 更新已上传源码 传道授业解惑,星辰大海,传道授业,写代码的,孜孜不倦 作者:ldy7474 8168
12864 更新已上传源码 传道授业解惑,星辰大海,传道授业,写代码的,孜孜不倦 作者:ldy7474 1367

#include <reg51.h>
#include <intrins.h>
//#define uchar unsigned char
//#define uint  unsigned int
#define u8 unsigned char
#define u16  unsigned int

/*****************************************************/
//STC12 系列新增寄存器

sfr P0M0=0x94;
sfr P1M1=0x91;
sfr P1M0=0x92;
sfr P2M1=0x95;
sfr P2M0=0x96;
sfr P3M0=0xb2;
sfr P3M1=0xb1;
sfr P4M0=0xb4;
sfr P4=0xc0;
sfr P4SW=0xbb;
sfr P5M1=0xC9;
sfr P5M0=0xCA;
sfr IPH=0xb7;
sfr P1ASF=0x9d;
sfr ADC_CONTR=0xbc;
sfr ADC_RES=0xbd;
sfr ADC_RESL=0xbe;
/*******萝莉控LCD引脚***************/
sbit CS=P0^6;  //片选 低电平有效
sbit RST=P0^7; //复位 低电平复位复位完成后回到高电平开始工作
sbit RS=P4^6;  //指令寄存器 H 1 数据 L 0命令
sbit SDA=P4^5;//串行数据输入信号
sbit SCK=P4^4;//串行时钟 使能信号(E) 到高有效
sbit LEDA=P2^5;
u8 lcd[10];//显示缓存


void Delay1ms()     //@12.000MHz
{
    u8 i, j;

    i = 12;
    j = 169;
    do
    {
        while (--j);
    } while (--i);
}

void DelayMs(u16 i)  //延时N毫秒,0~65535ms
{
   while(i--) Delay1ms();
}


/*****************液晶屏函数**********************/
/*写指令到 LCD 模块*/
void Command(u8 Data)
{
    u8 i;
    CS=0;//片选=0
    RS=0;//低L 0命令 H 1 数据
    for(i=0;i<8;i++)
    {
        SCK=0;//首先拉低然后传一位数据
        if(Data&0x80)//用传过来的数据Data和0x80进行&与运算
                //0x80转为2进制1000 0000
                // 1与0=0
                // 1与1=1
                SDA=1;//判断输入的数据是否是1
        else SDA=0;//否则SDA为0
        SCK=1;        //传送结束后拉高锁存一位数据
        Data=Data<<=1;//然后data的第7位左移
    }
}

/*写数据到 LCD 模块*/
void SendData(u8 Data)
{
    u8 i;
    CS=0;//片选=0
    RS=1;//低L 0命令 H 1 数据
    for(i=0;i<8;i++)
    {
        SCK=0;//首先拉低然后传一位数据
        if(Data&0x80)//用传过来的数据Data和0x80进行&与运算
                 SDA=1;//判断输入的数据是否是1
        else SDA=0;//否则SDA为0
        SCK=1;//传送结束后拉高锁存一位数据
        Data=Data<<=1;//然后data的第7位左移
    }
}

/*LCD 模块初始化*/
void InitLCD()
{
    CS=0;  //片选 低电平有效
    RST=0;  /*低电平复位*/
    DelayMs(2);
    RST=1;  /*复位完毕*/
    DelayMs(10);
    Command(0xE2);  /*软复位*/
    DelayMs(1);
    Command(0x2C); /*升压步聚 1*/
    Command(0x2E); /*升压步聚 2*/
    Command(0x2F); /*升压步聚 3*/
    DelayMs(1);
    Command(0x23); /*粗调对比度,可设置范围 0x20~0x27*/
    Command(0x81); /*微调对比度*/
    Command(0x28); /*0x1a,微调对比度的值,可设置范围 0x00~0x3f*/
    Command(0xA2); /*1/9 偏压比(bias)*/
    Command(0xC8); /*行扫描顺序:从上到下*/
    Command(0xA0); /*列扫描顺序:从左到右*/
    Command(0x40); /*起始行:第一行开始*/
    Command(0xAF); /*开显示*/
    CS=1;
}

/*设置液晶屏的显示地址*/
void Address(u8 Page,u8 Column)
{
    CS=0;
    Column=Column-1;//我们平常所说的第 1 列,
        //在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1.
    Page=Page-1;
    Command(0xB0+Page); //设置页地址。每页是 8 行。
        Command(((Column>>4)&0x0F)+0x10); //设置列地址的高 4 位
    Command(Column&0x0F);   //设置列地址的低 4 位
}

/*全屏清屏*/
void ClearScreen()
{
    u8 i,j;
    CS=0;
    for(i=0;i<9;i++)
    {
        Address(1+i,1);
        for(j=0;j<132;j++)
            {
        SendData(0x00); /*写数据到 LCD,
                //每写完一个 8 位的数据后列地址自动加 1*/
            }
    }
    CS=1;
}

/*显示 12864 点阵图像*/

void Display128x64(u8 *dp)
{
  u8 i,j;
  CS=0;
  
  for(j=0;j<8;j++)
  {
      Address(j+1,1);
      for (i=0;i<128;i++)
      {
          SendData(*dp);  /*写数据到 LCD,
                  //每写完一个 8 位的数据
                  //后列地址自动加 1*/
          dp++;
      }
  }
  CS=1;
}

/*显示 16x16 点阵图像、汉字、生僻字或 16x16 点阵的其他图标*/
void Display16x16(u8 Page,u8 Column,u8 *dp)
{
    u8 i,j;
    CS=0;
    for(j=0;j<2;j++)
    {
        Address(Page+j,Column);
        for (i=0;i<16;i++)
            {
            SendData(*dp);  /*写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1*/
                dp++;
            }
    }
    CS=1;
}
/***********************液晶屏函数结束****************/
/***液晶屏字库大家可以自由添加自己的字库******/
/***液晶屏字库取模软件zimo221.exe百度大把******/
/***还有详细的使用教程******/
/***取出的字模贴到大括号{}里就OK******/
//终
u8 code zhon[]=
{
0x20,0x30,0xBC,0xEF,0x73,0x10,0x10,0x9F,
0xDF,0x74,0x74,0xDE,0x8E,0x04,0x00,0x00,
0x09,0x1B,0x1B,0x0D,0x05,0x05,0x01,0x09,
0x09,0x1B,0x36,0x34,0x01,0x01,0x01,0x00
};
//于
u8 code yu[]=
{
0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,
0xFE,0x42,0x42,0x43,0x63,0x62,0x40,0x00,
0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x3F,
0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
//点
u8 code diang[]=
{
0x00,0x00,0x00,0xE0,0xE0,0x20,0x20,0x3F,
0x3F,0x24,0x24,0xE4,0xE4,0x04,0x00,0x00,
0x00,0x20,0x38,0x1B,0x03,0x0A,0x3A,0x32,
0x0A,0x3A,0x32,0x0B,0x3B,0x30,0x00,0x00
};
//亮
u8 code liang[]=
{
0x00,0x82,0x82,0xBA,0xBA,0xAA,0xAB,0xAB,
0xAA,0xAA,0xBA,0xBA,0x82,0x82,0x00,0x00,
0x22,0x23,0x21,0x30,0x1E,0x0E,0x02,0x02,
0x1E,0x3E,0x20,0x22,0x23,0x39,0x38,0x00
};


void init ()           //硬件初始化
{
    ADC_CONTR=0x80;      //ADC配置
    P1ASF=0xff;
   
    LEDA=0;
    P4SW=0x70;           //允许P4 IO
    P2M0=0x20;           //推挽点亮背光
}
void main(void)
{   init (); //硬件初始化
    LEDA=1;        //开启LCD背光
    DelayMs(100);//延时100ms等待稳定运行
   
    InitLCD();//LCD初始化
    ClearScreen();//调用全屏清屏           
   
    while(1)
    {
    Display16x16(1,1,zhon);//调用显示函数显示16x16汉字、
        Display16x16(1,16,yu);//调用显示函数显示16x16汉字、
        Display16x16(1,32,diang);//调用显示函数显示16x16汉字、
        Display16x16(1,48,liang);//调用显示函数显示16x16汉字、
        //调用Display16x16();这段代码就可以显示你自己
        //想要显示的汉字 总共4段代码分别显示4个汉字
        //括号里的(1,1,)(1,16)等。。。。分别代表你想要
        //在12864的那个位置显示汉字有兴趣的同学可以试着修改
        //括号里的值然后编译一下看看下载到单片机里
        //观察一下假设把Display16x16(1,1,zhon);
        //第一段代码括号里的值修改为(5,64,zhon);
        //看看多改几次你就明白该怎么玩12864了
        //剩下的大家自由发挥哈哈       
    }
}
发表于 2017-1-2 05:28:36 | 显示全部楼层
顶顶顶顶顶顶
发表于 2017-1-2 05:33:39 | 显示全部楼层
路过帮顶
发表于 2017-1-2 05:51:18 | 显示全部楼层
技术贴 帮顶
发表于 2017-1-2 06:16:07 | 显示全部楼层
不错帮顶
发表于 2017-1-2 06:43:57 | 显示全部楼层
很有成就感吧
发表于 2017-1-2 07:03:21 | 显示全部楼层
厉害了
发表于 2017-1-2 07:21:34 | 显示全部楼层
成就感满满的
发表于 2017-1-2 07:26:19 | 显示全部楼层
历害!必须顶顶顶顶顶顶
发表于 2017-1-2 07:35:32 | 显示全部楼层
不错,可惜我看不懂
发表于 2017-1-2 08:46:52 | 显示全部楼层
6666666666666666666666666  
发表于 2017-1-2 09:28:24 | 显示全部楼层
厉害了
发表于 2017-1-2 09:35:43 | 显示全部楼层
可以啊,大神
发表于 2017-1-2 09:45:29 | 显示全部楼层
看不懂
发表于 2017-1-2 09:59:45 | 显示全部楼层
好牛逼,加油
发表于 2017-1-2 10:22:08 | 显示全部楼层
很有成就感吧
发表于 2017-1-2 10:29:42 | 显示全部楼层
只要搞定了,再晚也值得!!!!!!!!!
发表于 2017-1-2 11:41:52 | 显示全部楼层
这是干什么的
发表于 2017-1-2 11:42:23 | 显示全部楼层
怎么看着像遥控器
发表于 2017-1-2 11:52:16 | 显示全部楼层
顶一个
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|关于模吧|APP下载|广告报价|手机版|企业会员|商城入驻|联系我们|模吧 ( 黔ICP备2022002348号-1 )

© 2013-2020 Moz8.com 模吧,玩出精彩!