OpenEdv-开源电子网

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

共享问题贴,持续更新。(最新提问:关于*p指针)

[复制链接]

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2011-10-24 20:45:58 | 显示全部楼层 |阅读模式
此oled测试程序实现一个类似雷达扫描的界面,且添加了一个半径为15像素的圆滚动特效,供爱好oled的仁兄学习学习。

备注:
此测试程序基于ALIENTEK MINI STM32开发板建立,根据原子哥的画点函数,添加了画线和画圆函数。



附上画线,画圆,画椭圆函数
//////////////////////////////////
//以x1,y1为起点,x2,y2为终点画线//
/////////(t=1画点,t=0清点)///////
//////////////////////////////////
//画线函数
void _line_(u8 x1,u8 y1,u8 x2,u8 y2,u8 t)
{
 s8 dy;
 s16 dx;
 s8 dirx,diry,move;
 dy=y2-y1;
 dx=x2-x1;
 if(dy<0)//y坐标起点下面,终点上面
 {
  dy=-dy;
  diry=-1;//设定y坐标为反方向
 }
 else//y坐标起点上面,终点下面
 {
  diry=1;//设定y坐标为正方向
 }
 if(dx<0)//x坐标起点右边,终点左边
 {
  dx=-dx;
  dirx=-1;//设定x坐标为反方向
 }
 else//x坐标起点左边,终点右边
 {
  dirx=1;//设定x坐标为正方向
 }
 dy<<=1;
 dx<<=1;
 dot(x1,y1,t);//线段起点
 if(dx>dy)
 {
  move=dy-(dx>>1);
  while(x1!=x2)
  {
   if(move>=0)
   {
    y1+=diry;
    move-=dx;
   }
   x1+=dirx;
   move+=dy; 
   dot(x1,y1,t);
  }
 }
 else
 {
  move=dx-(dy>>1);
  while(y1!=y2)
  {
   if(move>=0)
   {
    x1+=dirx;
    move-=dy;
   }
   y1+=diry;
   move+=dx;
   dot(x1,y1,t);
  }
 }
}

//////////////////////////////
//以x,y为圆心,以r为半径画圆//
/////(t=1画点,t=0清点)///////
//////////////////////////////
//画圆函数
void _circle_(u8 x,u8 y,u16 r,u8 t)
{
 u8 xc=0;
 u8 yc;
 s8 p;
 yc=r;
 p=3-(r<<1);
 while(xc<=yc) 
 {   
  dot(x+xc,y+yc,t);
  dot(x+xc,y-yc,t);
  dot(x-xc,y+yc,t);
  dot(x-xc,y-yc,t);
  dot(x+yc,y+xc,t);
  dot(x+yc,y-xc,t);
  dot(x-yc,y+xc,t);
  dot(x-yc,y-xc,t);
  if(p<0)
  p+=((xc++)<<2)+6;
  else
  p+=(((xc++)-(yc--))<<2)+10;
 }
}

//画椭圆
//x0,y0:坐标
//rx:x方向半径
//ry:y方向半径
//color:椭圆的颜色
void _ellipse_(u16 x0, u16 y0, u16 rx, u16 ry,u16 color) 
{
 u32 OutConst, Sum, SumY;
 u16 x,y;
 u16 xOld;
 u32 _rx = rx;
 u32 _ry = ry;
 if(rx>x0||ry>y0)return;//非法.
 OutConst = _rx*_rx*_ry*_ry+(_rx*_rx*_ry>>1);  // Constant as explaint above 
 // To compensate for rounding  
 xOld = x = rx;
 for (y=0; y<=ry; y++) 
 {
  if (y==ry)x=0; 
  else 
  {
   SumY =((u32)(rx*rx))*((u32)(y*y)); // Does not change in loop  
   while(Sum = SumY + ((u32)(ry*ry))*((u32)(x*x)),(x>0) && (Sum>OutConst)) x--;
  }
   // Since we draw lines, we can not draw on the first iteration     
  if (y) 
  {
   _line_(x0-xOld,y0-y+1,x0-x,y0-y,color);
   _line_(x0-xOld,y0+y-1,x0-x,y0+y,color);
   _line_(x0+xOld,y0-y+1,x0+x,y0-y,color);
   _line_(x0+xOld,y0+y-1,x0+x,y0+y,color);
  }
  xOld = x;
 }
}


