msp430的lcd12864显示画圆程序Word文档格式.docx

上传人:b****5 文档编号:8365590 上传时间:2023-05-11 格式:DOCX 页数:15 大小:18.10KB
下载 相关 举报
msp430的lcd12864显示画圆程序Word文档格式.docx_第1页
第1页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第2页
第2页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第3页
第3页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第4页
第4页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第5页
第5页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第6页
第6页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第7页
第7页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第8页
第8页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第9页
第9页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第10页
第10页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第11页
第11页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第12页
第12页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第13页
第13页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第14页
第14页 / 共15页
msp430的lcd12864显示画圆程序Word文档格式.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

msp430的lcd12864显示画圆程序Word文档格式.docx

《msp430的lcd12864显示画圆程序Word文档格式.docx》由会员分享,可在线阅读,更多相关《msp430的lcd12864显示画圆程序Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。

msp430的lcd12864显示画圆程序Word文档格式.docx

for(i=150;

i>

0;

i--)_NOP();

}

Delay_Nms

延时N个1ms的时间

n--延时长度

voidDelay_Nms(uintn)

uinti;

for(i=n;

i--)Delay_1ms();

}

Write_Cmd

向液晶中写控制命令

cmd--控制命令

voidWrite_Cmd(ucharcmd)

ucharlcdtemp=0;

LCD_RS_L;

LCD_RW_H;

LCD_DataIn;

do//判忙

{

LCD_EN_H;

_NOP();

lcdtemp=LCD2MCU_Data;

LCD_EN_L;

}

while(lcdtemp&

0x80);

LCD_DataOut;

LCD_RW_L;

MCU2LCD_Data=cmd;

Delay_1ms();

LCD_EN_L;

Write_Data

向液晶中写显示数据

dat--显示数据

voidWrite_Data(uchardat)

_NOP();

lcdtemp=LCD2MCU_Data;

LCD_RS_H;

MCU2LCD_Data=dat;

//读数据

ucharread_data()

uintreadvalue;

MCU2LCD_Data|=0xff;

readvalue=LCD2MCU_Data;

returnreadvalue;

//************************************************************

//***********************************************************

//********************************************************

/****************定位函数*****x(1~8)y(1~4)****************/

voidLCD_SetXY(ucharX,ucharY)

switch(Y){

case1:

Write_Cmd(0x7F+X);

break;

case2:

Write_Cmd(0x8F+X);

case3:

Write_Cmd(0x87+X);

case4:

Write_Cmd(0x97+X);

default:

/****************在指定的位置显示某个字符****************/

voiddisp_char(ucharX,ucharY,ucharwdata)

LCD_SetXY(X,Y);

Write_Data(wdata);

/********************************************************************

函数功能:

在指定的位置显示字符串

******************************************************************/

voiddisp_str(ucharX,ucharY,uchar*Str)

uchartemp;

temp=*Str;

while(temp!

=0)

{

Write_Data(temp);

temp=*(++Str);

//打点函数

//参数:

color=1,该点填充1;

color=0,该点填充白色0;

voidGUI_Point(unsignedcharx,unsignedchary,unsignedcharcolor)

unsignedcharx_Dyte,x_byte;

//定义列地址的字节位,及在字节中的哪1位

unsignedchary_Dyte,y_byte;

//定义为上下两个屏(取值为0,1),行地址(取值为0~31)

unsignedcharGDRAM_hbit,GDRAM_lbit;

Write_Cmd(0x36);

//扩展指令命令

/***X,Y坐标互换,即普通的X,Y坐标***/

x_Dyte=x/16;

//计算在16个字节中的哪一个

x_byte=x&

0x0f;

//计算在该字节中的哪一位

y_Dyte=y/32;

//0为上半屏,1为下半屏

y_byte=y&

0x1f;

//计算在0~31当中的哪一行

Write_Cmd(0x80+y_byte);

//设定行地址(y坐标),即是垂直地址

Write_Cmd(0x80+x_Dyte+8*y_Dyte);

//设定列地址(x坐标),并通过8*y_Dyte选定上下屏,即是水平地址

read_data();

//预读取数据

GDRAM_hbit=read_data();

//读取当前显示高8位数据

GDRAM_lbit=read_data();

//读取当前显示低8位数据

Delay_Nms

(1);

//设定行地址(y坐标)

//设定列地址(x坐标),并通过8*y_Dyte选定上下屏

if(x_byte<

8)//判断其在高8位,还是在低8位

if(color==1)

Write_Data(GDRAM_hbit|(0x01<

<

(7-x_byte)));

//置位GDRAM区高8位数据中相应的点

else

Write_Data(GDRAM_hbit&

(~(0x01<

(7-x_byte))));

//清除GDRAM区高8位数据中相应的点

Write_Data(GDRAM_lbit);

//显示GDRAM区低8位数据

Write_Data(GDRAM_hbit);

//写高8位数据

Write_Data(GDRAM_lbit|(0x01<

(15-x_byte)));

Write_Data(GDRAM_lbit&

(15-x_byte))));

//清除GDRAM区高8位数据中相应的点

Write_Cmd(0x30);

//恢复到基本指令集

//填充GDRAM数据:

dat为填充的数据

