|
小弟在一家小公司实习,公司要我用新华龙的C8051F005编写OLED的驱动程序。可我现在连点亮都难。求各位大侠帮忙看看!小弟不胜感激
贴上程序---》
#include<C8051F000.H>
#define uchar unsigned char
#define uint unsigned int
sbit CS = P1^1; //OLED液晶片选
sbit DC = P1^3; //输入数据类型选择(命令or数据)
sbit SCLK=P2^0; //时钟输出端口
sbit OUT=P2^1; //数据输出端口
sbit LED=P3^3; //测试用小灯管脚
void ini_dis(void); //OLED液晶初始化---全亮
void write_dat(uchar); //写数据
void write_com(uchar); //写指令
void dison(void); //液晶显示打开
void delay(uint f) //延时“n“ms
{
uint i,k;
for(k=f;k>0;k--)
{
for(i=0;i<1000;i++);
}
}
/**********主函数*************/
void main()
{
uchar k;
WDTCN=0xDE; //关闭看门狗
WDTCN=0xAD;
PRT1CF|=0x02;
PRT1CF|=0x08;
PRT2CF|=0x01;
PRT2CF|=0x02;
OUT=0;
SCLK=0;
CS=0;
DC=0;
ini_dis();
dison();
for(;;);
}
void write_dat(uchar dat)
{
uchar i;
PRT1CF|=0x08;
CS=0;
DC=1;
DC=1;
for(i=8;i>0;i--)
{
SCLK=0;
if((dat&0x80)==0x80)
OUT=1;
else
OUT=0;
SCLK=1;
SCLK=1;
SCLK=1;
dat<<=1;
}
CS=1;
}
void write_com(uchar com)
{
uchar i;
PRT1CF&=~0x08;
CS=0;
DC=0;
DC=0;
for(i=0;i<8;i++)
{
SCLK=0;
if((com&0x80)==0x80)
OUT=1;
else
OUT=0;
SCLK=1;
SCLK=1;
SCLK=1;
com<<=1;
}
CS=1;
}
void ini_dis(void)
{
unsigned char i,j;
for(i=0;i<8;i++)
{
write_com (0xb0+i); //设置显示位置—行
write_com (0x00); //设置显示位置—列低地址
write_com (0x10); //设置显示位置—列高地址
write_com (0xaf);
for(j=0;j<128;j++)
write_dat(0xf0); //屏幕显示,全亮
}
}
void dison(void)
{
write_com(0xaf); //OLED开显示
write_com(0xad); //DC-DC打开
write_com(0x8b);
} |
|