2011年10月27日,oled闹钟资源共享:

编译环境:
AVR Studio4.0 GCC WinAVR
硬件连线:
oled模块采用4线SPI通讯模式,模块时钟线连接PC0,数据线连接PC1,硬件复位线连接PC2,命令数据选择断连接PC3,4个按键分别连接PC口剩余引脚,PG1,PG2连接一个32.768k晶振,PB0连接ds1302的7脚,PB1连ds1302第六脚,PB2连接DS
1302第五脚,PB3连接无源蜂鸣器。

oled.rar

366.03 KB, 下载次数: 2553

AVR,OLED版本.rar

93.92 KB, 下载次数: 2245

Time?And?Relative?Dimension?In?Space.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-10-24 21:43:30 | 显示全部楼层
回复【楼主位】Tardis:
---------------------------------
good.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-24 22:51:45 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
算法有一点吃脑,迟一下看能不能补充一个椭圆的。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-24 23:21:44 | 显示全部楼层
有bug,上面画线函数里面的s8 dx;更改为s16 dx;s8的话,数据范围不够大,导致如果线段的横坐标和纵坐标相差太大的话,会导致线段失真。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-10-25 00:08:53 | 显示全部楼层
//画椭圆
//x0,y0:坐标
//rx:x方向半径
//ry:y方向半径
//color:椭圆的颜色
void gui_draw_ellipse(u16 x0, u16 y0, u16 rx, u16 ry,u16 color) 
{
u32 OutConst, Sum, SumY;
u16 x,y;
u16 xOld;
u32 _rx = rx;
u32 _ry = ry;
if(rx>x0||ry>y0)return;//非法.
OutConst = _rx*_rx*_ry*_ry+(_rx*_rx*_ry>>1);  // Constant as explaint above 
// To compensate for rounding  
xOld = x = rx;
for (y=0; y<=ry; y++) 
{
if (y==ry)x=0; 
else 
{
SumY =((u32)(rx*rx))*((u32)(y*y)); // Does not change in loop  
while(Sum = SumY + ((u32)(ry*ry))*((u32)(x*x)),(x>0) && (Sum>OutConst)) x--;
}
// Since we draw lines, we can not draw on the first iteration     
if (y) 
{
gui_draw_line(x0-xOld,y0-y+1,x0-x,y0-y,color);
gui_draw_line(x0-xOld,y0+y-1,x0-x,y0+y,color);
gui_draw_line(x0+xOld,y0-y+1,x0+x,y0-y,color);
gui_draw_line(x0+xOld,y0+y-1,x0+x,y0+y,color);
}
xOld = x;
}
}
//填充椭圆
//x0,y0:坐标
//rx:x方向半径
//ry:y方向半径
//color:椭圆的颜色
void gui_fill_ellipse(u16 x0,u16 y0,u16 rx,u16 ry,u16 color) 
{
u32 OutConst, Sum, SumY;
u16 x,y;
u32 _rx = rx;
u32 _ry = ry;
OutConst = _rx*_rx*_ry*_ry+(_rx*_rx*_ry>>1);  // Constant as explaint above  
// To compensate for rounding 
x = rx;
for (y=0; y<=ry; y++) 
{
SumY =((u32)(rx*rx))*((u32)(y*y)); // Does not change in loop  
while (Sum = SumY + ((u32)(ry*ry))*((u32)(x*x)),(x>0) && (Sum>OutConst))x--;    
gui_draw_hline(x0-x,y0+y,2*x,color);
if(y)gui_draw_hline(x0-x,y0-y,2*x,color);    
}
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-25 08:52:55 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
哇~~~
给力啊~~~~
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-25 08:57:47 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
这例程移植别人的还是自己写的??
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-10-25 10:31:33 | 显示全部楼层
ucGUI上面借来的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-25 14:09:59 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
哦~~那就不用自己写了,有现成的可以直接用,ucGUI貌像整个源码好象是某某公司已经弄好了专门给别人移植。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-10-25 17:15:58 | 显示全部楼层
回复【9楼】Tardis:
---------------------------------
这个我已经验证过了,没问题的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-25 18:32:06 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
好!!
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 00:04:45 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
sin,tan,函数的例程有不?方波的?三角波的?

擦,貌相我想在STM32上搭载Matlab软件~~~
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-10-26 00:10:50 | 显示全部楼层
回复【12楼】Tardis:
---------------------------------
sin,cos,包含math.h即可吧.或者使用微库.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 08:36:33 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
哦~这样子~~
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-10-26 10:00:49 | 显示全部楼层
这个包下下来解压不了?
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 15:17:40 | 显示全部楼层
回复【15楼】suqingxiao:
---------------------------------
能解压啊~~是不是你解压软件问题?
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 16:59:53 | 显示全部楼层
回复【13楼】正点原子:
---------------------------------
原子哥,我对结构体不是很熟悉,想问一下,关于RTC的例程里,typedef struct{}tm;
后面还有extern tm timer ;这句什么意思?是不是直接就把结构体的变量tm映射给timer了?
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2011-10-26 17:21:44 | 显示全部楼层
回复【17楼】Tardis:
---------------------------------
extern就是个c语言关键字啊...
和extern u8一样的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 17:48:41 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
这个我知道呢~其实我不知道我自己对结构体哪里不懂呢,要今晚回去试一下才知道。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-10-26 17:53:50 | 显示全部楼层
我也学习一下,对静态变量,动态变量,局部变量,全局变量还需要更学入的学习。
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-10-26 17:55:23 | 显示全部楼层
回复【16楼】Tardis:
---------------------------------
这个不好说,因为是公司的电脑,其他的包都可以解压的。
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 18:54:29 | 显示全部楼层
回复【20楼】suqingxiao:
---------------------------------
另外对于原子的那个oled显示字符串的函数中的指针也不是很理解,他程序中调用数组里的点陣数据是直接用' '这个东西括住,这样的话,取的是ASCII码,而他就是把这个ASCII码赋值给指针,而指针就直接在数组中抽数据了,除非数组是按照ASCII码取模,否则,抽不到准确的点陣数据,我是用手机上论坛的,不然可以贴上例程,这样更好说明我的问题。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 19:02:14 | 显示全部楼层
回复【21楼】suqingxiao:
---------------------------------
那我今晚回去把那几个函数贴上来供你参考。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-26 23:29:02 | 显示全部楼层
回复【18楼】正点原子:
---------------------------------
原子哥,我想问一下,你那个oled显示ASCII码字符的例程是怎么实现  OLED_ShowString(0,0, "0.96' OLED TEST");  
像这样就能在屏幕上面显示这个字符串的?
我看了你的例程,你是直接用这个
void OLED_ShowString(u8 x,u8 y,const u8 *p)
{
#define MAX_CHAR_POSX 122
#define MAX_CHAR_POSY 58          
    while(*p!='\0')
    {       
        if(x>MAX_CHAR_POSX){x=0;y+=16;}
        if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();}
        OLED_ShowChar(x,y,*p,16,1);  
        x+=8;
        p++;
    }  
}    
来从ShowChar里面抽取对应的点阵字符显示,我知道*p储存的是地址,
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
{           
u8 temp,t,t1;
u8 y0=y;
chr=chr-' ';//得到偏移后的值    
    for(t=0;t<size;t++)
    {   
if(size==12)temp=asc2_1206[chr][t];  //调用1206字体
else temp=asc2_1608[chr][t];  //调用1608字体                            
        for(t1=0;t1<8;t1++)
{
if(temp&0x80)OLED_DrawPoint(x,y,mode);
else OLED_DrawPoint(x,y,!mode);
temp><<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;
break;
}
}    
    }          
}
根据ShowChar里面调用字库里的点阵进行显示,根据*p所指向的地址,到了temp=asc2_1608[chr][t];这里是不是就直接把*p里的值赋值给chr了?例如*p=8,那么执行后chr是不是=8?根据程序的运行结果,应该是直接等于8吧?
我根据你的程序,我自己也写了一些,我写的程序如下:
//显示一个数字函数
//x:x坐标
//y:有坐标
//num:要显示的数字
//t:是否显示
//dis:正反显示,1为正,0为反
void display_num(u8 x,u8 y,u8 num,u8 t,u8 dis)
{
u8 i,j,temp,xt=x,yt=y;
for(i=0;i<16;i++)
{
if(dis)
{
temp=font[num];
}
else
{
temp=~font[num];
}
for(j=0;j<8;j++)
{
if(temp&0x01)
{
dot(xt,yt+j,t);
}
else
{
dot(xt,yt+j,!t);
}
temp=temp>>1;
}
xt++;
if(xt==x+8)
{
yt+=8;
xt=x;
}
}
}

