久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
玩轉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://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
小草久久久久久久久爱六
|
久久久久99
|
国产一区二区欧美
|
欧美一区二区视频
|
国产成人艳妇aa视频在线
|
日韩精品一区二区三区视频播放
|
精品不卡
|
欧美精品一区二区在线观看
|
亚洲一区二区三区免费
|
天天在线操
|
在线中文一区
|
一区二区亚洲
|
欧美日韩亚
|
91黄色免费看
|
亚洲第一视频网站
|
久久久久国产一区二区三区
|
成人精品视频在线观看
|
av中文字幕在线
|
最近免费日本视频在线
|
日韩一级免费
|
欧洲妇女成人淫片aaa视频
|
亚洲国产精品久久久久秋霞不卡
|
国产成人在线观看免费
|
在线观看中文字幕av
|
久久久免费精品
|
欧美精品成人一区二区三区四区
|
97国产一区二区精品久久呦
|
精品国产欧美一区二区
|
成人精品一区二区三区中文字幕
|
麻豆精品国产91久久久久久
|
亚洲一区二区三区免费视频
|
久久久久久影院
|
日韩成人精品一区
|
色偷偷人人澡人人爽人人模
|
亚洲精品免费视频
|
国内精品免费久久久久软件老师
|
91国产在线视频在线
|
国产999精品久久久 日本视频一区二区三区
|
婷婷久久综合
|
可以在线观看av的网站
|
黄色大片免费网站
|