标题:
玩转12864,划线,画圆,汉字,图片程序
[打印本页]
作者:
腾飞的龙
时间:
2017-3-1 10:29
标题:
玩转12864,划线,画圆,汉字,图片程序
12864并行显示
/*********************************************************
功 能:12864并行驱动画任意线段和园以及图片.汉字程序
单片机:STC12C5A60S2
晶 振:11.0592M
时 间:2017-3-1
作 者:苏义江修改整理(感谢前辈的辛苦)
注 释:在多功能试验板成功显示
*****************************************************/
#include<stc12c5a60s2.h>
#include<stdlib.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define pi 3.1415926
#define LCDDATA P0
sbit RS = P2^7;
sbit RW = P2^6;
sbit EN = P2^5;
uchar code hanz[]= {"玩转12864!"};
uchar code hanz2[]={"苏义江爱好单片机"};
uchar code logo[]= {
//取模方式:纵向字节倒序
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x0F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xFC,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xC3,
0xFC,0x00,0x30,0x00,0x06,0x00,0xE0,0x06,0x66,0x19,0x8C,0x31,
0x00,0x3F,0xFF,0xC3,0xFC,0x00,0x30,0x00,0x06,0x00,0xE0,0x06,
0x66,0x19,0x8C,0x31, 0x00,0x3F,0xFE,0x01,0xFE,0x02,0x39,0x00,
0x06,0x00,0xC0,0x0C,0x62,0x19,0x8C,0x31, 0x00,0x3F,0xF8,0x00,
0xFE,0x07,0x31,0x80,0xFC,0x00,0xC0,0x0C,0x62,0x19,0x8C,0x31,
0x00,0x3F,0xF0,0x00,0xFE,0x06,0x31,0x80,0x78,0x00,0xC0,0x0C,
0x66,0x1D,0xDC,0x31, 0x00,0x3F,0xE0,0x01,0xFE,0x06,0x31,0x80,
0x30,0x00,0xC0,0x0C,0x00,0x19,0xCC,0x30, 0x00,0x3F,0xC0,0x03,
0xFE,0x07,0x39,0x80,0x38,0x00,0xC0,0x1F,0x00,0x18,0x8C,0x00,
0x00,0x3F,0xC0,0x03,0xFE,0x07,0x39,0x80,0x38,0x00,0xC0,0x1F,
0x00,0x18,0x8C,0x00, 0x00,0x3F,0xC0,0x3F,0xFE,0x06,0x31,0x80,
0x38,0x00,0xC0,0x3D,0x18,0x19,0x8C,0x0C, 0x00,0x3F,0x80,0x7F,
0xFE,0x06,0x31,0x80,0x38,0x00,0xE0,0x3D,0x18,0x19,0x8C,0x1C,
0x00,0x3F,0x80,0xFF,0xFE,0x06,0x31,0x80,0x18,0x00,0xE0,0x3D,
0x18,0x19,0x8C,0x3C, 0x00,0x3F,0x81,0xF3,0xFE,0x07,0x31,0x80,
0x38,0x00,0xE0,0x3F,0x18,0x19,0xD8,0x0C, 0x00,0x3F,0x81,0xF3,
0xFE,0x07,0x31,0x80,0x38,0x00,0xE0,0x3F,0x18,0x19,0xD8,0x0C,
0x00,0x3F,0x03,0xC1,0xFE,0x00,0x30,0x00,0x30,0x00,0xE0,0x3F,
0x18,0x18,0x00,0x0C, 0x00,0x3F,0x03,0xC0,0xFE,0x00,0x30,0x01,
0xF0,0x00,0xE0,0x35,0x18,0x1C,0x00,0x0C, 0x00,0x3F,0x03,0x80,
0xFE,0x00,0x3C,0x80,0x00,0x00,0xE0,0x0C,0x18,0x0C,0x00,0x18,
0x00,0x3F,0x03,0x80,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x3F,0x03,0x80,0xFE,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3F,0x03,0xC0,
0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3F,0x01,0xC1,0xFE,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF, 0x00,0x3F,0x81,0xFF,0xFE,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3F,0x80,0xFF,
0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x3F,0x80,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x3F,0x80,0x7F,0xFE,0x00,0x00,0x00,
0x00,0x00,0x08,0x08,0x00,0x00,0x00,0x00, 0x00,0x3F,0xC0,0x0F,
0xFE,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
0x00,0x3F,0xE0,0x01,0xFE,0x01,0x01,0x80,0x00,0x60,0x10,0xD0,
0x00,0x00,0x00,0x00, 0x00,0x3F,0xF0,0x01,0xFE,0x04,0x44,0x4C,
0x89,0xB1,0x93,0x70,0x00,0x00,0x00,0x00, 0x00,0x3F,0xF8,0x00,
0xFE,0x0C,0x4C,0x4D,0xD3,0x1B,0x12,0x30,0x78,0xE3,0xF8,0x3C,
0x00,0x3F,0xF8,0x00,0xFE,0x0C,0x4C,0x4D,0xD3,0x1B,0x12,0x30,
0x78,0xE3,0xF8,0x3C, 0x00,0x3F,0xFC,0x01,0xFE,0x0F,0xCF,0xC5,
0xF2,0x12,0x24,0x30,0x81,0x16,0x48,0x60, 0x00,0x3F,0xFF,0x01,
0xFE,0x08,0x08,0x06,0x62,0x12,0x24,0x20,0x82,0x14,0x88,0x40,
0x00,0x3F,0xFF,0xFF,0xFE,0x08,0x08,0x06,0x63,0x26,0x26,0x60,
0x83,0x24,0x88,0x40, 0x00,0x0F,0xFF,0xFF,0xFE,0x07,0x07,0x04,
0x41,0xC4,0x63,0xE4,0x71,0xC0,0x92,0x39, 0x00,0x0F,0xFF,0xFF,
0xFE,0x07,0x07,0x04,0x41,0xC4,0x63,0xE4,0x71,0xC0,0x92,0x39,
0x00,0x07,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00 }; //图像数据
void delay(uchar i)
{
for(;i>0;i--);
}
void delayms( uint i)
{
uint j;
for(;i>0;i--)
{ for(j=1000;j>0;j--);}
}
//写指令
void writecmd(uchar cmd)//写指令
{
LCDDATA=0x00;
RW=0;
RS=0;
EN=0;
LCDDATA=cmd;
delay(2);
EN=1;
delay(20);
EN=0;
delay(20);
}
//写数据
void writedate(uchar date)
{
//while((readstatus() &0x80 )!=0x00);
LCDDATA=0x00;
RW=0;
RS=1;
EN=0;
LCDDATA=date;
delay(2);
EN=1;
delay(20);
EN=0;
delay(20);
}
//读12864内部数据
uchar readdate()
{
uchar i;
//while((readstatus() &0x80 )!=0x00);
RW=1;
RS=1;
EN=0;
delay(10);
EN=1;
LCDDATA=0xff;
delay(10);
EN=0;
EN=1;
LCDDATA=0;
delay(10);
delay(10);
EN=0;
i=LCDDATA;
return i;
}
/*******************************************
函数名称:LCD_init
功 能: 初始化LCD
参 数:无
返回值 :无
********************************************/
void LCD_init()
{
delayms(30);
writecmd(0x30);
delay(20);
writecmd(0x30);
delay(20);
writecmd(0x0c);
delay(20);
writecmd(0x01);
delay(20);
writecmd(0x06);
delay(20);
}
//功 能:指定地址输入指定个数的字
//addr表示地址 * pt表示数据 num表示数据或汉字个数
void Disp_HZ(uchar addr,const uchar * pt,uchar num)
{
uchar i;
writecmd(addr);
for(i = 0;i < (num*2);i++)
{
writedate(*(pt++));
delayms(1);
}
}
//清内部随机数据
void Clear_GDRAM(void)
{
uchar x,y,i,j;
writecmd(0x34); //打开扩展指令集
y=0x80;
x=0x80;
for(i=0;i<32;i++)
{
writecmd(y);
writecmd(x);
for(j=0;j<16;j++)
{
writedate(0x00);
delay(30);
}
y++;
}
y=0x80;
x=0x88;
for(i=0;i<32;i++)
{
writecmd(y);
writecmd(x);
for(j=0;j<16;j++)
{
writedate(0x00);
delay(30);
}
y++;
}
writecmd(0x30); //回到基本指令集
}
//画图片
void Draw_PM(uchar *ptr)
{
uint x=0;
uchar i,j;
writecmd(0x34); //扩展指令动作
writecmd(0x36); //扩展指令动作
for(i=0;i<32;i++) //上半屏显示
{
writecmd(0x80|i); //列位置
writecmd(0x80); //行位置
for(j=0;j<16;j++) //256/8=32 byte
{ //列位置每行自动增加
writedate(*ptr);
ptr++;
}
}
for(i=0;i<32;i++) //下半屏显示
{
writecmd(0x80|i); //列位置
writecmd(0x88); //行位置
for(j=0;j<16;j++) //256/8=32 byte
{
writedate(*ptr);
ptr++;
}
}
writecmd(0x30);
}
/*************************************
功能描述: 读取绘图RAM中指定坐标的数据
** 说 明: 参数输入坐标地址,
读取后从坐标地址参数位返回数据,所以,
地址参数在输入前须使用
****************************************
void LCD_Read_dat_I(uchar *xp,uchar *yp)
{
writecmd(*yp); //写竖坐标(0x80-0x9f)
writecmd(*xp); //写横坐标(AC地址) 上半屏(0x80-0x87) 下半屏(0x88-0x90)
readdate(); //试读
*xp=readdate(); //读高字节并返回给xp
*yp=readdate(); //读低字节并返回给yp
}
*/
/*************************************
//画点 在整个屏幕上画一个点 X 0~127 Y 0~63
功能描述: 指定坐标点画点
** 输 入: unsigned char xp,unsigned char yp,bit dat
X,Y行列坐,dat 1写或0擦除
*******************************************/
/*
void Draw_point(uchar xp,uchar yp,bit dat)
{
uchar xd,rx,ry;
xd=xp/0x10; //计算横坐标AC步进
xp%=0x10; //计算AC地址位偏移
xp++;
writecmd(0x34);
writecmd(0x36);
if(yp>31)
{ //如果yp大于31选下半屏
yp-=32; //计算yp在下半屏的竖向坐标
yp+=0x80; //地址命名
xd+=0x88; //下半屏起点地址是0x88,地址命名
}
else
{ //选上半屏
yp+=0x80; //地址命名
xd+=0x80; //上半屏起点地址是0x80,地址命名
}
rx=xd;ry=yp; //取AC数据函数需要两个参数返回数据,且参数公用地址,所以使用零时变量
LCD_Read_dat_I(&rx,&ry); //取当前字节数据
writecmd(yp); //重指定当前y地址
writecmd(xd); //重指定当前x地址
if(dat)
{ //如果是画点
if(xp<=8)
{ //如果当前画点坐标在AC地址数据对应的高字节(取余计算结果与字节移位方向相反)
writedate(rx|(0x01<<(8-xp)));//读取的高位数据与翻转的指定位进行与操作后写入高位
writedate(ry); //读取的低位数据原样写回
}
else
{ //如果当前画点坐标在AC地址数据对应的低字节(取余计算结果与字节移位方向相反)
writedate(rx); //读取的高位数据原样写回
writedate(ry|(0x01<<(16-xp))); //读取的低位数据与指定位进行或操作后写入低位
}
}
else
{ //如果是擦除图像
if(xp<=8)
{ //如果当前画点坐标在AC地址数据对应的高字节(取余计算结果与字节移位方向相反)
writedate(rx&~(0x01<<(8-xp)));//读取的高位数据与翻转的指定位进行与操作后写入高位
writedate(ry); //读取的低位数据原样写回
}
else
{ //如果当前画点坐标在AC地址数据对应的低字节(取余计算结果与字节移位方向相反)
writedate(rx); //读取的高位数据原样写回
writedate(ry&~(0x01<<(16-xp))); //读取的低位数据与翻转的指定位进行与操作后写入低位
}
}
writecmd(0x30);
}
*/
void Draw_point(uchar X,uchar Y,uchar clour)
// X行 Y列 clour为0时画点 为其它清除这个点
{
uchar x_pos,y_pos,x_bit;
uint read_data1,read_data2,dat1,dat2;
//计算LCD位置
writecmd(0x34);
writecmd(0x36);
x_pos=X/16; //取16*16首地址
if(Y>31)
x_pos+=8; //计算该点所属LCD液晶中X坐标位置,上半屏0-7,下半屏8-15
x_bit=X%16; //该点位于所在16bit中的第几位
y_pos=Y%32;
// writecmd(0x34);
writecmd(0x36);
writecmd(0x80+y_pos);
writecmd(0x80+x_pos);
readdate(); //此处为什么要中上不知道为什么????
read_data1 = readdate(); //高八位!
read_data2 = readdate(); //低八位!
if(x_bit<8)
{
if(clour==0)
{
dat1=read_data1|(1<<(7-x_bit));
}
else
{
dat1=read_data1&~(1<<(7-x_bit));
}
dat2=read_data2;
}
else
{
dat1=read_data1;
if(clour==0)
{
dat2=read_data2|(1<<(15-x_bit));
}
else
{
dat2=read_data2&~(1<<(15-x_bit));
}
}
writecmd(0x36);
writecmd(0x80+y_pos);
writecmd(0x80+x_pos);
writedate(dat1);
writedate(dat2);
writecmd(0x30);
}
//画直线X1行起点X2行终点 Y列 clour为0时画点 为其它清除这个点
void Draw_zhi(uchar X1,uchar X2,uchar Y,uchar clour)
{
uchar i,temp ;
if(X1>X2) //X轴上,起点大于终点,交换数据
{
temp=X2;
X2=X1;
X1=temp;
}
for(i=X1;i<=X2;i++)
{
Draw_point(i,Y,clour);
}
}
//画竖线 X行 Y1列起点点 Y2列终点 clour为0时画点 为其它清除这个点
void Draw_shu(uchar X,uchar Y1,uchar Y2,uchar clour)
{
uchar i ,temp;
if(Y1>Y2) //X轴上,起点大于终点,交换数据
{
temp=Y2;
Y2=Y1;
Y1=temp;
}
for(i=Y1;i<=Y2;i++)
{
Draw_point(X,i,clour);
}
}
/*******************************************
函数名称:Draw_line
功 能:在整个屏幕上画一条线 任一的角度都可以画线!!!!
参 数:ptr--指向保存图片位置的指针
返回值 :无
clour为0时画点 为其它清除这个点
********************************************/
void Draw_line(uchar x0,uchar y0,uchar x1,uchar y1,uchar clour)
{
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)
Draw_shu(x0,y0,y1,clour);
if(dy==0)
Draw_zhi(x0,x1,y0,clour);
if(dy>0)
flag=1;
else
flag=0;
if((dx!=0)&&(dy!=0))
{
/* 布兰森汉姆(Bresenham)算法画线 */
if(flag==1)
{
if(dx>=dy) //靠近X轴
{
sub=2*dy-dx; //计算下个点的位置
while(x0!=x1)
{
Draw_point(x0,y0,clour); //画起点
x0++; // X轴上加1
if(sub>0) // 判断下下个点的位置
{
y0++; // 为右上相邻点,即(x0+1,y0+1)
sub+=2*dy-2*dx;
}
else
sub+=2*dy; // 判断下下个点的位置
}
Draw_point(x0,y0,clour);
}
else
{
sub=2*dy-dx; //靠近Y轴
while(y0!=y1)
{
Draw_point(x0,y0,clour); //画起点
y0++;
if(sub>0) //判断下下个点的位置
{
x0++;
sub+=2*dx-2*dy;
}
else
sub+=2*dx;
}
Draw_point(x0,y0,clour);
}
}
else
{
dy=y0-y1;
if(dx>=dy) //靠近X轴
{
sub=2*dy-dx; //计算下个点的位置
while(x0!=x1)
{
Draw_point(x0,y0,clour); //画起点
x0++; // X轴上加1
if(sub>0) // 判断下下个点的位置
{
y0--; // 为右上相邻点,即(x0+1,y0+1)
sub+=2*dy-2*dx;
}
else
sub+=2*dy; // 判断下下个点的位置
}
Draw_point(x0,y0,clour);
}
else
{
sub=2*dx-dy; //靠近Y轴
while(y0!=y1)
{
Draw_point(x0,y0,clour); //画起点
y0--;
if(sub>0) //判断下下个点的位置
{
x0++;
sub+=2*dx-2*dy;
}
else
sub+=2*dx;
}
Draw_point(x0,y0,clour);
}
}
}
}
/****************************
//画任意线
功能:任意两点间的直线。根据硬件特点,实现加速。
* 入口参数:x0 直线起点所在行的位置
* y0 直线起点所在列的位置
* x1 直线终点所在行的位置
‘ y1 直线终点所在列的位置
说明:操作失败原因是指定地址超出缓冲区范围。
******************************
void GUI_Line8(uchar x0,uchar y0,uchar x1,uchar y1)
{
int temp;
int dx,dy; //定义起点到终点的横、纵坐标增加值
int s1,s2,status,i;
int Dx,Dy,sub;
dx=x1-x0;
if(dx>=0) //X的方向是增加的
s1=1;
else //X的方向是降低的
s1=-1;
dy=y1-y0; //判断Y的方向是增加还是降到的
if(dy>=0)
s2=1;
else
s2=-1;
Dx=fabs(x1-x0); //计算横、纵标志增加值的绝对值
Dy=fabs(y1-y0);
if(Dy>Dx) //
{ //以45度角为分界线,靠进Y轴是status=1,靠近X轴是status=0
temp=Dx;
Dx=Dy;
Dy=temp;
status=1;
}
else
status=0;
//////////判断垂直线和水平线////////////
if(dx==0) //横向上没有增量,画一条水平线
Draw_zhi(x0,y0,y1,1);
if(dy==0) //纵向上没有增量,画一条垂直线
Draw_shu(x0,y0,x1,1);
//////////Bresenham算法画任意两点间的直线//////////
sub=2*Dy-Dx; //第1次判断下个点的位置
for(i=0;i<Dx;i++)
{
Draw_point(x0,y0,1); //画点
if(sub>=0)
{
if(status==1) //在靠近Y轴区,x值加1
x0+=s1;
else //在靠近X轴区,y值加1
y0+=s2;
sub-=2*Dx; //判断下下个点的位置
}
if(status==1)
y0+=s2;
else
x0+=s1;
sub+=2*Dy;
}
}
*/
/*********************************************************
画圆算法
x0表示行的地址 y0表示列的地址 r表示圆的半径
****************************************/
void Draw_yuan(uchar x0,uchar y0,uchar r)
{
int a,b;
int di;
a=0;
b=r; //a=0,与b=r为圆的起始点!!然后往下走!!
di=3-2*r; //判断下个点位置的标志 ??
while(a<=b) //里面执行完了说明八分之一个圆画完啦!
{
Draw_point(x0-b,y0-a,0); //3
Draw_point(x0+b,y0-a,0); //0
Draw_point(x0-a,y0+b,0); //1
Draw_point(x0-b,y0-a,0); //7
Draw_point(x0-a,y0-b,0); //2
Draw_point(x0+b,y0+a,0); //4
Draw_point(x0+a,y0-b,0); //5
Draw_point(x0+a,y0+b,0); //6
Draw_point(x0-b,y0+a,0);
a++;
/***使用Bresenham算法画圆**/
if(di<0)
di +=4*a+6;
else
{
di+=10+4*(a-b);
b--;
}
Draw_point(x0+a,y0+b,0); //可在此处做想法!!!
}
}
void main()
{
delayms(100);
LCD_init();
Clear_GDRAM();//必须清2遍彻底清除RAM内数据
delayms(50);
Clear_GDRAM();//必须清2遍彻底清除RAM内数据
delayms(50);
writecmd(0x01);//加上清楚命令
delayms(50);
while(1)
{
Draw_zhi(65,126,60,0);//直线
Draw_shu(65,124,0,0);//竖线
Draw_line(66,0,120,63,0);//画任意线
Draw_line(66,0,120,30,0);//画任意线
Draw_yuan(31,31,30);//左半屏画圆
delayms(6000);
Clear_GDRAM();
delayms(60);
Disp_HZ(0x90+2,hanz,5);//显示汉字
Disp_HZ(0x98,hanz2,8);//显示汉字
delayms(6000);
writecmd(0x01);//加上清楚命令
delayms(50);
Draw_PM(logo);//显示图片
delayms(6000);
Clear_GDRAM();
delayms(60);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1