打印
[Cortex-M0技术交流]

[2012助学第一期]hzy41y学习笔记之一(4数据线驱动LCD802)

[复制链接]
1973|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hzy41y|  楼主 | 2012-6-6 10:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
NUC120_JHD802A.rar (655.26 KB) 1.功能说明:
    基于助学板,采用PA口4条数据线实现对JHD802A的简单驱动。

2.程序说明。


//***基于助学板采用PA口4条数据线实现对JHD802A的简单驱动***//
//作者:hzy41y
//最后更新日期2012年06月06日10:10
/* NUC120              JHD802A
--------|           |-----------|
        |     4     |        VDD|-------+5V
    GPA7|-----------| DB7       |
    GPA6|-----------| DB6       |   
    GPA5|-----------| DB5       |
    GPA4|-----------| DB4       |
        |           |        VSS|________0V
    PC14|-----------| RS        |   |
    PC15|-----------| R/W       |   |
    PC6 |-----------| E         |   |
        |           |        VEE|___|
--------|           |-----------|
JHD802A接口
1    2    3   4    5   6   7    8    9   10   11   12   13   14
VSS  VCC  VEE  RS  R/W  E  DB0  DB1  DB2  DB3  DB4  DB5  DB6  DB7

*/
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"

#define RS_Set DrvGPIO_SetBit(E_GPC,14)
#define RW_Set DrvGPIO_SetBit(E_GPC,15)
#define E_Set DrvGPIO_SetBit(E_GPC,6)
#define RS_Clr DrvGPIO_ClrBit(E_GPC,14)
#define RW_Clr DrvGPIO_ClrBit(E_GPC,15)
#define E_Clr DrvGPIO_ClrBit(E_GPC,6)
#define LED_Clr DrvGPIO_ClrBit(E_GPA,2)
#define LED_Set DrvGPIO_SetBit(E_GPA,2)

void GPIO_Configuration(void)
{ DrvGPIO_Open( E_GPC, 6, E_IO_QUASI ); //标准数字双向口
  DrvGPIO_Open( E_GPC, 14, E_IO_QUASI );
  DrvGPIO_Open( E_GPC, 15, E_IO_QUASI );
  DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
  DrvGPIO_Open( E_GPA, 4, E_IO_QUASI );
  DrvGPIO_Open( E_GPA, 5, E_IO_QUASI );
  DrvGPIO_Open( E_GPA, 6, E_IO_QUASI );
  DrvGPIO_Open( E_GPA, 7, E_IO_QUASI );
}

//*****************延时子函数(12MHZ,1MS)********************//
void delay_ms(uint32_t count)
{   uint32_t i,j;
    for(i=count;i>0;i--)
    for(j=2395;j>0;j--);
}

//******************读802忙标志位BF*************************//
uint8_t read802()
{ uint8_t i;
   RS_Clr; RW_Set; E_Set;
delay_ms(1);
   i=DrvGPIO_GetBit(E_GPA,7);  //第一次读出的是LCD的高四位数据
   E_Clr; // E=0;
   return i;
}


//**************写指令到802A指令寄存器IR*******************//
void WriteIR802(uint8_t i){
  while(read802());//读802忙标志位BF
   
  RW_Clr; RS_Clr; E_Clr;
  DrvGPIO_SetPortBits(E_GPA, i);  // 第一次写入LCD的高四位数据
  E_Set;
  delay_ms(1);
  E_Clr;
  DrvGPIO_SetPortBits(E_GPA, i<<4);  //第二次写入LCD的低四位数据
  E_Set;
  delay_ms(1);
  E_Clr;
}
//****************写1字节数据到--DR**********************//
void WriteDR(uint8_t x){
    while(read802());//读802忙标志位BF
    RS_Set; RW_Clr; E_Clr;
    GPIOA->DOUT =x;         //第一次写入LCD的高四位数据
E_Set;
delay_ms(1);
E_Clr;
    GPIOA->DOUT =x<<4;      //第二次写入LCD的低四位数据
E_Set;
delay_ms(1);
E_Clr;  
}  
//*******************初始化802A*************************//
void init802(void){
   WriteIR802(0x28);//写指令:功能设置4位数据总线;显示2行;字符点阵字体5*8.
   WriteIR802(0x01);   //写指令:清除屏幕
   WriteIR802(0x06);   //写指令:输入方式设置AC自动加1.
   WriteIR802(0x0c);   //写指令:开显示
}

int main (void)      
{ UNLOCKREG();          //  芯片注册解锁
  SYSCLK->PWRCON.XTL12M_EN = 1;      //  设定12M外部晶振
  DrvSYS_Delay(5000);        //  等待时钟就绪
  GPIO_Configuration();
  init802();
  WriteIR802(0x80);  //设定写入第一行0x00地址 地址只有7位,最高位为特殊位
  WriteDR('U');
  WriteDR('N');
WriteDR('C');
WriteDR('1');
WriteDR('2');
WriteDR('0');
WriteDR('_');
WriteIR802(0xc0);  //设定写入第二行0x43地址 地址只有7位,最高位为特殊位
WriteDR('J');
WriteDR('H');
WriteDR('D');
WriteDR('8');
WriteDR('0');
WriteDR('2');
WriteDR('A');
  while(1);
}




相关帖子

沙发
hzy41y|  楼主 | 2012-6-6 10:30 | 只看该作者
不会在网叶中加入“复制代码 :'(”

使用特权

