原来这样加入代码: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);
- }
|