12864图形显示函数

上传人:飞*** 文档编号:36672873 上传时间:2018-04-01 格式:DOC 页数:24 大小:146KB
返回 下载 相关 举报
12864图形显示函数_第1页
第1页 / 共24页
12864图形显示函数_第2页
第2页 / 共24页
12864图形显示函数_第3页
第3页 / 共24页
12864图形显示函数_第4页
第4页 / 共24页
12864图形显示函数_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《12864图形显示函数》由会员分享,可在线阅读,更多相关《12864图形显示函数(24页珍藏版)》请在金锄头文库上搜索。

1、/* * */ /程序说明:本程序为 12864(st7920)驱动程序,只实现了最简单的显示功能 /端口设置:RS、RW、EN 分别为 P0 口的 0、1、2,数据口为 P2 口 /用取模软件取的图形或汉字必须是逐行取的,因为本函数是在液晶上逐行打点的 /* * */ #include #include/内含-NOP-函数 #include /内含 rand()函数 #define uchar unsigned char #define uint unsigned int/*宏定义所需指令 #define BASIC_SET 0x30 #define EXTEND_SET 0x34 #def

2、ine DRAW_ON 0x36 #define DRAW_OFF 0x34/*端口定义 sbit LCD_RS = P00; sbit LCD_RW = P01; sbit LCD_EN = P02; /*变量定义 /uchar dis110;/读出缓存 unsigned char tu; /*短延时 void delay(uint k) uint i; uchar j; for(i = 0; i x1) bak = x1; x1 = x0; x0 = bak; do lcd_set_dot(x0 , y);/从左到右逐点显示 x0 +; while(x1 = x0); */*画竖直线函数*

3、/ /x 为起始点和终点的水平坐标,y0、y1 为垂直坐标*/ /*/ /*void gui_rline(uchar x, uchar y0, uchar y1) uchar bak;/用于对两个数互换的中间变量,使 y1 为大值 if(y0 y1) bak = y1; y1 = y0; y0 = bak; do lcd_set_dot(x , y0);/从上到下逐点显示 y0 +; while(y1 = y0); */*任意两点间画直线*/ /x0、y0 为起始点坐标,x1、y1 为终点坐标*/ /*/ /*void gui_line(uchar x0 , uchar y0 , uchar

4、x1 , uchar y1) char dx;/直线 x 轴差值 char dy;/直线 y 轴差值 char dx_sym;/x 轴增长方向,为-1 时减值方向,为 1 时增值方向 char dy_sym;/y 轴增长方向,为-1 时减值方向,为 1 时增值方向char dx_x2;/dx*2 值变量,用于加快运算速度 char dy_x2;/dy*2 值变量,用于加快运算速度 char di; /决策变量if(x0 = x1)/判断是否为垂直线 gui_rline(x0 , y0 , y1);/画垂直线 return; if(y0 = y1)/判断是否为水平线 gui_hline(x0 ,

5、 x1 , y0);/画水平线 return; dx = x1 - x0;/求取两点之间的差值 dy = y1 - y0;/判断增长方向,或是否为水平线、垂直线、点 if(dx 0)/判断 x 轴方向 dx_sym = 1; else if(dx 0)/判断 y 轴方向 dy_sym = 1; else if(dy = dy)/对于 dx=dy,使用 x 轴为基准 di = dy_x2 - dx; while(x0 != x1) lcd_set_dot(x0,y0); x0 +=dx_sym; if(di 50) with = 50;dx = x1-x0;/ 求取两点之间的差值 dy = y1

6、-y0;wx = with/2; wy = with-wx-1;/判断增长方向,或是否为水平线、垂直线、点 if(dx0)/ 判断 x 轴方向 dx_sym = 1;/ dx0,设置 dx_sym=1 else if(dx=wy) break; wx+; return; if(dy0)/ 判断 y 轴方向 dy_sym = 1;/ dy0,设置 dy_sym=1 else if(dy=wy) break; wx+; return; / 将 dx、dy 取绝对值 dx = dx_sym * dx; dy = dy_sym * dy;/计算 2 倍的 dx 及 dy 值 dx_x2 = dx*2;

7、 dy_x2 = dy*2;/使用 Bresenham 法进行画直线 if(dx=dy)/ 对于 dx=dy,则使用 x 轴为基准 di = dy_x2 - dx; while(x0!=x1) /x 轴向增长,则宽度在 y 方向,即画垂直线 draw_a = y0-wx; if(draw_a x1) i = x0; x0 = x1; x1 = i; if(y0 y1) i = y0; y0 = y1; y1 = i; /*判断是否是直线*/ /*if(y0 = y1)/画水平线 gui_hline(x0 , x1 , y0); return; if(x0 = x1)/画竖直线 gui_rlin

8、e(x0 , y0 , y1); return; while(y0 127)/横轴超出液晶边界 return; if(y0 + with) 63) return; gui_rectangle(x0 , y0 , x0 + with , y0 + with); */*画填充正方形函数*/ /x0、y0 为正方形左上角坐标,with 正方形边长*/ /*/ /*void gui_square_fill(uchar x0 , uchar y0 , uchar with) if(with = 0) return; if(x0 + with) 127)/横轴超出液晶边界 return; if(y0 +

9、with) 63) return; gui_rectangle_fill(x0 , y0 , x0 + with , y0 + with); */*画圆函数*/ /x0、y0 为圆心坐标,r 为圆的半径*/ /*/ /*void gui_circle(uchar x0 , uchar y0 , uchar r) char a , b; char di; if(r 31 | r = 0)/圆大于液晶屏或者没半径则返回 return; a = 0; b = r; di = 3 - 2 * r;/判断下个点位置的标志 while(a 1;center_y = (y0 + y1) 1; /* 计算出椭

10、圆的半径,x 轴半径和 y 轴半径 if(x0 x1) radius_x = (x0 - x1) 1;else radius_x = (x1 - x0) 1;if(y0 y1) radius_y = (y0 - y1) 1;else radius_y = (y1 - y0) 1; /* 计算半径平方值 radius_xx = radius_x * radius_x;radius_yy = radius_y * radius_y;/* 计算半径平方值乘 2 值 radius_xx2 = radius_xx=0) if(di127) return; if(y63) return;for(i=0;

11、i127) return;/若显示超出了液晶屏则返回 /* /*在自定义大小的区域内画图或画字函数 * /参数说明: x、y 指定显示区域的起始点坐标 / dat要输出显示的图形或汉字点阵数组。 / hno要显示区域的长度 / lno要显示区域的高度 / flag 反显标志,1 为反显 /* void GUI_Put_Area(unsigned char x,unsigned char y,unsigned char *dat,unsigned char hno,unsigned char lno,unsigned char flag) unsigned char i;for(i=0;i3);/比如说上一行打了 2 字节,此处的意思是使数 据向后推进 2 字节,(hno3)意思是算出上一行有几个字节数据 if(hno /字节也按一个字节取,所以上一句少计算了一个字节,这 里加上 /* *以上为 GDRAM 绘图部分 */*

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号