1、 LCD=0xff; /P0设置为输入 e=1; /给使能信号 dat=0x80&LCD; /只判断DB7位的状态 e=0; while(dat=0x80); /忙则继续检测void lcdWrite(bit ml,uchar zifu) checkBusy(); rs=ml; rw=0; P0=zifu; e=1; delay(1); e=0;void ClearLCD(uchar zifu) uchar i,j; lcdWrite(0,0x3f); cs1=1; cs2=1; for(i=0;i8;i+) lcdWrite(0,0xb8+i); lcdWrite(0,0xc0); lcdW
2、rite(0,0x40); for(j=0;j64;j+) lcdWrite(1,zifu); void initLCD() /初始化 lcdWrite(0,0x3e); /关显示 /开显示 ClearLCD(0x0f); /清屏/*液晶显示函数*/*x和y来控制显示的位置,x为行,y为列,x1和y1为字的像素行数,x2为显示几行,y2为显示几个字数 */void jis(uchar x,uchar y,uchar x1,uchar y1,uchar x2,uchar y2,uchar code *hz) uchar i,j,k,l,a;x2;y2; for(k=0;kx1;k+) lcdWr
3、ite(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 3); /计算出属于哪个字节 uchar BX = Y - (DX 63) chip_select=2; X -= 64; else chip_select=1; lcdWrite(0,0xb8+DX); /设行地址 lcdWrite(0,0x40+X); /设列地址 TempData = ReadData(); /读出所画点所在字节的内容 switch (Type) /对该字节进行相应操作
4、case 0: TempData &= (1BX); /擦除 break; case 1: TempData |= (1 BX); /画点 case 2: TempData = (1 /反相 lcdWrite(0,0xb8+DX); WriteData(TempData); /把修改后的字节送回LCD,达到画点目的/*插值法画任意两点之间直线的函数,函数中只用加减法,程序运行效率很高*/DrawLine(uchar x1,uchar y1,uchar x2,uchar y2) /x1,y1起点坐标;x2,y2终点坐标; uchar x,y; uchar d_x,d_y; char err=0;
5、 uchar temp=0; if(y2x2) x=x1; x1=x2; x2=x; for ( x=x1;x=x1) temp=1; d_x=x2-x1; else d_x=x1-x2; DrawPoint(x,y,1); if(temp&(d_y=d_x) while(x!=x2) if(errd_x) while(y!=y2) d_x=x2-x; d_y=y2-y; err=err+d_y-d_x; err=err-d_x; else if(!temp& d_x=x-x2; x=x-1; err=err+d_y;temp &/*/void DrawLevel(void)127; Draw
6、Point(i,32,1); /画水平直线/*/void DrawSineWave(void) uchar xn=0; uchar yn=32; uchar i; uchar xi,yi; xi=i; yi=(sin(i*0.1)*32)+32; DrawLine(xn,yn,xi,yi); /在一系列零散的点上,两点两点之间连线,从而得到一条曲线 xn=i; yn=yi;/*/void DrawCircle(uchar x0,uchar y0,uchar r)/x0,y0为圆心坐标,r为圆半径 uchar xn,yn,xi,yi; unsigned int j; xn=cos(0)*r+x0
7、; 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;/*/void DrawRetic(uchar x0,uchar y0,uchar x1,uchar y1)/画正方形,x0,y0为左上角坐标,x1,y1为右下角坐标 DrawLine(x0,y0,x1,y0); DrawLine(x0,y0,x0,y1); DrawLine(x1,y0,x1,y1); DrawLine(x0,y1,x1,y1);/* uchar i;=x1-x0; DrawPoint(x0+i,y0,1); D
8、rawPoint(x0+i,y1,1);=y1-y0; DrawPoint(x0,y0+i,1); DrawPoint(x1,y0+i,1); */void DrawTrigle(uchar x1,uchar y1,uchar x2,uchar y2,uchar x3,uchar y3)/画三角形,三个坐标为三角形顶点 DrawLine(x1,y1,x2,y2); DrawLine(x2,y2,x3,y3); DrawLine(x1,y1,x3,y3);/* main */void main(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 (r8) r=32;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1