📄 gfd7920.c
字号:
/*************************************************************************************
* Copyright (c) 2005 by National ASIC System Engineering Research Center.
* PROPRIETARY RIGHTS of ASIC are involved in the subject matter of this
* material. All manufacturing, reproduction, use, and sales rights
* pertaining to this subject matter are governed by the license agreement.
* The recipient of this software implicitly accepts the terms of the license.
*
* wuer 0608 12864e 测试
**************************************************************************************/
#include "garfield.h"
int i=0;
#define delay10ms() do{for(i=0;i<100000;i++);}while(0)
#define delay1ms() do{for(i=0;i<10000;i++);}while(0)
#define delay100us() do{for(i=0;i<1000;i++);}while(0)
#define delay10us() do{for(i=0;i<100;i++);}while(0)
#define show()
#define showStop()
unsigned char test[]={0x0,0xff,0xf0,0x0f,0xba,0x0,0xf,0xf};
unsigned char initda[]={0x08,0x01,0x02,0x10,0x38,0x0c,0x80};
unsigned char initda2[]={0x0c,0x34,0x06,0x03,0x40};
unsigned char disdata1[]={0xba,0xc0,0xba,0xc1,0xba,0xc2,0xba,0xc3,0xba,0xc4,0xba,0xc5,0xba,0xc6,0xbf,0xc0,0xba,0xc7,0xba,0xc8,0xba,0xc3,0xba,0xc4,0xba,0xc5,0xba,0xc6};
unsigned char disdata2[]={0xb9,0xe6,0xbc,0xc1,0xbc,0xc2,0xbc,0xc3,0xbc,0xc4,0xbc,0xc5,0xbc,0xc6,0xbe,0xc0,0xba,0xc9,0xba,0xca,0xba,0xc3,0xba,0xc4,0xba,0xc5,0xba,0xc6};
unsigned char PROCHIP[]={" WelCome "};
unsigned char njupt[]={"南京博芯电子技术有限公司"};
unsigned char author[]={" Prochip Corp "};
unsigned char web[]={"wujp 2007-08-20"};
/*-----------------------------------------------------------------------
延时函数
需要根据工作频率加以调整
-----------------------------------------------------------------------*/
void delay_1us(void) //1us
{
for (i=10;i>0;i--);
}
void delay_nus(unsigned int n) //n ms
{
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms
{
for (i=0;i<10000;i++);
}
void delay_nms(unsigned int n) //N ms
{
for (i=0;i<n;i++)
delay_1ms();
}
/*--------------------------------------------------------------------------
PE8-PE15:d0--d7
GPIO口控制
---------------------------------------------------------------------------*/
#if 1
void gpioCom(int a)
{
*(RP16)0x1000b02c = 0xff; // 低8位选择为通用GPIO口
*(RP16)0x1000b030 = (char)(a); // 低8位数据写成需要写入的数据-->d0~d7
*(RP16)0x1000b028 = 0x0; // 低8位方向为输出
}
#else
void gpioCom(int a)
{
*(RP16)0x1000b038 = 0xff00; // 高8位选择为通用GPIO口
*(RP16)0x1000b048 = (int)(a<<8); // 高8位数据写成需要写入的数据-->d0~d7
*(RP16)0x1000b034 = 0x00ff; // 高8位方向为输出
}
#endif
/*--------------------------------------------------------------------------
缓冲器使能(0) -->PD1
R/W --> PD5 choice read or write
RS --> PD3 commadn or data
E -->PD7 enable the lcd,下降沿写入数据或者命令
---------------------------------------------------------------------------*/
/*
void lock(void) // 缓冲器使能端 -> HIGH
{
*(RP)0x1000b02c |= 0x2; // sel pd1
*(RP)0x1000b030 |= 0x2; // data pd1 -> 1
*(RP)0x1000b028 &= ~0x2; // dir pd1
}
void unLock(void) // 缓冲器使能端 -> LOW
{
*(RP)0x1000b02c |= 0x2; // sel pd1
*(RP)0x1000b030 &= ~0x2; // data pd1 -> 0
*(RP)0x1000b028 &= ~0x2; // dir pd1
}
*/
void R(void)
{
*(RP)0x1000b038 |= 0x8000; // sel pe15
*(RP)0x1000b048 |= 0x8000; // data pd5 -> 1
*(RP)0x1000b034 &= ~0x8000; // dir pd5 out
}
void W(void)
{
*(RP)0x1000b038 |= 0x8000; // sel pd5
*(RP)0x1000b048 &= ~0x8000; // data pd5 -> 0
*(RP)0x1000b034 &= ~0x8000; // dir pd5 out
}
void D(void)
{
*(RP)0x1000b038 |= 0x2000; // sel pe13
*(RP)0x1000b048 |= 0x2000; // data pd3 -> 1
*(RP)0x1000b034 &= ~0x2000; // dir pd3 out
}
void C(void)
{
*(RP)0x1000b038 |= 0x2000; // sel pd3
*(RP)0x1000b048 &= ~0x2000; // data pd3 -> 0
*(RP)0x1000b034 &= ~0x2000; // dir pd3 out
}
/*
void lingtOn(void)
{
*(RP)0x1000b02c |= 0x10; // sel pd4
*(RP)0x1000b030 |= 0x10; // data pd4 -> 1
*(RP)0x1000b028 &= ~0x10; // dir pd4
}
void lingtOff(void)
{
*(RP)0x1000b02c |= 0x10; // sel pd4
*(RP)0x1000b030 &= ~0x10; // data pd4 -> 0
*(RP)0x1000b028 &= ~0x10; // dir pd4
}
*/
void E(void) // nOE -> HIGH
{
*(RP)0x1000b038 |= 0x4000; // sel pe14
*(RP)0x1000b048 |= 0x4000; // data pa7 -> 1
*(RP)0x1000b034 &= ~0x4000; // dir pa7
}
void disE(void) // nOE -> LOW
{
*(RP)0x1000b038 |= 0x4000; // sel pa7
*(RP)0x1000b048 &= ~0x4000; // data pa7 -> 0
*(RP)0x1000b034 &= ~0x4000; // dir pa7
}
void com(int a)
{
C(); //RS = 0;
W(); //RW = 0;
gpioCom(a);
E(); //E = 1;
delay1ms();
disE(); //E=0;
}
void data(char a)
{
D(); //RS = 1;
W(); //RW = 0;
E();
gpioCom(a);
//E = 1;
disE(); //E=0;
delay1ms();
}
void settoline(int num)
{
switch(num)
{
case 1: com(0x80);break;
case 2: com(0x90);break;
case 3: com(0x88);break;
case 4: com(0x98);break;
default: break;
}
delay1ms();
}
void lcmidle(void)
{
char a;
D(); //RS = 0;
W(); //RW = 1;
E();
delay1ms(); //E = 1;
disE(); //E=0;
a = (*(RP16)0x1000b048)>>8;
printf("idle var is 0x%x\n",a);
delay1ms();
}
/////////////////////////////////////////////////////
void extend(void)
{
D(); //RS = 1;
W(); //RW = 0;
E(); //E = 1;
gpioCom(0x3c);
disE(); //E=0;
delay100us();
}
void draw_xline(char x, char y, char line_data, char icount)
{
int c = 0;
com(0x34);
com(y);
com(x);
com(0x30);
for(c=0; c<icount; c++)
{
data(line_data);
}
com(0x36);
com(0x30);
}
void init(void) // 初始化 lcd
{
//lingtOn(); // 15脚电平拉高,背光亮,并口模式
//unLock();
delay100us();
W(); //尝试仅仅是写入数据,通过延时解决等待时间问题。
for(i=0;i<3;i++) //delay 40ms wait for the out device
{
delay10ms();
}
com(0x1); // 清屏
delay10ms();
//delay10ms();
for(i=0; i<3; i++) // 模式设置
{
com(0x30);
delay10ms();
}
com(0x01);
//delay10ms();
//delay10ms();
delay10ms();
//com(0x80); //ddram add
//delay10ms();
com(0xf); //OPEN DIS
delay1ms();
//lingtOff();
}
int main(void)
{
int j = 0;
//char *p = NULL;
system_init();
*(RP)0x10000000 = 0; // 关闭所有中断,避免其他影响
init(); // LED屏幕初始化
/*--------------------------------------------------------------------------
汉字显示测试
---------------------------------------------------------------------------*/
#if 0
while( (njupt[j]) != '\0')
{
data( njupt[j]);
j++;
}
//lcmidle();
//extend();
com(0x90);
delay1ms();
//lcmidle();
j = 0;
while( (author[j]) != '\0')
{
data( author[j]);
j++;
}
//lcmidle();
//draw_xline(0x10,0x10,0x30,16);
while(1);
#endif
/*--------------------------------------------------------------------------
DEMO显示测试
---------------------------------------------------------------------------*/
//lcmidle();
while( (njupt[j]) != '\0')
{
data( njupt[j]);
j++;
}
settoline(2);
//lcmidle();
j = 0;
while( (author[j]) != '\0')
{
data( author[j]);
j++;
}
settoline(3);
//lcmidle();
j = 0;
while( (PROCHIP[j]) != '\0')
{
data( PROCHIP[j]);
j++;
}
settoline(4);
//lcmidle();
j = 0;
while( (web[j]) != '\0')
{
data( web[j]);
j++;
}
//lcmidle();
//com(0x34);
//com(0x88);
//com(0x30);
//lingtOff();
j = 0;
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -