OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3150|回复: 8

oled四线

[复制链接]

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
发表于 2018-11-23 12:09:16 | 显示全部楼层 |阅读模式
10金钱
/*********************LCD 设置坐标************************************/
void LCD_Set_Pos(unsigned char x, unsigned char y)                                  //设置坐标
{
    LCD_WrCmd(0xb0+y);
    LCD_WrCmd(((x&0xf0)>>4)|0x10);
    LCD_WrCmd((x&0x0f)|0x01);
}

/*****************功能描述:显示16*16点阵  显示的坐标(x,y),y为页范围0~7****************************/
void LCD_P16x16Ch(unsigned char x, unsigned char y, unsigned char N)        //这个是用来显示汉子的
{
    unsigned char wm=0;
    unsigned int adder=32*N;  //      
    LCD_Set_Pos(x , y);
    for(wm = 0;wm < 16;wm++)  //            
    {
        LCD_WrDat(F16x16[adder]);   
        adder += 1;
    }      
    LCD_Set_Pos(x,y + 1);
    for(wm = 0;wm < 16;wm++) //         
    {
        LCD_WrDat(F16x16[adder]);
        adder += 1;
    }           
}


上面的程序看不懂,不知道怎么设置位置,请大佬帮忙看下,谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-11-23 13:20:13 | 显示全部楼层
不太清楚你到底哪里不懂!比如说在坐标(10,5)写字 你只要调用LCD_P16x16(10,5,1);就是这样用的
回复

使用道具 举报

3

主题

288

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2018-8-28
在线时间
130 小时
发表于 2018-11-23 13:21:45 | 显示全部楼层
LCD_Set_Pos 函数是根据数据手册说明,在相应的寄存器写入相应行列数据。
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-11-23 14:57:41 | 显示全部楼层
不知道你的程序对不对,不过和我的OLED差一个命令的区别,主要看说明书。如图所示:
static void PortCoordinate(u8 x,u8 y)
{
        if(x>120) x = 0;
        if(y>6) y = 0;
        SpiSendCmd (0xb0+y);//        B0~B7行
        SpiSendCmd((x&0x0f)|0x00);//00~0F列的低位
        SpiSendCmd(((x&0xf0)>>4)|0x10);//10~1F的高位
}

这是我自己写的一个定位函数,和你的只有一个命令的区别。如图所示,行的位置命令:B0~B7,列的位置命令是00~0F和10~1F,你就数吧,正好对上去了7行128列。

OLED位置命令.jpg
回复

使用道具 举报

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
 楼主| 发表于 2018-11-23 16:27:18 | 显示全部楼层
wangmingwei093 发表于 2018-11-23 14:57
不知道你的程序对不对,不过和我的OLED差一个命令的区别,主要看说明书。如图所示:
static void PortCoor ...

你的就多了一个区域限定
回复

使用道具 举报

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
 楼主| 发表于 2018-11-23 16:27:46 | 显示全部楼层
wangmingwei093 发表于 2018-11-23 14:57
不知道你的程序对不对,不过和我的OLED差一个命令的区别,主要看说明书。如图所示:
static void PortCoor ...

你的就多了一个区域限定
回复

使用道具 举报

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
 楼主| 发表于 2018-11-23 16:32:50 | 显示全部楼层
wangmingwei093 发表于 2018-11-23 14:57
不知道你的程序对不对,不过和我的OLED差一个命令的区别,主要看说明书。如图所示:
static void PortCoor ...

void LCD_P16x16Ch(unsigned char x, unsigned char y, unsigned char N)
{
    unsigned char wm=0;
    unsigned int adder=32*N;  //   这里是什么意思?   
    LCD_Set_Pos(x , y);
    for(wm = 0;wm < 16;wm++)  //            
    {
        LCD_WrDat(F16x16[adder]);   
        adder += 1;
    }      
    LCD_Set_Pos(x,y + 1);
    for(wm = 0;wm < 16;wm++) //         
    {
        LCD_WrDat(F16x16[adder]);
        adder += 1;
    }           
}
回复

使用道具 举报

52

主题

334

帖子

0

精华

高级会员

Rank: 4

积分
560
金钱
560
注册时间
2016-4-12
在线时间
230 小时
发表于 2018-11-26 08:19:49 | 显示全部楼层
wgb123 发表于 2018-11-23 16:32
void LCD_P16x16Ch(unsigned char x, unsigned char y, unsigned char N)
{
    unsigned char wm=0;

刚看了下我的程序有哥错误,应该8行128列,其他一样。
你说的这个N是要显示的数字?
回复

使用道具 举报

17

主题

329

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2532
金钱
2532
注册时间
2016-3-6
在线时间
393 小时
发表于 2018-11-26 09:34:18 | 显示全部楼层
对应着字模取出来的字符
路漫漫其修远兮,吾将上下而求索。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 12:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表