中易网

单片机控制LCD打点 如何打一条线

答案:3  悬赏:40  
解决时间 2021-03-12 05:19
单片机控制LCD打点 如何打一条线
最佳答案
这与液晶的驱动芯片有关,比如带字库的12864液晶,画点、画线子函数如下:

// 画任意点

void dian( unsigned char X, unsigned char Y, unsigned char Color )
{
unsigned char Row , Tier , Tier_bit;
unsigned char ReadOldH, ReadOldL ;
send_com( 0x34 ) ;
send_com( 0x36 ) ;
Tier = X >> 4 ;
Tier_bit = X & 0x0f ;
if( Y < 32 )
{
Row = Y ;
}
else
{
Row = Y - 32 ;
Tier += 8 ;
}
send_com( Row + 0x80 ) ;
send_com( Tier + 0x80 ) ;
read_12864() ;
ReadOldH = read_12864() ;
ReadOldL = read_12864() ;
send_com( Row + 0x80 );
send_com( Tier + 0x80 ) ;
if( Tier_bit < 8 )
{
switch( Color)
{
case 0 : ReadOldH &=( ~( 0x01 << ( 7 - Tier_bit ))) ; break ;
case 1 : ReadOldH |= ( 0x01 << ( 7 - Tier_bit )) ; break ;
case 2 : ReadOldH ^= ( 0x01 << ( 7 - Tier_bit )); break ;
default : break ;
}
send_data( ReadOldH ) ;
send_data( ReadOldL ) ;
}
else
{
switch(Color)
{
case 0 : ReadOldL &= (~( 0x01 << ( 15 - Tier_bit ))) ; break ;
case 1 : ReadOldL |= ( 0x01 << ( 15 - Tier_bit )); break ;
case 2 : ReadOldL ^= ( 0x01 << ( 15 - Tier_bit )) ; break ;
default : break ;
}
send_data( ReadOldH ) ;
send_data( ReadOldL ) ;
}
send_com( 0x30 );
}

//画水平线

void linex( unsigned char X0, unsigned char X1, unsigned char Y, unsigned char Color )
{unsigned char Temp ;
if( X0 > X1 )
{
Temp = X1 ;
X1 = X0 ;
X0 = Temp ;
}
for( ; X0 <= X1 ; X0++ )
dian( X0, Y, Color ) ;
}

//画垂直线

void liney( unsigned char X, unsigned char Y0, unsigned char Y1, unsigned char Color )
{
unsigned char Temp ;
if( Y0 > Y1 )
{
Temp = Y1 ;
Y1 = Y0 ;
Y0 = Temp ;
}
for(; Y0 <= Y1 ; Y0++)
dian( X, Y0, Color);
}

//画任意两点间线段

void line( unsigned char StartX, unsigned char StartY, unsigned char EndX, unsigned char EndY, unsigned char Color )
{
int t, distance;
int x = 0 , y = 0 , delta_x, delta_y ;
char incx, incy ;
delta_x = EndX - StartX ;
delta_y = EndY - StartY ;
if( delta_x > 0 )
{
incx = 1;
}
else if( delta_x == 0 )
{
liney( StartX, StartY, EndY, Color ) ;
return ;
}
else
{
incx = -1 ;
}
if( delta_y > 0 )
{
incy = 1 ;
}
else if(delta_y == 0 )
{
linex( StartX, EndX, StartY, Color ) ;
return ;
}
else
{
incy = -1 ;
}
delta_x = abs( delta_x );
delta_y = abs( delta_y );
if( delta_x > delta_y )
{
distance = delta_x ;
}
else
{
distance = delta_y ;
}
dian( StartX, StartY, Color ) ;
for( t = 0 ; t <= distance+1 ; t++ )
{
dian( StartX, StartY, Color ) ;
x += delta_x ;
y += delta_y ;
if( x > distance )
{
x -= distance ;
StartX += incx ;
}
if( y > distance )
{
y -= distance ;
StartY += incy ;
}
}
}
全部回答
C语言,用或语句;假设列*行是24*24的点,以列为8位单元计算,我想打一条第七行的线,软件则为
unsigned char lcd_buff[3][24];列*行
for(i=0;i<24;i++)
{
lcd_buffer[0][i]|=0x02;//打印第七行
}
相同坐标下,打一个点,然后看是要画水平线 (就保持Y轴不动,动X轴)还是垂直的(就保持X轴不动,动Y轴)
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
中欧汽车销售有限公司昆明分公司我想知道这个
安静的美男子什么意思
长春那个寺庙能给人祈福?能得到戴的 保平安
为什么对方我已经拉到黑名单了,而且单向好友
天天富翁s+卡技能分别是什么
合同欺诈的常见情形有哪些,合同欺诈要承担哪
大理鑫运达商贸有限公司在什么地方啊,我要过
忠玉发艺怎么去啊,我要去那办事
河北工程大学与石家庄铁道大学的土木工程哪个
天龙八部3vip一级会被封号吗
4个月b超图怎么看性别
成年猫以前没打过疫苗,现在能打吗
新口味餐馆在哪里啊,我有事要去这个地方
急啊!南华教育补课怎样?
侠盗猎车手4自由城故事车变敞篷怎么变
推荐资讯
有什么好看的蛇啊怪啊吃人的电影啊?各位大侠
请问在展览公司与保险公司的销售哪个相对好做
有乳胶含量百分百的床垫吗
奔驰配件编码的含义?
从广州番愚区往上海普东新区康桥镇寄信,需要
一艘客轮在静静的海面上乘风破浪向前进修改病
我想买凯马厢式货车做小生意,想问一下上黄牌
资本主义出新时期人文主义思潮特点
这种木头又重又硬,请问是什么木头
巨蟹女在恋爱中忽冷忽热,逃避约会怎么回事,
为什么很多人买佳能 网上还叫我们买尼康
水总阀放在厨房里还是放卫生间
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?