S6D1121触摸屏程序._第1页
S6D1121触摸屏程序._第2页
S6D1121触摸屏程序._第3页
S6D1121触摸屏程序._第4页
S6D1121触摸屏程序._第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第一部分:LCD.C#include lcd.hu16 BACK_COLOR, POINT_COLOR; /背景色,画笔色/*-STM32移植添加-*/void LCD_DataAlleyway_transferL(u8 DATA)u8 i;for(i=0;i1;void LCD_DataAlleyway_transferH(u8 DATA)u8 i;for(i=0;i1;/*-*/#ifdef Bus_16 /条件编译-16位数据模式 void LCD_Writ_Bus(char VH,char VL) /并行数据写入函数 LCD_DataAlleyway_transferH(VH);LCD

2、_DataAlleyway_transferL(VL);LCD_WR=0;LCD_WR=1; #else/条件编译-8位数据模式 void LCD_Writ_Bus(char VH,char VL) /并行数据写入函数 LCD_DataAlleyway_transferH(VH); LCD_WR=0;LCD_WR=1;LCD_DataAlleyway_transferH(VL);LCD_WR=0;LCD_WR=1;#endifvoid LCD_WR_DATA8(char VH,char VL) /发送数据-8位参数 LCD_RS=1;LCD_Writ_Bus(VH,VL); void LCD_

3、WR_DATA(int da) LCD_RS=1;LCD_Writ_Bus(da8,da); void LCD_WR_REG(int da) LCD_RS=0;LCD_Writ_Bus(da8,da); void LCD_WR_REG_DATA(int reg,int da) LCD_WR_REG(reg);LCD_WR_DATA(da);void Address_set(unsigned int x1,unsigned int y1,unsigned int x2,unsigned int y2) LCD_WR_REG(0x0046);LCD_WR_DATA8(x2,x1); LCD_WR_

4、REG(0x0047);LCD_WR_DATA(y2); LCD_WR_REG(0x0048);LCD_WR_DATA(y1); LCD_WR_REG(0x0020);LCD_WR_DATA(x1); LCD_WR_REG(0x0021);LCD_WR_DATA(y1); LCD_WR_REG(0x0022); void Lcd_Init(void)/调用一次这些函数,免得编译的时候提示警告 LCD_CS =1;if(LCD_CS=0) LCD_WR_REG_DATA(0,0); LCD_ShowString(0,0, ); LCD_ShowNum(0,0,0,0); LCD_Show2Num

5、(0,0,0,0); LCD_DrawPoint_big(0,0); LCD_DrawRectangle(0,0,0,0); Draw_Circle(0,0,0); LCD_REST=1; delayms(5);LCD_REST=0;delayms(5);LCD_REST=1;LCD_CS=1;LCD_RD=1;LCD_WR=1;delayms(5);LCD_CS =0; /打开片选使能LCD_WR_REG_DATA(0x11,0x2004); LCD_WR_REG_DATA(0x13,0xCC00); LCD_WR_REG_DATA(0x15,0x2600);LCD_WR_REG_DATA(

6、0x14,0x252A);/LCD_WR_REG_DATA(0x14,0x002A);LCD_WR_REG_DATA(0x12,0x0033);LCD_WR_REG_DATA(0x13,0xCC04);delayms(1); LCD_WR_REG_DATA(0x13,0xCC06);delayms(1); LCD_WR_REG_DATA(0x13,0xCC4F);delayms(1); LCD_WR_REG_DATA(0x13,0x674F);LCD_WR_REG_DATA(0x11,0x2003);delayms(1); LCD_WR_REG_DATA(0x30,0x2609);LCD_WR

7、_REG_DATA(0x31,0x242C);LCD_WR_REG_DATA(0x32,0x1F23);LCD_WR_REG_DATA(0x33,0x2425);LCD_WR_REG_DATA(0x34,0x2226);LCD_WR_REG_DATA(0x35,0x2523);LCD_WR_REG_DATA(0x36,0x1C1A);LCD_WR_REG_DATA(0x37,0x131D);LCD_WR_REG_DATA(0x38,0x0B11);LCD_WR_REG_DATA(0x39,0x1210);LCD_WR_REG_DATA(0x3A,0x1315);LCD_WR_REG_DATA(

8、0x3B,0x3619);LCD_WR_REG_DATA(0x3C,0x0D00);LCD_WR_REG_DATA(0x3D,0x000D);LCD_WR_REG_DATA(0x16,0x0007);LCD_WR_REG_DATA(0x02,0x0013);LCD_WR_REG_DATA(0x03,0x0003);LCD_WR_REG_DATA(0x01,0x0127);delayms(1); LCD_WR_REG_DATA(0x08,0x0303);LCD_WR_REG_DATA(0x0A,0x000B);LCD_WR_REG_DATA(0x0B,0x0003); LCD_WR_REG_DA

