新闻中心

EEPW首页>嵌入式系统>设计应用> 51单片机总线驱动

51单片机总线驱动

作者: 时间:2016-11-29 来源:网络 收藏
/*****************************************用画点的方式画竖线*****************************************/void erect(uchar y0,uchar y1,uchar x){uchar temp,n;if(y0>y1){temp=y0;y0=y1;y1=temp;}n=y1-y0;for(;n>0;n--){sel_point(x,y0+n);}}/*******************************************************布兰森汉姆(Bresenham)算法画线 两端点(x0,y0) (x1,y1)*******************************************************/void Draw_line(uchar x0,uchar y0,uchar x1,uchar y1){int dx,dy; //定义X.Y轴上增加的变量值int sub;int temp; //起点、终点大小比较,交换数据时的中间变量uchar flag;if(x0>x1) //X轴上,起点大于终点,交换数据{temp=x1;x1=x0;x0=temp; temp=y1;y1=y0;y0=temp; } dx=x1-x0; //X轴方向上的增量dy=y1-y0; //Y轴方向上的增量if(dx==0) erect(y0,y1,x0);if(dy==0) rhorizontal(x0,x1,y0);if(dy>0)flag=1;elseflag=0;if((dx!=0)&&(dy!=0)){// 布兰森汉姆(Bresenham)算法画线 /if(flag==1){if(dx>=dy) //*近X轴{sub=2*dy-dx; //计算下个点的位置 while(x0!=x1){sel_point(x0,y0); //画起点x0++; // X轴上加1if(sub>0) // 判断下下个点的位置{y0++; // 为右上相邻点,即(x0+1,y0+1)sub+=2*dy-2*dx;}else sub+=2*dy; // 判断下下个点的位置 }sel_point(x0,y0);}else{sub=2*dy-dx; //*近Y轴 while(y0!=y1){sel_point(x0,y0); //画起点y0++; if(sub>0) //判断下下个点的位置{x0++; sub+=2*dx-2*dy;}elsesub+=2*dx;}sel_point(x0,y0);}}else{dy=y0-y1;if(dx>=dy) //*近X轴{sub=2*dy-dx; //计算下个点的位置 while(x0!=x1){sel_point(x0,y0); //画起点x0++; // X轴上加1if(sub>0) // 判断下下个点的位置{y0--; // 为右上相邻点,即(x0+1,y0+1)sub+=2*dy-2*dx;}else sub+=2*dy; // 判断下下个点的位置 }sel_point(x0,y0);}else{sub=2*dx-dy; //*近Y轴 while(y0!=y1){sel_point(x0,y0); //画起点y0--; if(sub>0) //判断下下个点的位置{x0++; sub+=2*dx-2*dy;}elsesub+=2*dx;}sel_point(x0,y0);}}} }/****************************************************画圆 圆点(x,y) 半径 r****************************************************/void draw_circle(int x, int y, int r){int a, b, num;a = 0;b = r;while(2 * b * b >= r * r) // 1/8圆即可{sel_point(x + a, y - b); // 0~1sel_point(x - a, y - b); // 0~7sel_point(x - a, y + b); // 4~5sel_point(x + a, y + b); // 4~3sel_point(x + b, y + a); // 2~3sel_point(x + b, y - a); // 2~1sel_point(x - b, y - a); // 6~7sel_point(x - b, y + a); // 6~5a++;num = (a * a + b * b) - r*r;if(num > 0){b--;a--;}}}void lcd_init(){lcd_writecom_two(0x00,0x00,0x24);lcd_writecom_two(0x00,0x00,0x21);lcd_writecom_two(0x00,0x00,0x42);lcd_writecom_two(0x28,0x00,0x43);//28lcd_writecom_two(0x00,0x00,0x40);lcd_writecom_two(0x01e,0x00,0x41);//1elcd_writecom(0xa0);lcd_writecom(0x98);lcd_writecom(0x80);}main(){unsigned char i;lcd_init();Draw_line(0,0,239,127);Draw_line(0,127,239,0);Draw_line(0,0,239,0);Draw_line(0,127,239,127);Draw_line(0,0,0,127);Draw_line(239,0,239,127);while(1){for(i=60;i<150;i++)draw_circle(i,64, 60);}}
上一页 1 2 3 4 下一页

关键词:51单片机总线驱

评论


技术专区

关闭