LCD12864画点画线画圆画正弦波Word文档下载推荐.docx

上传人:b****4 文档编号:16994675 上传时间:2022-11-27 格式:DOCX 页数:15 大小:80.13KB
下载 相关 举报
LCD12864画点画线画圆画正弦波Word文档下载推荐.docx_第1页
第1页 / 共15页
LCD12864画点画线画圆画正弦波Word文档下载推荐.docx_第2页
第2页 / 共15页
LCD12864画点画线画圆画正弦波Word文档下载推荐.docx_第3页
第3页 / 共15页
LCD12864画点画线画圆画正弦波Word文档下载推荐.docx_第4页
第4页 / 共15页
LCD12864画点画线画圆画正弦波Word文档下载推荐.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

LCD12864画点画线画圆画正弦波Word文档下载推荐.docx

《LCD12864画点画线画圆画正弦波Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《LCD12864画点画线画圆画正弦波Word文档下载推荐.docx(15页珍藏版)》请在冰豆网上搜索。

LCD12864画点画线画圆画正弦波Word文档下载推荐.docx

{

LCD=0xff;

//P0设置为输入

e=1;

//给使能信号

dat=0x80&

LCD;

//只判断DB7位的状态

e=0;

}

while(dat==0x80);

//忙则继续检测

voidlcdWrite(bitml,ucharzifu)

checkBusy();

rs=ml;

rw=0;

P0=zifu;

e=1;

delay

(1);

e=0;

voidClearLCD(ucharzifu)

uchari,j;

lcdWrite(0,0x3f);

cs1=1;

cs2=1;

for(i=0;

i<

8;

i++)

lcdWrite(0,0xb8+i);

lcdWrite(0,0xc0);

lcdWrite(0,0x40);

for(j=0;

j<

64;

j++)

{

lcdWrite(1,zifu);

}

voidinitLCD()//初始化

lcdWrite(0,0x3e);

//关显示

//开显示

ClearLCD(0x0f);

//清屏

/*液晶显示函数*/

/*x和y来控制显示的位置,x为行,y为列,x1和y1为字的像素行数,x2为显示几行,y2为显示几个字数*/

voidjis(ucharx,uchary,ucharx1,uchary1,ucharx2,uchary2,ucharcode*hz)

uchari,j,k,l,a;

x2;

y2;

for(k=0;

k<

x1;

k++)

{

lcdWrite(0,0xb8+x+i*x1+k);

lcdWrite(0,0xc0);

lcdWrite(0,0x40+y+j*y1);

a=i*x1*y1*y2+j*x1*y1+k*y1;

for(l=0;

l<

y1;

l++)

{

lcdWrite(1,hz[a+l]);

}

}

/*****************************writedata************************/

voidWriteData(uchardsp_data)

if(chip_select==1)

cs1=1;

cs2=0;

else

cs1=0;

cs2=1;

lcdWrite(1,dsp_data);

/****************************readdata***********************/

ucharReadData(void)

uchardsp_data;

LCD=0xFF;

rs=1;

//E的下降沿,然后E持续拉高读才有效

dsp_data=LCD;

return(dsp_data);

ucharj=0,i=0;

ucharr=32;

ucharcodehz[]=

0x20,0x30,0xAC,0x63,0x10,0x00,0x40,0x20,0x58,0x47,0x44,0x48,0x50,0x20,0x20,0x00,

0x22,0x23,0x22,0x12,0x12,0x00,0x42,0x62,0x5A,0x46,0x42,0x42,0x52,0xE2,0x42,0x00,/*"

绘"

0*/

0x00,0xFE,0x42,0x42,0x22,0x1E,0xAA,0x4A,0xAA,0x9A,0x0A,0x02,0x02,0xFE,0x00,0x00,

0x00,0xFF,0x42,0x42,0x41,0x41,0x48,0x72,0x54,0x40,0x41,0x43,0x41,0xFF,0x00,0x00,/*"

图"

1*/

0x10,0x21,0x86,0x60,0x00,0x0C,0xD4,0x54,0x55,0xF6,0x54,0x54,0xD4,0x0C,0x04,0x00,

0x04,0xFC,0x03,0x00,0x00,0x00,0x8F,0x69,0x09,0x0F,0x09,0x29,0xCF,0x00,0x00,0x00,/*"

演"

2*/

0x00,0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,

0x10,0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00,/*"

示"

3*/

};

/***********************在LCD上任意坐标画点********************************/

voidDrawPoint(ucharX,ucharY,ucharType)