9、TA(0x0C,0x0000); LCD_WR_REG_DATA(0x41,0x0000); LCD_WR_REG_DATA(0x50,0x0000); LCD_WR_REG_DATA(0x60,0x0005); LCD_WR_REG_DATA(0x70,0x000B); LCD_WR_REG_DATA(0x71,0x0000); LCD_WR_REG_DATA(0x78,0x0000); LCD_WR_REG_DATA(0x7A,0x0000); LCD_WR_REG_DATA(0x79,0x0007);LCD_WR_REG_DATA(0x07,0x0051); delayms(1); LC

10、D_WR_REG_DATA(0x07,0x0053);LCD_WR_REG_DATA(0x79,0x0000);LCD_WR_REG(0x0022);/清屏函数/Color:要清屏的填充色void LCD_Clear(u16 Color)u8 VH,VL;u16 i,j;VH=Color8;VL=Color;Address_set(0,0,LCD_W-1,LCD_H-1); for(i=0;iLCD_W;i+) for (j=0;jLCD_H;j+) LCD_WR_DATA8(VH,VL); /画点/POINT_COLOR:此点的颜色void LCD_DrawPoint(u16 x,u16 y

11、)Address_set(x,y,x,y);/设置光标位置 LCD_WR_DATA(POINT_COLOR); /画一个大点/POINT_COLOR:此点的颜色void LCD_DrawPoint_big(u16 x,u16 y)LCD_Fill(x-1,y-1,x+1,y+1,POINT_COLOR); /在指定区域内填充指定颜色/区域大小:/ (xend-xsta)*(yend-ysta)void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color) u16 i,j; Address_set(xsta,ysta,xend,yend)

12、; /设置光标位置 for(i=ysta;i=yend;i+) for(j=xsta;j0)incx=1; /设置单步方向 else if(delta_x=0)incx=0;/垂直线 else incx=-1;delta_x=-delta_x; if(delta_y0)incy=1; else if(delta_y=0)incy=0;/水平线 elseincy=-1;delta_y=-delta_y; if( delta_xdelta_y)distance=delta_x; /选取基本增量坐标轴 else distance=delta_y; for(t=0;tdistance) xerr-=d

13、istance; uRow+=incx; if(yerrdistance) yerr-=distance; uCol+=incy; /画矩形void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)LCD_DrawLine(x1,y1,x2,y1);LCD_DrawLine(x1,y1,x1,y2);LCD_DrawLine(x1,y2,x2,y2);LCD_DrawLine(x2,y1,x2,y2);/在指定位置画一个指定大小的圆/(x,y):中心点/r :半径void Draw_Circle(u16 x0,u16 y0,u8 r)int a

