原创 LCD常用画图子程序(点,线,图,字符库)

2007-10-5 10:07 5267 11 13 分类: MCU/ 嵌入式
//------------------------------------------------------------
//显示字符
//------------------------------------------------------------
void display_char(uint x_point,uint y_point,uchar asic_num)
{
uint i;
i=(x_point/8)+y_point*PARA;
LCD_W_CMD=0x4c; // CSRDIR 代码
LCD_W_CMD=0x46; // CSRW 代码
LCD_W_DATA=i;//0x30; // 设置参数光标指针低8位
LCD_W_DATA=i>>8;//0x2a; // 设置参数光标指针高8位
LCD_W_CMD=0x42;
LCD_W_DATA=asic_num;
}
//
// 画位图函数
//
// 输入: xstart 横轴起始坐标
// ystart 纵轴起始坐标
// width 位图宽度(占多少个字节的宽度)
// hight 位图高度(以象素为单位的)
// pbmp 位图数据头指针
//在屏上画一个矩形图片
//

void DrawBitmap( uint xstart, uint ystart,uint width,uint hight, uchar const *pbmp)
{
uint i; //数据开始的内存单元
uint a; //送的行数据个数
uint b; //送的列数据
uchar temp2;
uint temp0;
uint temp1;
a="width/8";
LCD_W_CMD=0x4c; // CSRDIR 代码
//清除矩形框内的数据----------------------------
temp1=ystart;
for(b=0;b<hight;b++)
{
i=(xstart/8)+temp1*PARA+page2;
LCD_W_CMD=0x46; // CSRW 代码
LCD_W_DATA=i;//0x30; // 设置参数光标指针低8位
LCD_W_DATA=i>>8;//0x2a; // 设置参数光标指针高8位
LCD_W_CMD=0x42;
for(temp0=a;temp0>0;temp0--)
{
LCD_W_DATA = 0x00;
};
temp1++;
};
//----------------------------------------------
temp1=ystart;
for(b=0;b<hight;b++)
{
i=(xstart/8)+temp1*PARA+page2;
LCD_W_CMD=0x46; // CSRW 代码
LCD_W_DATA=i;//0x30; // 设置参数光标指针低8位
LCD_W_DATA=i>>8;//0x2a; // 设置参数光标指针高8位
LCD_W_CMD=0x42;
for(temp0=0;temp0<a;temp0++)
{
temp2=*pbmp;
LCD_W_DATA =temp2;
pbmp++;
}
temp1++;
};
}
void W_DOT(uint O_X,uchar O_Y)//(0~319)*(0~239) 画点
{
uchar a,b,c,d;
uint x,y;
y=O_Y*PARA;
c=O_X/8;
a=O_X%8;
b=0x80;
b>>=a;
// b^=0xff;
x=page2;
x=x+y+c;
a=x;
c=x>>8;
LCD_W_CMD=0x4c; // CSRDIR 代码
LCD_W_CMD=0x46; // CSRW 代码
LCD_W_DATA=a;//0x30; // 设置参数光标指针低8位
LCD_W_DATA=c;//0x2a; // 设置参数光标指针高8位
LCD_W_CMD=0x43; // mread代码
d="LCD"_R_DATA;
d|=b;
LCD_W_CMD=0x4c; // CSRDIR 代码
LCD_W_CMD=0x46; // CSRW 代码
LCD_W_DATA=a;//0x30; // 设置参数光标指针低8位
LCD_W_DATA=c;//0x2a; // 设置参数光标指针高8位
LCD_W_CMD=0x42;
LCD_W_DATA=d;
}

void W_horizontal_line(uchar O_Y)//0~239 画水平线
{
uchar a;
uint i;
i=O_Y*PARA;
i+=page2;
LCD_W_CMD=0x4c; // CSRDIR 代码
LCD_W_CMD=0x46; // CSRW 代码
LCD_W_DATA=i;//0x30; // 设置参数光标指针低8位
LCD_W_DATA=i>>8;//0x2a; // 设置参数光标指针高8位
LCD_W_CMD=0x42;
for(a=40;a!=0;a--) LCD_W_DATA=0xff;
}

void W_vertical_line(uint O_X)//0~319 画垂直线
{
uchar a,b;
uint i;
i=page2;
a=O_X/8;
b=O_X%8;
i+=a;
a=0x80;
a>>=b;
// a^=0xff;
LCD_W_CMD=0x4f; // CSRDIR 代码
LCD_W_CMD=0x46; // CSRW 代码
LCD_W_DATA=i;//0x30; // 设置参数光标指针低8位
LCD_W_DATA=i>>8;//0x2a; // 设置参数光标指针高8位
LCD_W_CMD=0x42;
for(b=0x00;b<240;b++)
{
LCD_W_DATA=a;
};
}



文章评论2条评论)

登录后参与讨论

用户549784 2009-5-16 12:35

你好:能请教你一个问题吗? 你上面程序中有几点我不明白的,可不可以给我解释一下! 1,上面的PARA,page2是什么的变量,其作用是什么? 2,a="width/8";这句话中为什么要用双引号呢?还 有"LCD"_R_DATA;也是! 3,pbmp 位图数据,是怎样定的? 我的邮箱是:catpkw@126.com QQ345886601 谢谢你的帮忙!感激不尽!

burkett2011_327610014 2008-6-8 10:43

您好!我在做320240液晶(控制器为S1D13305)时,遇到这样一个问题:我做画点程序时,打点只能在以8的倍数的列显示(在第0列、第8列、第16列、、、) 其他的都打点显示不了。能 向您请教吗?
相关推荐阅读
用户1001829 2009-11-19 19:14
电池管理系统PC测试软件
采用RS232通讯,电池管理系统跟上位机通讯,有单只电池的电压,温度,电流,SOC等电池管理系统涉及到的参数,并将实时的数据保存为EXCEL文件,留做后续分析SOC精度。该软件具有其他数据处理功能,本...
用户1001829 2009-11-19 19:06
电池管理系统结构图
最近在做电池管理系统,这个是我做的电池管理系统的硬件结构图。...
用户1001829 2009-02-28 12:55
STC单片机下程序不稳定的问题。
最进在做一个项目,用的是STC12C5412AD的单片机,发现一个小情况,在复位脚上只接一个电阻,用内部复位的情况下,单片机不能稳定的下载程序,应该是不能下的情况多,而能下的情况少。能下程序那是偶然的...
用户1001829 2008-08-01 08:36
最近在做AVR的小单片机碰到的小问题
我在做AVR的单片机的时候用的IAR的4.30A的IDE,碰到sprintf()函数不能下载到片上面正常运行。总是像跑死的状态。后来经过多次试验,确定是编译器的的问题。解决办法是:将库改成DLIB,这...
用户1001829 2007-12-13 19:58
粗糙集理论的介绍(大理论简单化)
粗糙集理论介绍面对日益增长的数据库,人们将如何从这些浩瀚的数据中找出有用的知识?我们如何将所学到的知识去粗取精?什么是对事物的粗线条描述什么是细线条描述? 粗糙集合论回答了上面的这些问题。要想...
我要评论
2
11
关闭 站长推荐上一条 /2 下一条