ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:18.10KB ,
资源ID:7279906      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7279906.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(msp430的lcd12864显示画圆程序.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

msp430的lcd12864显示画圆程序.docx

1、msp430的lcd12864显示画圆程序基于msp430g2553的Lcd12864的显示画圆程序注:只用将msp430g2553.h改为其他msp430系列即可使用包含12864.h和main.c两个文件12864.h/*/ 12864 画图、打点/typedef unsigned char uchar;typedef unsigned int uint;#define LCD_DataIn P1DIR=0x00 /数据口方向设置为输入#define LCD_DataOut P1DIR=0xff /数据口方向设置为输出#define LCD2MCU_Data P1IN#define MCU

2、2LCD_Data P1OUT#define LCD_CMDOut P2DIR|=0x07 /P3口的低三位设置为输出#define LCD_RS_H P2OUT|=BIT0 /P2.0高#define LCD_RS_L P2OUT&=BIT0 /P2.0低#define LCD_RW_H P2OUT|=BIT1 /P2.1高#define LCD_RW_L P2OUT&=BIT1 /P2.1低#define LCD_EN_H P2OUT|=BIT2 /2.2高#define LCD_EN_L P2OUT&=BIT2 /P2.2低/*函数名称:Delay_1ms功 能:延时约1ms的时间参 数

3、:无返回值 :无*/void Delay_1ms(void) uchar i; for(i = 150;i 0;i-) _NOP(); /*函数名称:Delay_Nms功 能:延时N个1ms的时间参 数:n-延时长度返回值 :无*/void Delay_Nms(uint n) uint i; for(i = n;i 0;i-) Delay_1ms();/*函数名称:Write_Cmd功 能:向液晶中写控制命令参 数:cmd-控制命令返回值 :无*/void Write_Cmd(uchar cmd) uchar lcdtemp = 0; LCD_RS_L; LCD_RW_H; LCD_DataI

4、n; do /判忙 LCD_EN_H; _NOP(); lcdtemp = LCD2MCU_Data; LCD_EN_L; while(lcdtemp & 0x80); LCD_DataOut; LCD_RW_L; MCU2LCD_Data = cmd; LCD_EN_H; Delay_1ms(); LCD_EN_L;/*函数名称:Write_Data功 能:向液晶中写显示数据参 数:dat-显示数据返回值 :无*/void Write_Data(uchar dat) uchar lcdtemp = 0; LCD_RS_L; LCD_RW_H; LCD_DataIn; do /判忙 LCD_E

5、N_H; _NOP(); lcdtemp = LCD2MCU_Data; LCD_EN_L; while(lcdtemp & 0x80); LCD_DataOut; LCD_RS_H; LCD_RW_L; MCU2LCD_Data = dat; LCD_EN_H; Delay_1ms(); LCD_EN_L;/*/ 读数据*/uchar read_data() uint readvalue; LCD_DataOut; MCU2LCD_Data |=0xff; LCD_RS_H; LCD_RW_H; LCD_DataIn; LCD_EN_L; LCD_EN_H; readvalue=LCD2MC

6、U_Data; Delay_1ms(); LCD_EN_L; return readvalue;/*/*/* /*定位函数*x(18)y(14)*/void LCD_SetXY(uchar X, uchar Y) switch(Y) case 1: Write_Cmd(0x7F + X);break; case 2: Write_Cmd(0x8F + X);break; case 3: Write_Cmd(0x87 + X);break; case 4: Write_Cmd(0x97 + X);break; default:break; /*/*在指定的位置显示某个字符*/void disp_

7、char(uchar X, uchar Y, uchar wdata) LCD_SetXY(X, Y); Write_Data(wdata);/*函数功能:在指定的位置显示字符串*/void disp_str(uchar X, uchar Y, uchar *Str) uchar temp; LCD_SetXY(X, Y); temp = *Str; while(temp != 0) Write_Data(temp); temp = *(+Str); /*/打点函数/参数:color=1,该点填充1;color=0,该点填充白色0;/*void GUI_Point(unsigned char

8、x,unsigned char y,unsigned char color) unsigned char x_Dyte,x_byte; /定义列地址的字节位,及在字节中的哪1 位 unsigned char y_Dyte,y_byte; /定义为上下两个屏(取值为0,1),行地址(取值为031) unsigned char GDRAM_hbit,GDRAM_lbit; Write_Cmd(0x36); /扩展指令命令/*X,Y 坐标互换,即普通的X,Y 坐标*/ x_Dyte=x/16; /计算在16 个字节中的哪一个 x_byte=x&0x0f; /计算在该字节中的哪一位 y_Dyte=y/

9、32; /0 为上半屏,1 为下半屏 y_byte=y&0x1f; /计算在031 当中的哪一行 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); Write_Cmd(0x80+y_byte); /设