14、,b;int di;a=0;b=r; di=3-(r1); /判断下个点位置的标志while(a=b)LCD_DrawPoint(x0-b,y0-a); /3 LCD_DrawPoint(x0+b,y0-a); /0 LCD_DrawPoint(x0-a,y0+b); /1 LCD_DrawPoint(x0-b,y0-a); /7 LCD_DrawPoint(x0-a,y0-b); /2 LCD_DrawPoint(x0+b,y0+a); /4 LCD_DrawPoint(x0+a,y0-b); /5LCD_DrawPoint(x0+a,y0+b); /6 LCD_DrawPoint(x0-b

15、,y0+a); a+;/使用Bresenham算法画圆 if(di/mode:叠加方式(1)还是非叠加方式(0)/在指定位置显示一个字符/num:要显示的字符: -/mode:叠加方式(1)还是非叠加方式(0)void LCD_ShowChar(u16 x,u16 y,u8 num,u8 mode) u8 temp; u8 pos,t;u16 x0=x;u16 colortemp=POINT_COLOR; if(xLCD_W-16|yLCD_H-16)return; /设置窗口 num=num- ;/得到偏移后的值Address_set(x,y,x+8-1,y+16-1); /设置光标位置 i

16、f(!mode) /非叠加方式for(pos=0;pos16;pos+) temp=asc2_1608(u16)num*16+pos; /调用1608字体for(t=0;t=1; x+; x=x0;y+;else/叠加方式for(pos=0;pos16;pos+) temp=asc2_1608(u16)num*16+pos; /调用1608字体for(t=0;t=1; POINT_COLOR=colortemp; /mn函数u32 mypow(u8 m,u8 n)u32 result=1; while(n-)result*=m; return result; /显示2个数字/x,y :起点坐标

17、 /len :数字的位数/color:颜色/num:数值(04294967295);void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len) u8 t,temp;u8 enshow=0;num=(u16)num;for(t=0;tlen;t+)temp=(num/mypow(10,len-t-1)%10;if(enshow=0&t(len-1)if(temp=0)LCD_ShowChar(x+8*t,y, ,0);continue;else enshow=1; LCD_ShowChar(x+8*t,y,temp+48,0); /显示数字,高位为0,还是显示/x,

18、y:起点坐标/num:数值(0999999999); /len:长度(即要显示的位数)/size:字体大小/mode:/7:0,不填充;1,填充0./6:1:保留/0:0,非叠加显示;1,叠加显示.void LCD_Show2Num(u16 x,u16 y,u16 num,u8 len) u8 t,temp; for(t=0;tLCD_W-16)x=0;y+=16; if(yLCD_H-16)y=x=0;LCD_Clear(RED); LCD_ShowChar(x,y,*p,0); x+=8; p+; /*-/void showhanzi(u16 x,u16 y, u8 index) u16

19、i,j;const unsigned char *temp=hanzi; Address_set(x,y,x+31,y+31); /设置区域 temp+=index*128;for(j=0;j128;j+)for(i=0;i8;i+) if(*temp&(1i)!=0)LCD_WR_DATA(POINT_COLOR); elseLCD_WR_DATA(BACK_COLOR); temp+; 第二部分:lcd.h#ifndef _LCD_H#define _LCD_H#include sys.h#include delay.h#include font.h/* 雨亭电子代码测试环境:JME-2核

20、心板+1T指令周期的STC单片机(51内核STC12LE5A60S2)+33M晶振 单片机工作电压3.3V程序默认IO连接方式:控制线:RS-P35; WR-P36; RD-P37; CS-P10; REST-P12;数据线: DB0-DB7依次连接P00-P07; DB8-DB15依次连接P20-P27;(8位模式下DB0-DB7可以不连接)触摸功能连接方式:(不使用触摸可不连接)D_CLK-P17; D_CS-P14; D_DIN-P30; D_OUT-P31; D_PENIRQ-P34;*/ /定义LCD的尺寸#define LCD_W 240#define LCD_H 320#defi

21、ne Bus_16 /16位数据模式,如果使用8位模式,请注释此语句,如果使用16位模式,请打开此句,修改8位模式之前,请确认你手里的模块是否是8位总线接口/*#if 0/IO连接#define LCD_DataPortH P2 /高8位数据口,8位模式下只使用高8位 #define LCD_DataPortL P0 /低8位数据口,8位模式下低8位可以不接线,请确认P0口已经上拉10K电阻,不宜太小,最小4.7K,推荐10K.sbit LCD_RS = P35; /数据/命令切换sbit LCD_WR = P36; /写控制sbit LCD_RD =P37; /读控制sbit LCD_CS=

22、P10;/片选sbit LCD_REST = P12; /复位 */ #endif#define LCD_RS PDout(11) #define LCD_WR PDout(5) #define LCD_RD PDout(4) #define LCD_CS PDout(7) #define LCD_REST PEout(1) extern u16 BACK_COLOR, POINT_COLOR; /背景色,画笔色void Lcd_Init(void); void LCD_Clear(u16 Color);void Address_set(unsigned int x1,unsigned int

23、 y1,unsigned int x2,unsigned int y2);void LCD_WR_DATA8(char VH,char VL); /发送数据-8位参数void LCD_WR_DATA(int da);void LCD_WR_REG(int da);void LCD_DrawPoint(u16 x,u16 y);/画点void LCD_DrawPoint_big(u16 x,u16 y);/画一个大点u16 LCD_ReadPoint(u16 x,u16 y); /读点void Draw_Circle(u16 x0,u16 y0,u8 r);void LCD_DrawLine(u

24、16 x1, u16 y1, u16 x2, u16 y2);void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2); void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color);void LCD_ShowChar(u16 x,u16 y,u8 num,u8 mode);/显示一个字符void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len);/显示数字void LCD_Show2Num(u16 x,u16 y,u16 num,u8 len);/显示2个数字void LCD_ShowString(u16 x,u16 y,const u8 *p); /显示一个字符串,16字体 /void showima

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论