




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于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 MCU2LCD_Data
2、 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_
4、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; 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_Data
5、In; do /判忙 LCD_EN_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
6、_H; readvalue=LCD2MCU_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; /*/*在指定的位置显
7、示某个字符*/void disp_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_Poi
8、nt(unsigned char 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; /
9、计算在该字节中的哪一位 y_Dyte=y/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); W
10、rite_Cmd(0x80+y_byte); /设定行地址(y 坐标) Write_Cmd(0x80+x_Dyte+8*y_Dyte); /设定列地址(x 坐标),并通过8*y_Dyte 选定上下屏 Delay_Nms(1); 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 位数
11、据中相应的点 Write_Data(GDRAM_lbit); /显示GDRAM 区低8 位数据 else 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 为填充的数据/*v
12、oid GUI_Fill_GDRAM(unsigned char dat) uchar i,j,k; uchar bGDRAMAddrX = 0x80; /GDRAM 水平地址 uchar bGDRAMAddrY = 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_
13、Data(dat); Write_Data(dat); bGDRAMAddrX = 0x88; Write_Cmd(0x36); /打开绘图模式 Write_Cmd(0x30); /恢复基本指令集,关闭绘图模式/*/*/*画水平线*/void LCD_Draw_Line_x( uchar X0, uchar X1, uchar Y, uchar Color ) uchar Temp ; if( X0 > X1 ) Temp = X1 ; X1 = X0 ; X0 = Temp ; for( ; X0 <= X1 ; X0+ ) GUI_Point( X0, Y, Color );
14、/*画垂直线 第x列 从第y0行画到第y1行 颜色 color */void LCD_Draw_Line_Y( uchar X, uchar Y0, uchar Y1, uchar Color ) uchar Temp ; if( Y0 > Y1 ) Temp = Y1 ; Y1 = Y0 ; Y0 = Temp ; for(; Y0 <= Y1 ; Y0+) GUI_Point( X, Y0, Color);/*画斜线(x,y)到(end x,end y)*/void LCD_Draw_Line( uchar StartX, uchar StartY, uchar EndX, u
15、char EndY, uchar Color ) int distance; /*根据屏幕大小改变变量类型(如改为int型)*/ int delta_x, delta_y ; int incx, incy ;do delta_x = EndX - StartX ; delta_y = EndY - StartY ; if( delta_x > 0 ) incx = 1; else if( delta_x = 0 ) incx = 0; else incx = -1 ; if( delta_y > 0 ) incy = 1 ; else if(delta_y = 0 ) incy =
16、 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 x,y; uchar
17、 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(0x0c);
18、 /整体显示打开,游标关闭 Delay_1ms();Write_Cmd(0x01); /清除显示 Delay_Nms(10);Write_Cmd(0x06); /游标右移 Delay_1ms();Write_Cmd(0x80); /设定显示的起始地址Main.c#include <msp430g2553.h>#include <math.h>#include <stdio.h>#include "12864.h"/*/ 画圆*/void GUI_Circle(uchar x0,uchar y0,uchar r,uchar color) c
19、har a,b; char di; 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 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
20、_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; else di +=10+4*(a-b); b-; GUI_Point(x0+a,y0+b,color); /*/ 主函数*/void main( void ) uint i,j; uchar op="It's the LCD! " WDTCTL = WDTPW + WDTHOLD; /关狗 Ini_Lcd(); /初始化液晶 / Write_Cmd(0x8
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国优柯米晶药品市场调查研究报告
- 2025年中国不锈钢单杯市场调查研究报告
- 2025年碳酸甲乙酯项目合作计划书
- 2025年乙二醇辛醇糠醇项目发展计划
- 2025贷款质押合同协议
- 《带通滤波电路》课件
- 《常见下肢静脉疾病》课件
- 2025年造纸黑液碱回收成套装置项目发展计划
- 2025年起 劳动合同将明确写入缴纳公积金条款
- 2025标准企业员工劳动合同
- 设备维护工程师简历
- 2023版押品考试题库必考点含答案
- 挖孔桩基施工方案(水磨钻)
- 变电检修技能考试计算
- 国际经济法学(湘潭大学)智慧树知到答案章节测试2023年
- 以案说德发言四篇
- 大气污染控制工程课后题答案解析
- 临床试验伦理委员会伦理审查不同意见沟通的标准操作规程
- 梅毒诊疗指南(2023年)
- 高中物理3-3热学练习题(含答案)
- DB32-T 3916-2020建筑地基基础检测规程-(高清现行)
评论
0/150
提交评论