版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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福建厦门市集美区园博幼儿园非在编(顶岗)教职工招聘2人考试模拟卷及答案解析(夺冠)
- 基建工程规划师基建工程规划师项目前期策划
- 2025年湛江市直机关遴选公务员考试真题汇编含答案解析(夺冠)
- 悦泰集团面试必-备金融行业高级职位面试技巧
- 2023年广西壮族自治区遴选公务员笔试真题汇编带答案解析
- 地质调查领域招聘与人才需求分析
- 2025四川广安发展工程建设有限公司第二批项目合同制员工招聘10人笔试备考题库附答案解析
- 2023年咸阳市税务系统遴选笔试真题汇编附答案解析
- 2023年昆明市遴选公务员笔试真题汇编附答案解析(夺冠)
- 2025年新余市税务系统遴选笔试真题汇编及答案解析(夺冠)
- 2025年《保密法》知识考试题库及答案解析
- 2025年春季英语教研组工作总结课件
- 2025新疆和田和康县、和安县面向社会招聘事业单位工作人员108人考试笔试参考题库附答案解析
- 吉林省延边州2023-2024学年八年级上学期语文期末考试试卷(含答案)
- 委托代征协议书模板
- 2025年河南才港人力资源服务有限公司招聘审计辅助人员20人考试笔试模拟试题及答案解析
- (2025年)医学检验三基考试试题及答案解析
- 2025-2026学年高二上学期《解码‘十五五’蓝图+青春锚定新征程》主题班会
- 2026湖北水发集团校园招聘笔试考试参考题库及答案解析
- 甘孜州人民政府国防动员办公室关于2025年公开选调事业单位工作人员历年真题库带答案解析
- 广东省金太阳2026届高三上学期11月联考 物理(含答案)
评论
0/150
提交评论