//X,Y化点的坐标Type画点的类型:

2反相点,0檫除点,1画点

ucharDX=(Y>

>

3);

//计算出属于哪个字节

ucharBX=Y-(DX<

<

//计算出属于字节哪一位

ucharTempData=0;

if(X>

63)

chip_select=2;

X-=64;

else

chip_select=1;

lcdWrite(0,0xb8+DX);

//设行地址

lcdWrite(0,0x40+X);

//设列地址

TempData=ReadData();

//读出所画点所在字节的内容

switch(Type)//对该字节进行相应操作

case0:

TempData&

=~(1<

BX);

//擦除

break;

case1:

TempData|=(1<

BX);

//画点

case2:

TempData^=(1<

//反相

lcdWrite(0,0xb8+DX);

WriteData(TempData);

//把修改后的字节送回LCD,达到画点目的

/********插值法画任意两点之间直线的函数,函数中只用加减法,程序运行效率很高**********/

DrawLine(ucharx1,uchary1,ucharx2,uchary2)

//x1,y1起点坐标;

x2,y2终点坐标;

ucharx,y;

uchard_x,d_y;

charerr=0;

uchartemp=0;

if(y2<

y1)

x=x1;

y=y1;

x1=x2;

y1=y2;

x2=x;

y2=y;

d_y=y2-y1;

if(d_y==0)

if(x1>

x2)

x=x1;

x1=x2;

x2=x;

for(x=x1;

x<

=x2;

x++)DrawPoint(x,y1,1);

if(x2>

=x1)

temp=1;

d_x=x2-x1;

elsed_x=x1-x2;

DrawPoint(x,y,1);

if(temp&

&

(d_y<

=d_x))

while(x!

=x2)

if(err<

0)

x=x+1;

err=err+(y2-y);

else

y=y+1;

err=err+(y2-y)-(x2-x);

DrawPoint(x,y,1);

elseif(temp&

(d_y>

d_x))

while(y!

=y2)

d_x=x2-x;

d_y=y2-y;

err=err+d_y-d_x;

err=err-d_x;

elseif(!

temp&

d_x=x-x2;

x=x-1;

err=err+d_y;

temp&

/***********************************************************************/

voidDrawLevel(void)

127;

DrawPoint(i,32,1);

//画水平直线

/************************************************************************************/

voidDrawSineWave(void)

ucharxn=0;

ucharyn=32;

uchari;

ucharxi,yi;

xi=i;

yi=(sin(i*0.1)*32)+32;

DrawLine(xn,yn,xi,yi);

//在一系列零散的点上,两点两点之间连线,从而得到一条曲线

xn=i;

yn=yi;

/*************************************************************************************/

voidDrawCircle(ucharx0,uchary0,ucharr)//x0,y0为圆心坐标,r为圆半径

ucharxn,yn,xi,yi;

unsignedintj;

xn=cos(0)*r+x0;

yn=sin(0)*r+y0;

for(j=0;

630;

xi=(cos(j*0.01)*r)+x0;

yi=(sin(j*0.01)*r)+y0;

xn=xi;

/**************************************************************************************************/

voidDrawRetic(ucharx0,uchary0,ucharx1,uchary1)//画正方形,x0,y0为左上角坐标,x1,y1为右下角坐标

DrawLine(x0,y0,x1,y0);

DrawLine(x0,y0,x0,y1);

DrawLine(x1,y0,x1,y1);

DrawLine(x0,y1,x1,y1);

/*uchari;

=x1-x0;

DrawPoint(x0+i,y0,1);

DrawPoint(x0+i,y1,1);

=y1-y0;

DrawPoint(x0,y0+i,1);

DrawPoint(x1,y0+i,1);

}*/

 

voidDrawTrigle(ucharx1,uchary1,ucharx2,uchary2,ucharx3,uchary3)//画三角形,三个坐标为三角形顶点

DrawLine(x1,y1,x2,y2);

DrawLine(x2,y2,x3,y3);

DrawLine(x1,y1,x3,y3);

/********************************main**********************************************************/

voidmain(void)

initLCD();

while

(1)

ClearLCD(0x00);

jis(0,32,2,16,1,2,hz);

cs2=1;

jis(0,0,2,16,1,2,hz+2*32);

DrawLine(0,63,127,0);

DrawRetic(10,10,100,50);

DrawTrigle(63,17,20,60,100,60);

DrawLevel();

DrawSineWave();

DrawCircle(63,32,r);

r-=4;

if(r<

8)

r=32;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1