//显示数字串
void show_nums(u8 x,u8 y,u8 t,u8 dis,const u8 *p)
{
while(*p!='\0')
{
display_num(x,y,*p,dis,t);
x+=8;
p++;
}
}
在主函数里面这样调用:
show_nums(0,0,1,1,"0123456789");
而我的font数组如下:
const unsigned char font[12][16]=
{
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",0*/
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",1*/
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",2*/
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",3*/
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",4*/
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",5*/
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",6*/
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",7*/
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",8*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},/*"9",9*/
{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",10*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",11*/
};
程序运行结果是:
一串白的,也就是上面10个字符,在oled顶上得到的是x=10*8=80个像素的一条白色的东西,并得不到相应的数字,不知道问题在哪里,还有哦,(*p!='\0'这句是什么意思?
\0代表什么?是不是字符串的末尾?
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-10-27 09:22:18 | 显示全部楼层
指针指向数组的地址,指针只会指向地址,你顺着去找到地址,再看地址中是什么内容就知道了,呵,
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-27 10:08:40 | 显示全部楼层
回复【25楼】suqingxiao:
---------------------------------
地址中的内容是直接根据字符的ASCII码在数组中查找,问题已经得到解决了,原子的数组是直接根据ASCII码表写的。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

13

主题

38

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
274
金钱
274
注册时间
2011-10-27
在线时间
26 小时
发表于 2011-10-27 13:59:09 | 显示全部楼层
类似数组和指针可以这么简单理解 看到指针C语言中的上标法*P 其实可以下标法看成P   和数组A一样用,数组地址连续。 
回复 支持 反对

使用道具 举报

20

主题

111

帖子

2

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2011-10-18
在线时间
9 小时
发表于 2011-10-27 14:24:52 | 显示全部楼层
p 是指向地址,*P是指向地址里的内容,书上是这么说的。呵
?成功只是最后一小步的坚持!
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2011-10-27 15:04:36 | 显示全部楼层
回复【27楼】kama_ya:
---------------------------------
回复【27楼】kama_ya:
---------------------------------
嗯嗯,原来可以这么理解,难怪*p="0123456789",时候,当p=6就是直接取6的ASCII码了,就相当于A[10]={"0123456789"};
A[6]就等于取6的ASCII码一样,受教了,呵呵~~
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
发表于 2013-4-2 20:44:36 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
这些现成的东西在哪里能找到,在哪里搜。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-2 23:11:08 | 显示全部楼层
回复【30楼】liyanchao153:
---------------------------------
ucGUI的源码里面就有。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2013-4-3 14:42:19 | 显示全部楼层
cool
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-4-26
在线时间
0 小时
发表于 2013-9-3 19:44:35 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

4

主题

17

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2013-4-26
在线时间
0 小时
发表于 2013-9-4 08:47:11 | 显示全部楼层
回复【31楼】正点原子:
---------------------------------
原子哥,我想问一下问什么这里前面加了const的作用是什么呀?
OLED_ShowString(u8 x,u8 y,const u8 *p)
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-4 11:23:46 | 显示全部楼层
指定类型。
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2013-9-4 14:28:49 | 显示全部楼层
这帖子,貌相是N年前的了,最近不玩12864的OLED了,太单调,玩了一下LGDP4216驱动的真彩OLED,实际成色感觉没有三星手机的AMOLED的好,整个屏幕偏红,便宜的OLED屏,驱动IC貌相不带电源,电源自己设计,颜色通道还得自己稳压,感觉和稳压二极管的因素很大,还有通过寄存器设定RGB基色的峰值电流也有一定关系。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-4 16:58:26 | 显示全部楼层
回复【36楼】Tardis:
---------------------------------
都玩高级货了,呵呵,价格多少啊?
你这个屏,淘宝貌似没货。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2013-9-5 13:31:58 | 显示全部楼层
回复【37楼】正点原子:
---------------------------------
有,160*128像素的,你搜索OLED160就有了,不过很少~~
20多一片
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-9-5 17:59:37 | 显示全部楼层
回复【38楼】Tardis:
---------------------------------
哦,原来是这家的。
他那里的屏我不敢用,怕断货,自己玩玩可以,做产品不行。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2013-9-7 13:47:24 | 显示全部楼层
回复【39楼】正点原子:
---------------------------------
我觉得也是,肯定会断货的,我问过他了,他就那2W库存,卖光了就没有了。
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1881
金钱
1881
注册时间
2014-10-4
在线时间
18 小时
发表于 2014-11-17 17:33:58 | 显示全部楼层
mark,谢谢楼主分享。
刚好我也在用OLED,非常实用的一个功能。
回复 支持 反对

使用道具 举报

11

主题

53

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1881
金钱
1881
注册时间
2014-10-4
在线时间
18 小时
发表于 2014-11-21 11:22:20 | 显示全部楼层
回复【40楼】Tardis:
---------------------------------
请教楼主,我想在0.96 OLED上做一个指南针的显示,借用你的画圆代码。但是不懂得如何旋转整个图形,请教要如何实现?
我的板子没有跑UCGUI,是不是要跑UCGUI才能实现?
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
 楼主| 发表于 2014-12-11 07:50:40 | 显示全部楼层
回复【42楼】adaphoto:
---------------------------------
没必要旋转整个圆,你用画射线代码即可
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-3-8 19:51:39 | 显示全部楼层
回复【39楼】正点原子:
---------------------------------
原子哥,我想问一下你显示字符串的函数为何定义MAX_CHAR_POSX、MAX_CHAR_POSY的值分别为122和58,难道不应该是120(128-8)和48(64-16)吗?求原子哥指教    
附带程序源码
void OLED_ShowString(u8 x,u8 y,const u8 *p)
{
#define MAX_CHAR_POSX 122
#define MAX_CHAR_POSY 58          
    while(*p!='\0')
    {       
        if(x>MAX_CHAR_POSX){x=0;y+=16;}
        if(y>MAX_CHAR_POSY){y=x=0;OLED_Clear();}
        OLED_ShowChar(x,y,*p,16,1);  
        x+=8;
        p++;
    }  
}
Good good study , day day up...
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-8 22:58:01 | 显示全部楼层
回复【44楼】Just Beat It:
---------------------------------
恩.你改过来吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

181

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
389
金钱
389
注册时间
2014-11-8
在线时间
40 小时
发表于 2015-3-9 08:47:24 | 显示全部楼层
奥奥,谢谢原子哥,那就理解了,今天没看到回复,所以还发帖了,555。。。   
原子哥就不要让他审核通过了吧
Good good study , day day up...
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-25 06:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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