voidGUI_Fill_GDRAM(unsignedchardat)

uchari,j,k;

ucharbGDRAMAddrX=0x80;

//GDRAM水平地址

ucharbGDRAMAddrY=0x80;

//GDRAM垂直地址

for(i=0;

i<

2;

i++)

for(j=0;

j<

32;

j++)

for(k=0;

k<

8;

k++)

Write_Cmd(0x34);

//设置为8位MPU接口,扩充指令集,绘图模式关

Write_Cmd(bGDRAMAddrY+j);

//垂直地址Y

Write_Cmd(bGDRAMAddrX+k);

//水平地址X

Write_Data(dat);

bGDRAMAddrX=0x88;

//打开绘图模式

//恢复基本指令集,关闭绘图模式

/*********************************************************/

/******************画水平线*********************/

voidLCD_Draw_Line_x(ucharX0,ucharX1,ucharY,ucharColor)

{

ucharTemp;

if(X0>

X1)

Temp=X1;

X1=X0;

X0=Temp;

for(;

X0<

=X1;

X0++)

GUI_Point(X0,Y,Color);

//*************画垂直线第x列从第y0行画到第y1行颜色color**************************/

voidLCD_Draw_Line_Y(ucharX,ucharY0,ucharY1,ucharColor)

if(Y0>

Y1)

Temp=Y1;

Y1=Y0;

Y0=Temp;

for(;

Y0<

=Y1;

Y0++)

GUI_Point(X,Y0,Color);

//**************画斜线(x,y)到(endx,endy)***********************/

voidLCD_Draw_Line(ucharStartX,ucharStartY,ucharEndX,ucharEndY,ucharColor)

intdistance;

/*根据屏幕大小改变变量类型(如改为int型)*/

intdelta_x,delta_y;

intincx,incy;

do{

delta_x=EndX-StartX;

delta_y=EndY-StartY;

if(delta_x>

0)

incx=1;

elseif(delta_x==0)

incx=0;

incx=-1;

if(delta_y>

incy=1;

elseif(delta_y==0)

incy=0;

incy=-1;

delta_x=incx*delta_x;

delta_y=incy*delta_y;

delta_y)

distance=delta_x;

StartX+=incx;

StartY+=incy;

distance=delta_y;

GUI_Point(StartX,StartY,Color);

while(distance!

=0);

//sin函数

voidfsin2()

floatx,y;

ucharx1,y1;

for(x=0;

x<

(4*3.14159);

x+=0.1)

{

y=1*sin(3*x);

x1=10*x;

y1=31-(10*y+0.5);

//对y值进行四舍五入

GUI_Point(x1,y1,1);

}

Ini_Lcd

初始化液晶模块

voidIni_Lcd(void)

LCD_CMDOut;

//液晶控制端口设置为输出

Delay_Nms(500);

//基本指令集

Write_Cmd(0x02);

//地址归位

Write_Cmd(0x0c);

//整体显示打开,游标关闭

Write_Cmd(0x01);

//清除显示

Delay_Nms(10);

Write_Cmd(0x06);

//游标右移

Write_Cmd(0x80);

//设定显示的起始地址

 

Main.c

#include<

msp430g2553.h>

math.h>

stdio.h>

#include"

/****************************************

//画圆

*****************************************/

voidGUI_Circle(ucharx0,uchary0,ucharr,ucharcolor)

chara,b;

chardi;

if(r>

31||r==0)return;

//参数过滤,次液晶显示的最大圆半径为31

a=0;

b=r;

di=3-2*r;

//判断下个点位置的标志

while(a<

=b)

GUI_Point(x0-b,y0-a,color);

//3

GUI_Point(x0+b,y0-a,color);

//0

GUI_Point(x0-a,y0+b,color);

//1

//7

GUI_Point(x0-a,y0-b,color);

//2

GUI_Point(x0+b,y0+a,color);

//4

GUI_Point(x0+a,y0-b,color);

//5

GUI_Point(x0+a,y0+b,color);

//6

GUI_Point(x0-b,y0+a,color);

a++;

/***使用Bresenham算法画圆**/

if(di<

0)

di+=4*a+6;

di+=10+4*(a-b);

b--;

//主函数

voidmain(void)

uinti,j;

ucharop[]={"

It'

stheLCD!

"

};

WDTCTL=WDTPW+WDTHOLD;

//关狗

Ini_Lcd();

//初始化液晶

//Write_Cmd(0x80);

//写第一行的显示地址

//for(i=0;

i<

10;

i++)

//Write_Data(0x30+i);

//显示0x30~0x3f对应的字符

Write_Cmd(0x90);

//写第二行的显示地址

for(i=0;

16;

Write_Data(0x60+i);

//显示0x60~0x6f对应的字符

//Write_Cmd(0x88);

//写第三行的显示地址

//Write_Data(tishi[i]);

//

Write_Cmd(0x98);

//写第四行的显示地址

Write_Data(op[i]);

for(i=1000;

i>

i--)//延时一会

for(j=200;

j>

j--)

//clear

GUI_Fill_GDRAM(0x00);

fsin2();

//画sin函数

for(j=400;

Delay_Nms(5);

GUI_Circle(33,31,20,1);

//画圆

LPM0;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 司法考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2