2886|1

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

12864液晶显示汉字程序中的问题 [复制链接]

如题,以下是12864显示字符的完整代码:
#include"DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#define          EN         GpioDataRegs.GPBDAT.bit.GPIO33
#define          RW         GpioDataRegs.GPBDAT.bit.GPIO32
#define          RS         GpioDataRegs.GPADAT.bit.GPIO20
#define          uchar         unsigned char
extern uchar menu1[]={"选择电机定时设置"};
extern uchar menu2[]={"开步进电机A"};
extern uchar menu3[]={"开步进电机B"};
extern uchar menu4[]={"开步进电机C"};
void LCDInit(void);
void Write_order(Uint16 order);
void Write_data(Uint16 data);
void delay(Uint16 t);
void configio(void);
//void InitXintf(void);
void display(uchar *hz);

void LCD_DATA(uchar d){
   Uint32 i=0;
   i = GpioDataRegs.GPADAT.all;
   i |= (d<<6)&0x3FC0;
   i = (~((d<<6)&0x3FC0))|(~i);
   GpioDataRegs.GPADAT.all = ~i;
}
void LCDInit(void)
{
  delay(500);
  Write_order(0x30);// 功能设定:基本指令动作
  delay(5);
  Write_order(0x0c);//显示状态:开
  delay(5);
  Write_order(0x01);//清屏
  delay(6);
  Write_order(0x02);//地址归位:AC=0x00
  delay(4);
}

void Write_order(Uint16 order)
{
   RS=0;delay(1);
   RW=0;delay(1);
   EN=1;delay(1);
   LCD_DATA(order);
   delay(10);
   EN=0;delay(1);
}

void Write_data(Uint16 data)
{
   RS=1;delay(1);
   RW=0;delay(1);
   EN=1;delay(1);
   LCD_DATA(data);
   delay(10);
   EN=0;delay(1);
}

void delay(Uint16 t)
{
   Uint16 i;
   while(t--)
    {
      for(i=0;i<125;i++);
    }
}

void configio(void)
{
    EALLOW;
        GpioCtrlRegs.GPAMUX1.all &= 0xc03f;
        GpioCtrlRegs.GPADIR.all |= 0x00003FC0;
    GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1;
    GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0;
    GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1;
    GpioCtrlRegs.GPAMUX2.bit.GPIO20= 0;
    GpioCtrlRegs.GPADIR.bit.GPIO20 = 1;
    EDIS;
}

void display(uchar *hz)
{
   while(*hz!='\0')
    {
       Write_data(*hz);
       hz++;
       delay(2);
    }
}

void main(void)
{
    InitSysCtrl();
  //  InitXintf();
    InitXintf16Gpio();
    DINT;
    InitPieCtrl();
    IER=0x0000;
    IFR=0x0000;

    configio();
    RS=0;
    delay(5);
    RW=0;
    delay(5);
    EN=0;
    LCDInit();
    delay(5);
    Write_order(0x01);
    delay(50);
    Write_order(0x80);
    delay(5);
    display(menu1);

    Write_order(0x91);
    delay(5);
    display(menu2);

    Write_order(0x89);
    delay(5);
    display(menu3);

    Write_order(0x99);
    delay(5);
    display(menu4);

    while(1);
}
我想请教一下void LCD_DATA(uchar d)
{
   Uint32 i=0;
   i = GpioDataRegs.GPADAT.all;
   i |= (d<<6)&0x3FC0;
   i = (~((d<<6)&0x3FC0))|(~i);
   GpioDataRegs.GPADAT.all = ~i;
} 这一小段代码中GpioDataRegs.GPADAT.all的值是多少呀,以及这段代码它实现的是什么功能?这个程序已经困扰我好几天了,跪求高手指点!!!在此先感谢了!

最新回复

不要光看程序,要对照着硬件。把硬件吃透了,程序看起来也就简单了。 void LCD_DATA(uchar d) {    Uint32 i=0;    i = GpioDataRegs.GPADAT.all;    i |= (d  详情 回复 发表于 2014-5-21 12:54
 
点赞 关注

回复
举报

2856

帖子

260

TA的资源

五彩晶圆(高级)

沙发
 
不要光看程序,要对照着硬件。把硬件吃透了,程序看起来也就简单了。
void LCD_DATA(uchar d)
{
   Uint32 i=0;
   i = GpioDataRegs.GPADAT.all;
   i |= (d<<6)&0x3FC0;
   i = (~((d<<6)&0x3FC0))|(~i);
   GpioDataRegs.GPADAT.all = ~i;
}
简化后
void LCD_DATA(uchar d)
{
   Uint32 i=0;
  GpioDataRegs.GPADAT.all = (d<<6)&0x3FC0;
}
还有就事数据线是GPIOA6~GPIOA13
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表