设为首页收藏本站

arduino 单片机机器人爱好者之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2151|回复: 3

mini12864 竖屏显示 不带字库

[复制链接]

该用户从未签到

发表于 2015-7-16 10:44:40 | 显示全部楼层 |阅读模式
#define cs_mini12864 12   //片选 低电平片选
#define rst_mini12864 11 //物理重置.低电平有效
#define rs_mini12864 10   //寄存器选择 1:数据寄存器 0:指令寄存器
#define sck_mini12864 9 //时钟
#define sda_mini12864 8 //数据
//上面的脚可以自己修改
#define  Display  0xAF     //显示开启
#define  Power    0x2F           //电源全开
#define  VO       0x24     //对比度调节            
#define  AllPoint 0xA4           //非全屏显示
#define  ADCset   0xA1            //负向,131-4
#define  COMset   0xc0            //com0-com63
#define  ELECTVO  0x81     //亮度调节         调节颜色         不同的模块需要不同的  ELECTSET
#define  ELECTSET 0x2a           //亮度数值         调节颜色         不同的模块需要不同的        数值
#define  BIASSET  0xA2    //占空比1/9


void send_8bit_mini12864(unsigned char d)  //传8位数据,高位先传
{
        for(int i=0;i<8;i++)                    //循环8次,每次发送1个最高位
        {
                digitalWrite(sck_mini12864,0);       //时钟拉低,一位数据开始
                if(d&0x80)                          //与上10000000,最高位如果是1,就数据位就高
                        digitalWrite(sda_mini12864,1);
                else                                //与上10000000,最高位如果是0,就数据位就低
                        digitalWrite(sda_mini12864,0);
                digitalWrite(sck_mini12864,1);       //一位数据发送完毕,时钟拉高
                d<<=1;                              // d|ddddddd0    抛掉最高位,其余数据左移一位,最低位填0
        }
}

void write_cmd_mini12864(unsigned char cmd)  //写命令
{
        digitalWrite(cs_mini12864,0); //片选拉低,选中芯片
        digitalWrite(rs_mini12864,0); //rs为低,写入命令
        send_8bit_mini12864(cmd);     //写入8位命令
}

void write_dat_mini12864(unsigned char dat)  //写数据
{
        digitalWrite(cs_mini12864,0); //片选拉低,选中芯片
        digitalWrite(rs_mini12864,1); //rs为高,写入数据
        send_8bit_mini12864(dat);          //写入8位数据
}

void mini12864_cl()         //清屏,其实就是把所有的地址全部填成0
{         
  unsigned char x,y;
  for(y=0;y<8;y++)
  {   
    write_cmd_mini12864(0xb0+y);
    write_cmd_mini12864(0x10);               
    write_cmd_mini12864(0x00);
    for(x=0;x<132;x++)  write_dat_mini12864(0);
  }        
}

void mini12864_Init()   //初始化
{

  pinMode(cs_mini12864,OUTPUT);   //设置各个I/O为输出
  pinMode(rst_mini12864,OUTPUT);  
  pinMode(rs_mini12864,OUTPUT);
  pinMode(sck_mini12864,OUTPUT);
  pinMode(sda_mini12864,OUTPUT);  
   
  digitalWrite(cs_mini12864,LOW);  
  digitalWrite(rst_mini12864,LOW);          //物理重置
  delay(200);
  digitalWrite(rst_mini12864,HIGH);
  delay(1000);        
  write_cmd_mini12864(0xe2);                //软件重置
  delay(200);

//以下为初始设置,具体请参考数据手册

  write_cmd_mini12864(0x23);//对比度
  write_cmd_mini12864(0xa2);//BR=1/9
  write_cmd_mini12864(0xa0);//set seg direction
  write_cmd_mini12864(0xc8);//set com direction
  write_cmd_mini12864(0x2f);//set power control
  write_cmd_mini12864(0x40);//set scroll line
  write_cmd_mini12864(0x81);//SET ELECTRONIC VOLUME
  write_cmd_mini12864(0x20);//set pm: 通过改变这里的数值来改变电压
  //write_cmd(0xa6);//set inverse display           a6 off, a7 on
  //write_cmd(0xa4);//set all pixel on
  write_cmd_mini12864(0xaf);//开显示

  mini12864_cl();  //清屏
}

void write_add(unsigned char p, unsigned char l)  //页列转换
{
  write_cmd_mini12864(0xb0+p);                         //先给页数据 0-7,从上到下,页码是直接读取8位数据作为地址   
  write_cmd_mini12864(0x10+(8*l/16));        //再是列 0-127,从左到右,列是先读取高四位,后读取低四位
  write_cmd_mini12864(0x00+(8*l%16));   //低四位
}


void show_string(unsigned char p, unsigned char l,char  *string)   //在第p页的l列
{                                                                                                                                        //显示一个字符串(数组中的元素)
    unsigned int X,i=0;
   write_add(p,l);                     //页列转换函数
   while(string[i++])               //判断是否为空
   {
    X=(string[i-1]-32)*16;           //将string中的元素(ASC码)匹配到预先写好的ASC数组之中
    for(int j=0;j<16;j++) write_dat_mini12864(ASCII8_16[X++]);         //发显示数据
   }
}

void show_number(unsigned char p, unsigned char l,unsigned int d)   //在第p页的l列
{                                                                                                                                        //显示一个字数字
  char s[8];   
  unsigned char m;
  m=0;
  do      //将d分离到数组s中
  {
    s[m]=d%10;
    m++;
    d=d/10;   
  }while(d);//此时m就是d的位数  
   
   unsigned int X,i=0;
   write_add(p,l);                     //页列转换函数
   for(int z=m;z>0;z--)               //循环m次,没就是数字的位数
   {
    X=(s[z-1]+48-32)*16;           //由于此时数组中的并非ASC码,而是真真的数字,所以转换时候系数不同
    for(int j=0;j<16;j++) write_dat_mini12864(ASCII8_16[X++]);         //发显示数据
   }
}


void setup()
{
        mini12864_Init();   //初始化液晶
}

void loop()
{  
   
   show_string(0,0,"HELLO!");
   show_string(1,0,"Arduino");
   show_number(2,0,12345);
   
   show_string(6,0,"I'm Kiwi");
         
}

签到天数: 7 天

[LV.3]偶尔看看II

发表于 2015-7-16 13:42:52 | 显示全部楼层
什么都没有,就程序,屏的资料也没有?
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2015-7-16 17:49:48 | 显示全部楼层
这个是资料
2345_image_file_copy_1.jpg
2345_image_file_copy_2.jpg
2345_image_file_copy_3.jpg
2345_image_file_copy_4.jpg
回复 支持 反对

使用道具 举报

签到天数: 4 天

[LV.2]偶尔看看I

发表于 2017-2-24 09:07:51 | 显示全部楼层
学习学习,很好的资料
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|联系我们|YFRobot ( 苏ICP备13017135  

GMT+8, 2018-12-13 07:42 , Processed in 0.099745 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表