找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2482|回复: 2
收起左侧

编程求助,单片机控制12864滚动显示

[复制链接]
ID:100996 发表于 2015-12-29 09:56 | 显示全部楼层 |阅读模式
本帖最后由 lm023 于 2015-12-29 12:23 编辑

程序如下
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sbit p_rst=P2^5;
sbit p_csl=P2^4;
sbit p_csr=P2^3;
sbit p_di=P2^2;
sbit p_rw=P2^1;
sbit p_e=P2^0;

uchar code xingming[]=
{
0x20,0x82,0x20,0x82,0x2A,0x45,0x2A,0x45,0xAA,0x25,0x6A,0x15,0x3E,0x0D,0x2B,0xFF,
0xAA,0x04,0xAA,0x0C,0xEA,0x14,0xAA,0x24,0x2A,0x65,0x22,0xC2,0x20,0x42,0x00,0x00,

0x08,0x01,0x08,0x41,0x88,0x80,0xFF,0x7F,0x48,0x42,0x8C,0x24,0xE4,0x18,0x9C,0x16,
0x80,0x21,0x44,0x48,0x44,0x48,0xFC,0x4F,0x42,0x48,0x42,0x48,0x42,0x40,0x00,0x00,

};
uchar code xuehao[]=
{
0x00,0x00,0x10,0x20,0xF0,0x3F,0x00,0x20,//1//0

0x00,0x00,0x10,0x20,0xF0,0x3F,0x00,0x20,//1//1

0x30,0x38,0x88,0x20,0x70,0x1F,0x00,0x00,//3//2

0x00,0x00,0x10,0x20,0xF0,0x3F,0x00,0x20,//1//3

0xF0,0x1F,0x08,0x21,0x98,0x20,0x00,0x1F,//6//4

0xF0,0x1F,0x08,0x20,0xF0,0x1F,0x00,0x00,//0//5

0x30,0x38,0x88,0x20,0x70,0x1F,0x00,0x00,//3//6

0xF0,0x1F,0x08,0x20,0xF0,0x1F,0x00,0x00,//0//7

0x70,0x38,0x08,0x27,0xF0,0x30,0x00,0x00,//2//8

0x70,0x38,0x08,0x27,0xF0,0x30,0x00,0x00,//2//9

0xF0,0x1F,0x08,0x21,0x98,0x20,0x00,0x1F,//6//10

};
void delay(unsigned int k) //延时函数
{
  unsigned int a,b;
  for(a=0;a<k;a++) ;
  for(b=0;b<20;b++)        ;
}
//复位子函数
void reset()
{           
    p_rst=0;
    delay(20);
    p_rst=1;
   delay(20);
}
void lcd_busy(void)        //忙检测
{        
        P0=0x00;
        p_di=0;
    p_rw=1;
        p_e=1;
        while(P0 & 0x80);
        p_e=0;
}
//写指令到LCM
void wcode(uchar c,uchar csl,uchar csr)
{         
    p_csl=csl;
    p_csr=csr;
    lcd_busy();
    p_di=0;
    p_rw=0;
    P0=c;//将变量C赋予LCM
    p_e=1;
    p_e=0;
}
//写数据到LCM子函数
void wdata(uchar c,uchar csl,uchar csr)
{         
    p_csl=csl;
    p_csr=csr;
    lcd_busy();
    p_di=1;
    p_rw=0;
    P0=c;//将变量C赋予LCM
    p_e=1;
    p_e=0;
}
//设定起始行
void set_startline(uchar i)
{         
    i=0xc0+i;
    wcode(i,1,1);
}
//定位x,y方向
void set_xy(uchar x,uchar y)
{         
    x=x+0x40;
    y=y+0xb8;         
    wcode(x,1,1);
    wcode(y,1,1);
}

////屏幕开启、关闭
void dison_off(uchar o)
{         
    o=o+0x3e;  //o为1为开,为0是关
    wcode(o,1,1);
}
//写数据到LCM
void lw(uchar x,uchar y,uchar dd)
{         
     if(x>=64)
     { set_xy(x-64,y);
       wdata(dd,0,1);
     }
     else
         { set_xy(x,y);
           wdata(dd,1,0);
         }
}
//LCM初始化
void lcd_init(void)
{         
    uchar x,y;
    reset();
    dison_off(0);
    for(y=0;y<8;y++)
     { for(x=0;x<128;x++)
         lw(x,y,0);
      }
    dison_off(1);
   set_startline(0);
}

void disp_Hz(uchar xx,uchar yy,uchar n,uchar fb)//xx为该行第xx个字,共8字,yy为第几行,共8行。
{        
        uchar i,dx;   
    for(i=0;i<16;i++)
         {        dx=xingming[2*i+n*32]; //2*i为选择偶数行,因其为列扫描
           if(fb)
                  dx=255-dx;//反白显示
                lw(xx*16+i,yy,dx);
                dx=xingming[(2*i+1)+n*32];
                if(fb)
                 dx=255-dx;
                lw(xx*16+i,yy+1,dx);
          }
}
void disp_Ez(uchar xx,uchar yy,uchar n,uchar fb)//显示数字或英语
{  uchar i,dx;
    for(i=0;i<8;i++)
     {        dx=xuehao[2*i+n*16];
                    if(fb)
                          dx=255-dx;
                        lw(xx*8+i,yy,dx);//
              dx=xuehao[(2*i+1)+n*16];
                        if(fb)
                         dx=255-dx;
                        lw(xx*8+i,yy+1,dx);

          }

}

  void main()
{

    lcd_busy();
    reset();
        lcd_init();

        while(1)
        {

        }
}
程序的功能是讲数组里面的信息 在LCD12864上滚动显示
初学,不明白主程序里面该写什么,希望指点一下。拜谢

回复

使用道具 举报

ID:99938 发表于 2015-12-29 13:21 | 显示全部楼层
你的.c文件里的函数功能太小了,有一个函数能专门显示数字的,直接调用就可以了
回复

使用道具 举报

ID:100996 发表于 2015-12-29 13:54 | 显示全部楼层
shenjinliang 发表于 2015-12-29 13:21
你的.c文件里的函数功能太小了,有一个函数能专门显示数字的,直接调用就可以了

谢谢,才初学,不会,能具体些么
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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