版主我看网上好少有人用QQ2440写普通LCD或OLED的,我现在想搞一个,但遇到麻烦,让帮帮忙,也让大家学习学习,
请版看看我的程序有没有问题,这个OLED程序是我在51单片机上点亮过的,现在修改过来用在ARM上试试,请指教,谢谢!!
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define pageadd 0xb0
#define coladd 0x00
#define contrast 0xb0 //OLED对比度全局变量
#define data (*(volatile unsigned *)0x40000001) //OLED数据寄存器地址 我用的是nGCS1,地址是0x40000000,
但我的D/C也接上了地址线LADDR0,高电平时选中数据寄存器
所以最后的地址是0x40000001
#define com (*(volatile unsigned *)0x40000000) //OLED命令寄存器地址
底电平时选中命令寄存器
所以最后的地址是0x40000000
#define BWSCON (*(volatile unsigned *)0x48000000) //ARM位宽寄存器地址
#define BANKCON (*(volatile unsigned *)0x48000008) //BANK寄存器地址
void write_com(uchar command); //写命令进OLED
void write_dat(uchar dat); //写数据进OLED
void port_init(void);//初始化OLED
void delay(uchar delay_temp);//延时函数
void QQ2440_init();//初始化ARM9
int Main()
{
QQ2440_init();//ARM9初始化
OM_reset(); //OLED复位
port_init(); //OLED初始化
while(1)
{
disp_full();//OLEDÈ全屏显示
delay(0xff);延时
}
}
void QQ2440_init()//ARM9初始化
{
BWSCON=BWSCON&0xffffff0f;//设置数据总线位宽为8位
BANKCON=0x0700;
}
void port_init(void)//OLED初始化函数
{
内容略
}
write_com(uchar command)//写命令进OLED函数
{
com=command;
}
write_data(uchar dat)//写数据进OLED函数
{
data=dat;
}
void disp_full()//OLEDÈ全屏显示函数
{
uchar i,j;
for(i=0;i<8;i++)
{
write_com(pageadd+i);
write_col(coladd);
for(j=0;j<132;j++)
{
write_data(0xff);
}
}
}
void delay(uchar delay_temp)//延时函数
{
uchar i,j;
for(i=0;i<delay_temp;i++)
{
for(j=0;j<255;j++);
}
}
void OM_reset()//OLED复位函数{
res=1;
delay(10);
res=0;
delay(10);
res=1;
delay(100);
}