10、定行地址(y 坐标) Write_Cmd(0x80+x_Dyte+8*y_Dyte); /设定列地址(x 坐标),并通过8*y_Dyte 选定上下屏 Delay_Nms(1); if(x_byte8) /判断其在高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 位数据 e

11、lse Write_Data(GDRAM_hbit); /写高8位数据 if(color=1) Write_Data(GDRAM_lbit|(0x01(15-x_byte); /置位GDRAM 区高8 位数据中相应的点 else Write_Data(GDRAM_lbit&(0x01(15-x_byte);/清除GDRAM区高8位数据中相应的点 Write_Cmd(0x30); /恢复到基本指令集/*/填充GDRAM 数据:/参数:dat 为填充的数据/*void GUI_Fill_GDRAM(unsigned char dat) uchar i,j,k; uchar bGDRAMAddrX

12、= 0x80; /GDRAM 水平地址 uchar bGDRAMAddrY = 0x80; /GDRAM 垂直地址 for(i=0;i2;i+) for(j=0;j32;j+) for(k=0;k X1 ) Temp = X1 ; X1 = X0 ; X0 = Temp ; for( ; X0 Y1 ) Temp = Y1 ; Y1 = Y0 ; Y0 = Temp ; for(; Y0 0 ) incx = 1; else if( delta_x = 0 ) incx = 0; else incx = -1 ; if( delta_y 0 ) incy = 1 ; else if(delta

13、_y = 0 ) incy = 0 ; else incy = -1 ; delta_x = incx * delta_x ; delta_y = incy * delta_y ; if( delta_x delta_y ) distance = delta_x ; StartX+=incx; StartY+=incy; else distance = delta_y; StartX+=incx; StartY+=incy; GUI_Point( StartX, StartY, Color ); while(distance!=0);/*/ sin函数*/void fsin2() float

14、x,y; uchar x1,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功 能:初始化液晶模块参 数:无返回值 :无*/void Ini_Lcd(void) LCD_CMDOut; /液晶控制端口设置为输出 Delay_Nms(500); Write_Cmd(0x30); /基本指令集 Delay_1ms(); Write_Cmd(0x02); / 地址归位 Delay_1ms(); Write_Cmd

15、(0x0c); /整体显示打开,游标关闭 Delay_1ms(); Write_Cmd(0x01); /清除显示 Delay_Nms(10); Write_Cmd(0x06); /游标右移 Delay_1ms(); Write_Cmd(0x80); /设定显示的起始地址Main.c#include #include #include #include 12864.h/*/ 画圆*/void GUI_Circle(uchar x0,uchar y0,uchar r,uchar color) char a,b; char di; if(r31 |r=0) return; /参数过滤,次液晶显示的最

16、大圆半径为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 GUI_Point(x0-b,y0-a,color); /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 G

17、UI_Point(x0-b,y0+a,color); a+;/*使用Bresenham 算法画圆*/ if(di0) di +=4*a+6; else di +=10+4*(a-b); b-; GUI_Point(x0+a,y0+b,color); /*/ 主函数*/void main( void ) uint i,j; uchar op=Its the LCD! ; WDTCTL = WDTPW + WDTHOLD; /关狗 Ini_Lcd(); /初始化液晶 / Write_Cmd(0x80); /写第一行的显示地址 / for(i = 0; i 10; i+) / Write_Data(

18、0x30 + i); /显示0x300x3f对应的字符 Write_Cmd(0x90); /写第二行的显示地址 for(i = 0; i 16; i+) Write_Data(0x60 + i); /显示0x600x6f对应的字符 / Write_Cmd(0x88); /写第三行的显示地址 / for(i = 0; i 16; i+) / Write_Data(tishii); / Write_Cmd(0x98); /写第四行的显示地址 for(i = 0; i 0; i-) /延时一会 for(j =200; j 0; j-) _NOP(); Write_Cmd(0x01); /clear Delay_Nms(10); GUI_Fill_GDRAM(0x00); Delay_Nms(10); fsin2(); /画sin函数 for(i = 1000; i 0; i-) /延时一会 for(j =400; j 0; j-) _NOP(); Write_Cmd(0x01); /clear Delay_Nms(10); GUI_Fill_GDRAM(0x00); Delay_Nms(5); GUI_Circle(33,31,20,1); /画圆 LPM0;

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

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