打印
[DSP编程]

关于12864液晶显示的问题 下面是程序代码 下载进2812以后胡乱显示

[复制链接]
1189|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
小梨儿|  楼主 | 2014-3-18 13:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求大神指导,究竟要怎么写才对啊!!弄了好几天也弄不出来:'(ps:12864为串行,sclk为clk,std为sid)
#define comm  0  //指令0
#define datt   1 //数据1
void delay(unsigned int t);
void lcd_wcmd(uchar dat_comm,uint content);
void lcd_init_();
void lcd_pos(uchar X,uchar Y);
void clrram ();
void wr_byte0();
void wr_byte1();
//void chn_dat(int f);
void chn_disp (uchar  *chn) ;
uchar tab1[]={"当前纸浆浓度为:"};
uchar tab2[]={"比例系数为:    "};
uchar tab3[]={"K=10            "};
void delay(unsigned int t)            
{
  while(t>0) t--;
  
}
/*----------------LCD写位操作0 -----------------*/
void wr_byte0()
{
sclk=0;
std=0;
  delay(1);
sclk=1;
std=0;
  delay(2);
sclk=0;
std=0;
delay(1);
}
/*----------------LCD写位操作1 -----------------*/
void wr_byte1()
{ sclk=0;
  std=0;
  delay(1);
  std=1;
  sclk=1;
  delay(2);
  sclk=0;
  std=0;
  delay(1);
}
void lcd_wcmd(uchar dat_comm, uint content)
{
  uint i,j;
  sclk=0;
  std=0;
  delay(1);
  for(i=0;i<5;i++)
  wr_byte1();                                                                  
  wr_byte0();
  if(dat_comm)
      wr_byte1();   //data
  else
      wr_byte0();   //comman
  wr_byte0();
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
          if(content&0x80)
        wr_byte1();
      else
            wr_byte0();
            content=content<<1;
    }
    for(i=0;i<4;i++)
      wr_byte0();
  }
  delay(3);               
}

/******************************************************************/
/*                   液晶初始化-字库                              */
/******************************************************************/
void     lcd_init_()           //LCD字库初始化程序                  
{
  CSOUT;
  SIDOUT;
  CLKOUT;
  RSTOUT;
  RST0;
  delay(100);
  RST1;
  lcd_wcmd (comm,0x30);//30---基本指令动作
  lcd_wcmd (comm,0x01); // 清屏,地址指针指向00H
  lcd_wcmd (comm,0x06);  //光标的移动方向
  lcd_wcmd (comm,0x0a);  //开显示,关游标  
}        
void lcd_pos(uchar X,uchar Y)
{
   uchar pos;
   if(X==0)
   {X=0x80;}
   else if(X==1)
   {X=0x90;}
   else if(X==2)
   {X=0x88;}
   else if(X==3)
   {X=0x98;}
   pos=X+Y;
   lcd_wcmd(comm,pos);
}
void clrram ()                  
{
  lcd_wcmd(comm,0x34);
  delay(5);
  lcd_wcmd (comm,0x30);
  delay(5);
  lcd_wcmd (comm,0x01);
  delay(5);
}     
void chn_disp (uchar  *chn)  
{
  uchar i,j;
  lcd_wcmd (comm,0x30);
  lcd_wcmd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    lcd_wcmd (datt,chn[j*16+i]);
  }
}   
// void chn_dat(int f)
// {
  // int K;
  // volatile int c;
  // K=10;
  // c=K/f;
  // printf("c=%d/n,c");

// }
/******************************************************************/
/*                    主程序                                      */
/******************************************************************/
void    main(void)
{  InitSysCtrl();
        InitPieCtrl();
        InitPieVectTable();       
        InitGpio();
        delay(1000);
    clrram();                 
        delay(0xffff);                                      
    lcd_init_();
          while(1)
            {
                  lcd_pos(0,0);
                  //for (i=0;i<16;i++)
              {
                    chn_disp(tab2);
                        delay(1000);
                  }
                 
                  lcd_pos(1,0);                  
                  {         
                  //for (i=0;i<16;i++)
                    chn_disp(tab1);
                        delay(1000);
                  }
                   /*lcd_pos(3,0);
                  {
            chn_dat(5);
                        delay(1000);
                  }*/
                  /* lcd_pos(3,0);
                  {
                    chn_disp(tab3);
                        delay(0xffff);
                  }*/
                 for(i=0;i<50;i++)
           {
        delay(0xffff);        
       }
       clrram();
        }
}
目的就是想让他分行显示,控制每一行怎么显示,可是老是显示乱码,不知道问题出在哪里,还望大神赐教!!

相关帖子

沙发
zhangmangui| | 2014-3-18 19:10 | 只看该作者
用IO口模拟的吗  

使用特权

评论回复
板凳
小梨儿|  楼主 | 2014-3-19 17:55 | 只看该作者
zhangmangui 发表于 2014-3-18 19:10
用IO口模拟的吗

用的GPIO口 我有实验板 程序下载到板子里以后老是胡乱显示 不知道为什么

使用特权

评论回复
地板
zhangmangui| | 2014-3-19 18:21 | 只看该作者
小梨儿 发表于 2014-3-19 17:55
用的GPIO口 我有实验板 程序下载到板子里以后老是胡乱显示 不知道为什么

重点看看延时等是否符合时序

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