永发信息网

msp430上怎么控制12864的OLED液晶呢?OLED是4线串行控制的。有51单片机例程,可是移植到430上一直不亮

答案:1  悬赏:70  手机版
解决时间 2021-04-20 04:23
msp430上怎么控制12864的OLED液晶呢?OLED是4线串行控制的。有51单片机例程,可是移植到430上一直不亮
最佳答案
如下

#include
typedef unsigned int uint;
typedef unsigned char uchar;

#define BIT(x) (1 << (x))

extern const unsigned char shuzi_table[];

void Send(uchar type,uchar transdata);

#define cyCS 0 //P3.0,片选信号
#define cySID 1 //P3.1,串行数据
#define cyCLK 2 //P3.2,同步时钟
#define cyPORT P3OUT
#define cyDDR P3DIR


void delay_Nus(uint n)
{
uchar i;
for(i = n;i > 0;i--)
_NOP();
}

void delay_1ms(void)
{
uchar i;
for(i = 150;i > 0;i--) _NOP();
}

void delay_Nms(uint n)
{
uint i = 0;

for(i = n;i > 0;i--)
delay_1ms();
}

void Ini_Lcd(void)
{
cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS); //相应的位端口设置为输出
delay_Nms(100); //延时等待液晶完成复位
Send(0,0x30);
delay_Nus(72);
Send(0,0x02);
delay_Nus(72);
Send(0,0x0c);
delay_Nus(72);
Send(0,0x01);
delay_Nus(72);
Send(0,0x06);
delay_Nus(72);
}

void Send(uchar type,uchar transdata)
{
uchar firstbyte = 0xf8;
uchar temp;
uchar i,j = 3;

if(type) firstbyte |= 0x02;

cyPORT |= BIT(cyCS);
cyPORT &= ~BIT(cyCLK);
while(j > 0)
{
if(j == 3) temp = firstbyte;
else if(j == 2) temp = transdata&0xf0;
else temp = (transdata << 4) & 0xf0;

for(i = 8;i > 0;i--)
{
if(temp & 0x80) cyPORT |= BIT(cySID);
else cyPORT &= ~BIT(cySID);
cyPORT |= BIT(cyCLK);
temp <<= 1;
cyPORT &= ~BIT(cyCLK);
}
//三个字节之间一定要有足够的延时,否则易出现时序问题
if(j == 3) delay_Nus(600);
else delay_Nus(200);

j--;
}

cyPORT &= ~BIT(cySID);
cyPORT &= ~BIT(cyCS);
}

void Clear_GDRAM(void)
{
uchar i,j,k;

Send(0,0x34); //打开扩展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Send(0,i++);
Send(0,0x80);
for(k = 0;k < 16;k++)
{
Send(1,0x00);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Send(0,i++);
Send(0,0x88);
for(k = 0;k < 16;k++)
{
Send(1,0x00);
}
}
Send(0,0x30); //回到基本指令集
}


void Draw_PM(const uchar *ptr)
{
uchar i,j,k;

Send(0,0x34); //打开扩展指令集
i = 0x80;
for(j = 0;j < 32;j++)
{
Send(0,i++);
Send(0,0x80);
for(k = 0;k < 16;k++)
{
Send(1,*ptr++);
}
}
i = 0x80;
for(j = 0;j < 32;j++)
{
Send(0,i++);
Send(0,0x88);
for(k = 0;k < 16;k++)
{
Send(1,*ptr++);
}
}
Send(0,0x36); //打开绘图显示
Send(0,0x30); //回到基本指令集
}

void Draw_TX(uchar Yaddr,uchar Xaddr,const uchar * dp)
{
uchar j;
uchar k = 0;

Send(0,0x34); //使用扩展指令集,关闭绘图显示
for(j = 0;j < 16;j++)
{
Send(0,Yaddr++); //Y地址
Send(0,Xaddr); //X地址
Send(1,dp[k++]); //送两个字节的显示数据
Send(1,dp[k++]);
}
Send(0,0x36); //打开绘图显示
Send(0,0x30); //回到基本指令集模式
}追问这个是12864LCD的,我也有,不过还没有在OLED上试过,你试过可以么?追答点不亮或许是电压问题呀追问问题解决了 可能开发板有问题 换了一块launchpad OK了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
在忙碌的工作闲余时间怎样放浪
怎样让眼睛变得更漂亮,怎样让眼睛变得更大更
求 CF中 TAR21 和M12S的数据
亲亲宝贝奶粉批发部地址有知道的么?有点事想
QQ农场怎样升级比较快
痘痘留下的红印怎么去除
麦迪能从回颠峰吗?
膏药粘贴在皮肤上怎样清洗?
宏达家具在什么地方啊,我要过去处理事情
成为设计师要有什么条件
如何才能赚到人生的第一个一百万?
Left 4 Dead 2 Demo中文试玩版下载网站
交友需谨慎的另一句是什么
谁帮我找支股票,作业题
王健奶粉专卖我想知道这个在什么地方
推荐资讯
谁知道一些类似《蝶恋花》的诗
关于空间日记的问题~~
显示网页走丢了怎么办,电脑360浏览器显示网页
P4-630(3.0G)这个CPU很垃圾很垃圾吗?
谁有二战期间十大间之一奥古斯丁•普热乌奇尔
福建省龙岩新罗供电有限公司地址在什么地方,
我的QQ三国被屏蔽了,但是申诉后还是没用?
我是否有甲流感
请问珍珠奶茶的珍珠怎么做出来的
从杭州汽车南站到浙江财经学院坐几路公交车
赣县基督教三自爱国运动委员会地址在哪,我要
三门峡地区(渑池)哪有*子医院?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?