评论回复
板凳
hzy41y|  楼主 | 2012-6-6 10:43 | 只看该作者
原来这样加入代码:lol
//***基于助学板采用PA口4条数据线实现对JHD802A的简单驱动***//
//作者:hzy41y
//最后更新日期2012年06月06日10:10
/* NUC120 JHD802A
NUC120              JHD802A
--------|               |-----------|
           |        4     |          VDD|-------+5V
   GPA7|-----------| DB7         |
   GPA6|-----------| DB6         |   
   GPA5|-----------| DB5         |
   GPA4|-----------| DB4         |
           |               |          VSS|________0V
    PC14|-----------| RS           |     |
    PC15|-----------| R/W         |     |
     PC6 |-----------| E             |     |
           |                |          VEE|___|
--------|                |-----------|
JHD802A接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14
VSS VCC VEE RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7

*/

#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"

#define RS_Set DrvGPIO_SetBit(E_GPC,14)
#define RW_Set DrvGPIO_SetBit(E_GPC,15)
#define E_Set DrvGPIO_SetBit(E_GPC,6)
#define RS_Clr DrvGPIO_ClrBit(E_GPC,14)
#define RW_Clr DrvGPIO_ClrBit(E_GPC,15)
#define E_Clr DrvGPIO_ClrBit(E_GPC,6)
#define LED_Clr DrvGPIO_ClrBit(E_GPA,2)
#define LED_Set DrvGPIO_SetBit(E_GPA,2)

void GPIO_Configuration(void)
{ DrvGPIO_Open( E_GPC, 6, E_IO_QUASI ); //标准数字双向口
DrvGPIO_Open( E_GPC, 14, E_IO_QUASI );
DrvGPIO_Open( E_GPC, 15, E_IO_QUASI );
DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
DrvGPIO_Open( E_GPA, 4, E_IO_QUASI );
DrvGPIO_Open( E_GPA, 5, E_IO_QUASI );
DrvGPIO_Open( E_GPA, 6, E_IO_QUASI );
DrvGPIO_Open( E_GPA, 7, E_IO_QUASI );
}

//*****************延时子函数(12MHZ,1MS)********************//
void delay_ms(uint32_t count)
{ uint32_t i,j;
for(i=count;i>0;i--)
for(j=2395;j>0;j--);
}

//******************读802忙标志位BF*************************//
uint8_t read802()
{ uint8_t i;
RS_Clr; RW_Set; E_Set;
delay_ms(1);
i=DrvGPIO_GetBit(E_GPA,7); //第一次读出的是LCD的高四位数据
E_Clr; // E=0;
return i;
}


//**************写指令到802A指令寄存器IR*******************//
void WriteIR802(uint8_t i){
while(read802());//读802忙标志位BF

RW_Clr; RS_Clr; E_Clr;
DrvGPIO_SetPortBits(E_GPA, i); // 第一次写入LCD的高四位数据
E_Set;
delay_ms(1);
E_Clr;
DrvGPIO_SetPortBits(E_GPA, i<<4); //第二次写入LCD的低四位数据
E_Set;
delay_ms(1);
E_Clr;
}

//****************写1字节数据到--DR**********************//
void WriteDR(uint8_t x){
while(read802());//读802忙标志位BF
RS_Set; RW_Clr; E_Clr;
GPIOA->DOUT =x; //第一次写入LCD的高四位数据
E_Set;
delay_ms(1);
E_Clr;
GPIOA->DOUT =x<<4; //第二次写入LCD的低四位数据
E_Set;
delay_ms(1);
E_Clr;
}

//*******************初始化802A*************************//
void init802(void){
WriteIR802(0x28);//写指令:功能设置4位数据总线;显示2行;字符点阵字体5*8.
WriteIR802(0x01); //写指令:清除屏幕
WriteIR802(0x06); //写指令:输入方式设置AC自动加1.
WriteIR802(0x0c); //写指令:开显示
}


int main (void)
{ UNLOCKREG(); // 芯片注册解锁
SYSCLK->PWRCON.XTL12M_EN = 1; // 设定12M外部晶振
DrvSYS_Delay(5000); // 等待时钟就绪
GPIO_Configuration();
init802();
WriteIR802(0x80); //设定写入第一行0x00地址 地址只有7位,最高位为特殊位
WriteDR('U');
WriteDR('N');
WriteDR('C');
WriteDR('1');
WriteDR('2');
WriteDR('0');
WriteDR('_');

WriteIR802(0xc0); //设定写入第二行0x43地址 地址只有7位,最高位为特殊位
WriteDR('J');
WriteDR('H');
WriteDR('D');
WriteDR('8');
WriteDR('0');
WriteDR('2');
WriteDR('A');
while(1);
}

使用特权

评论回复
地板
jxc827| | 2012-6-6 20:35 | 只看该作者
怎么加的?我也不会呢,呵呵

使用特权

评论回复
5
hotpower| | 2012-6-8 07:43 | 只看该作者
收到助学板了?

使用特权

评论回复
6
hotpower| | 2012-6-8 11:19 | 只看该作者
继续努力,拿回订金

使用特权

评论回复
7
hzy41y|  楼主 | 2012-6-8 15:31 | 只看该作者
5月27日就收到了,在 《2012年度新唐Cortex-M0助学开发套件有约束条件赠送申报贴》的第94楼已上艳照了谢谢菜农。

使用特权

评论回复
8
qxc16b| | 2012-6-15 09:50 | 只看该作者
LCD1602可用四位数据驱动吗?

使用特权

评论回复
9
xwj| | 2012-6-15 09:53 | 只看该作者
当然可以

使用特权

评论回复
10
hotpower| | 2012-6-15 11:26 | 只看该作者
今晚返还订金

使用特权

评论回复
11
hzy41y|  楼主 | 2012-7-3 11:14 | 只看该作者
自顶一吓

使用特权

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

本版积分规则

7

主题

75

帖子

2

粉丝