请问这段控制单元板的函数什么意思?
红色为我标注的问题unsigned char PLAYBUF;
void point(unsigned char x,unsigned char y,bit c)
{
unsigned char i;
if(x>=32) return; //这两行是干什么的?怕画点画出点阵的范围吗?
if(y>=16) return; //这两行是干什么的?怕画点画出点阵的范围吗?
i=0x80; //这个变量准备干啥?
i>>=x-((x>>3)<<3); //这是干什么的?为什么先向右移,又向左移?不是等于没移?
if(c)
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] |= i;//这句彻底看不懂...
else
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] &= ~i;
}
问题挺多的,请各位高人赐教!给08口的规范更好,先谢谢了! 这两行是干什么的?怕画点画出点阵的范围吗?
if(y>=16) return; //这两行是干什么的?怕画点画出点阵的范围吗?嗯,是的
不是等于没移? 右边三位清零 请帮帮忙啊,挺急的 本帖最后由 HeP028 于 2013-2-4 23:24 编辑
void point(unsigned char x,unsigned char y,bit c)
{
unsigned char i;
if(x>=32) return; //这两行是干什么的?怕画点画出点阵的范围吗?
if(y>=16) return; //这两行是干什么的?怕画点画出点阵的范围吗?(你说的对)
i=0x80; //这个变量准备干啥?(这个是准备进行移位的值)
i>>=x-((x>>3)<<3); //这是干什么的?为什么先向右移,又向左移?不是等于没移??(这个是计算到底是第Y行的第X位)
if(c)
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] |= i;//这句彻底看不懂...(根据C的值来让Y行X位亮与不亮)
else
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] &= ~i;
}
、、把全部程序发上来研究研究啊
你的程序跟下面这段差不多,不过我这个是双色的。/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Function :void LEDWritePoint(unsigned char X,unsigned char Y,unsigned char Color,unsigned char bitHIGHorLOW)
* Description :函数功能、性能描述
* Calls :被本函数调用的函数清单
* Called By :调用本函数的函数清单
* Table accessed:被访问的表(数据库操作用)
* Tabled Updated:被修改的表(数据库操作用)
* Input :输入参数、取值说明与关系
* Output :输出参数、类型说明
* Return :函数返回值说明
* Others :(Screen sequence)
* X1 ·····→X10
* · ·
* ↓ ↓
* · ·
* Y32·····→Y32
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
void LEDWritePoint(unsigned char X,unsigned char Y,unsigned char Color,unsigned char bitHIGHorLOW)
{
unsigned char dataR = 0x00;
unsigned char dataG = 0x00;
unsigned char Bite= 0x00;
if ((X < X_MAX) && (Y < Y_MAX))
{
switch (Color)
{
case 0: dataR = LEDBUFFer[(Y*10) + (X/8)];
break;
case 1: dataG = LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))];
break;
case 2: dataR = LEDBUFFer[(Y*10) + (X/8)];
dataG = LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))];
break;
default:
break;
}
Bite = 0x01 << (X >> 3); //Bite = 0x01 << (X%8);Bite = 0x01 << (X>>3);Bite = 0x01 << (X&0x07);
switch (Color)
{
case 0: if (0 == bitHIGHorLOW) { dataR &= (~Bite); }
if (1 == bitHIGHorLOW) { dataR |= Bite ; }
LEDBUFFer[(Y*10) + (X/8)] = dataR;
break;
case 1: if (0 == bitHIGHorLOW) { dataG &= (~Bite); }
if (1 == bitHIGHorLOW) { dataG |= Bite ; }
LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))] = dataG;
break;
case 2: if (0 == bitHIGHorLOW)
{
dataG &= (~Bite);
dataR &= (~Bite);
}
if (1 == bitHIGHorLOW)
{
dataG |= Bite ;
dataR |= Bite ;
}
LEDBUFFer[(Y*10) + (X/8)] = dataR;
LEDBUFFer[(Y*10) + (X/8) + (Y_MAX * (X_MAX / 8))] = dataG;
break;
default:
break;
}
}
}
12864吧?12864液晶第一行第一个的地址就是0x80.楼主看看12864的技术文档。 习学发开 发表于 2013-2-4 19:34 static/image/common/back.gif
请帮帮忙啊,挺急的
帮得了这次,帮不了下次,C语言操作符就那几个,自己推敲一下就明白了 proteldxp 发表于 2013-2-4 23:04 static/image/common/back.gif
12864吧?12864液晶第一行第一个的地址就是0x80.楼主看看12864的技术文档。
明显是LED点阵屏的!! HeP028 发表于 2013-2-4 22:56 static/image/common/back.gif
void point(unsigned char x,unsigned char y,bit c)
{
unsigned char i;
虽然没有解决偶的问题,但是还是非常感谢你的帮助!希望能再帮帮我。
程序不是我写的,我不敢贴,但是链接可以给你,也是我们坛子上的:
http://www.amobbs.com/forum.php?mod=viewthread&tid=4475654&highlight=P10%E5%8D%95%E5%85%83%E6%9D%BF%E9%A9%B1%E5%8A%A8%E6%88%90%E5%8A%9F 是很基本的程序语句。实在看不懂的话,仿真一下。软仿真即可。 i_kkyu 发表于 2013-2-5 13:13 static/image/common/back.gif
是很基本的程序语句。实在看不懂的话,仿真一下。软仿真即可。
语句看懂了,可惜带来的效果不知道。现在我搞不清硬件输出情况是怎么样的。这个画点的函数怎么和led显示对应起来。 本帖最后由 习学发开 于 2013-2-5 13:31 编辑
HeP028 发表于 2013-2-4 22:56 static/image/common/back.gif
void point(unsigned char x,unsigned char y,bit c)
{
unsigned char i;
你好!我又看了遍程序,现在发现一开始定义的PLAYBUFF对应的是每一行要亮的led,问题是这个数组是如何跟接口对应上的?或者说,这怎么体现到单元板上?
另外能否告诉我08口的各脚定义?
ABCD是对应的LED点;
STB是什么?
CLK又是啥?
OE?
G1、G2、R1、R2这些是双色才要都连的吧?但是为什么同是有两个?
单色屏是不是只要连R1即可?
望能相助! 如果你是单红色的话那么连接的时候ABCD是控制行的。STB是锁存端口.CLK是时钟端口。R1是红色数据接口。OE是显示允许端口 习学发开 发表于 2013-2-5 13:30 static/image/common/back.gif
你好!我又看了遍程序,现在发现一开始定义的PLAYBUFF对应的是每一行要亮的led,问题是这个数组是如 ...
如果你是单红色的话那么连接的时候ABCD是控制行的。STB是锁存端口.CLK是时钟端口。R1是红色数据接口。OE是显示允许端口 i>>=x-((x>>3)<<3); //这是干什么的?为什么先向右移,又向左移?不是等于没移?
//x-((x>>3)<<3)可以看成x%8,x>>3 即x/8求商,商<<3即 商*8,即x在最后一个字节中的位置,现在明白了吧?
PLAYBUF[(y<<1)+((x>>4)<<5)+((x>>3)&0x01)] |= i;//这句彻底看不懂...
//(y<<1)+((x>>4)<<5)+((x>>3)&0x01)计算x,y对应的位置在playbuf中的字节数。
if这两句,一句是点亮,一句是清除。
页:
[1]