- IC型号
企业档案
- 相关证件: 
- 会员类型:
- 会员年限:12年
- 阿库IM:
- 地址:杭州市余杭区仁和街道永泰路2号22幢
- E-mail:752574498@qq.com
HG3202407演示程序
发布时间: 2016/10/21 11:23:15 | 765 次阅读
#include <reg51.h>
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ushort unsigned short
#define ulong unsigned long
#define DATA_BUS P1
/*
sbit RST=P3^5;
sbit A0= P3^4;
sbit INTI=P3^7;
sbit _CS=P3^3;
sbit _WR=P3^0;
sbit _RD=P3^1;
sbit BUSY=P3^6 ;
*/
sbit _WR=P3^0;
sbit _RD=P3^1;
sbit _CS=P3^2; //CE
sbit A0= P3^3; //REST
sbit RST=P3^4;
sbit BUSY=P3^5 ;
sbit INTI=P3^6;
uchar code tab[]={"杭州清达光电技术有限, 杭州佳显科技有限公司: 欢迎来自五湖四海的客户。"};
/***延时子程序***/
void delay3us(uchar m)
{
while(m--);
}
void delay10us(uchar m)
{ uchar i;
for(i=0;i<4;i++)
delay3us(m);
}
void delay1ms(uchar m)
{ uchar i;
for(i=0;i<102;i++)
delay3us(m);
}
void delay100ms(uchar m)
{ uchar i;
for(i=0;i<102;i++)
delay1ms(m);
}
/****复位子程序****/
void LCD_Reset(void)
{
RST = 0;
delay1ms(5);
RST = 1;
delay1ms(5);
}
/**读指令数据子程序**/
uchar LCD_CmdRead(void)
{
uchar dat;
DATA_BUS=0xff;
_WR=1;
_CS=1;
_CS=0;
_nop_();
A0=1;
_nop_();
_RD=0;
_nop_();
dat=DATA_BUS;
_nop_();_nop_();
_CS=1;
A0=0;
return dat;
}
/****读数据子程序*******/
uchar LCD_DataRead(void)
{
uchar dat;
DATA_BUS=0xff;
_WR=1;
_CS=1;
_CS=0;
_nop_();
A0=0;
_nop_();
_RD=0;
_nop_();
dat=DATA_BUS;
_nop_();_nop_();
_CS=1;
A0=1;
return dat;
}
/**** 忙****/
void LCD_ChkBusy(void)
{
uchar temp;
do
{
temp = LCD_CmdRead();
}while(temp & 0xc0);
}
void IO_Busy(void)
{
do
{}
while(BUSY);
}
/**** 写入指令子程序****/
void LCD_CmdWrite(uchar cmd)
{
_RD=1;
_CS=1;
_CS=0;
_nop_();
_WR=0;
_nop_();
A0=1;
_nop_();
DATA_BUS=cmd;
_nop_();_nop_();
_WR=1;
_CS=1;
A0=0;
}
/**** 写入数据子程序****/
void LCD_DataWrite(uchar cmd)
{
_RD=1;
_CS=1;
_CS=0;
_nop_();
_WR=0;
_nop_();
A0=1;
_nop_();
DATA_BUS=cmd;
_nop_();_nop_();
_WR=1;
_CS=1;
A0=1;
}
/*****LCD显示控制******/
void LCD_WLCR(uchar temp)
{
LCD_CmdWrite(0x00);
LCD_DataWrite(temp);
}
/***** 扫描控制******/
void LCD_MISC(uchar temp)
{
LCD_CmdWrite(0x01);
LCD_DataWrite(temp);
}
/** 卷动显示控制 *****/
void LCD_ADSR(uchar temp)
{
LCD_CmdWrite(0x03);
LCD_DataWrite(temp);
}
/** 中断状态控制 ***/
void LCD_INTR(uchar temp)
{
LCD_CmdWrite(0x0f);
LCD_DataWrite(temp);
}
/**光标显示控制 **/
void LCD_WCCR(uchar temp)
{
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
}
/** 光标显示控制***/
void LCD_CHWI(uchar temp)
{
LCD_CmdWrite(0x11);
LCD_DataWrite(temp);
}
/**选择显示区域控制*****/
void LCD_MAMR(uchar temp)
{
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
/** 右边边界显示控制(工作窗)**/
void LCD_AWRR(uchar temp)
{
LCD_CmdWrite(0x20);
LCD_DataWrite(temp);
}
/**宽度显示控制(显示窗) ***/
void LCD_DWWR(uchar temp)
{
LCD_CmdWrite(0x21);
LCD_DataWrite(temp);
}
/***下方边界显示控制***/
void LCD_AWBR(uchar temp)
{
LCD_CmdWrite(0x30);
LCD_DataWrite(temp);
}
/***高度显示控制***/
void LCD_DWHR(uchar temp)
{
LCD_CmdWrite(0x31);
LCD_DataWrite(temp);
}
/****设定工作窗口****/
void LCD_AWLR(uchar temp)
{
LCD_CmdWrite(0x40);
LCD_DataWrite(temp);
}
/**设定工作窗口***/
void LCD_AWTR(uchar temp)
{
LCD_CmdWrite(0x50);
LCD_DataWrite(temp);
}
/***设定于卷动模式下Segment 的起始位置**/
void LCD_BGSG(uchar temp)
{
LCD_CmdWrite(0x61);
LCD_DataWrite(temp);
}
/**设定于卷动模式下Segment的终点位置E***/
void LCD_EDSG(uchar temp)
{
LCD_CmdWrite(0x62);
LCD_DataWrite(temp);
}
/**设定卷动模式下Common 的起始位置**/
void LCD_BGCM(uchar temp)
{
LCD_CmdWrite(0x71);
LCD_DataWrite(temp);
}
/**设定卷动模式下Common的终点位置***/
void LCD_EDCM(uchar temp)
{
LCD_CmdWrite(0x72);
LCD_DataWrite(temp);
}
/*设定光标闪烁和卷动时间周期**/
void LCD_BTMR(uchar temp)
{
LCD_CmdWrite(0x80);
LCD_DataWrite(temp);
}
/***空闲时间(idle time)设定 */
void LCD_ITCR(uchar temp)
{
LCD_CmdWrite(0x90);
LCD_DataWrite(temp);
}
/**触控扫瞄功能**/
void LCD_TPCR1(uchar temp)
{
LCD_CmdWrite(0xc0);
LCD_DataWrite(temp);
}
/**触控扫瞄X资料***/
void LCD_TPXR(uchar temp)
{
LCD_CmdWrite(0xc1);
LCD_DataWrite(temp);
}
/**触控扫瞄y资料**/
void LCD_TPYR(uchar temp)
{
LCD_CmdWrite(0xc2);
LCD_DataWrite(temp);
}
/**触控扫瞄 x,Y 资料**/
void LCD_TPZR(uchar temp)
{
LCD_CmdWrite(0xc3);
LCD_DataWrite(temp);
}
/**触控扫瞄手动模式开启或自动模式**/
void LCD_TPCR2(uchar temp)
{
LCD_CmdWrite(0xc4);
LCD_DataWrite(temp);
}
/***脉波宽度调变(PWM)开启或关闭**/
void LCD_PWM (uchar temp)
{
LCD_CmdWrite(0xd0);
LCD_DataWrite(temp);
}
/**PWM 责任周期(Cycle Duty)选择 **/
void LCD_PDCR(uchar temp)
{
LCD_CmdWrite(0xd1);
LCD_DataWrite(temp);
}
/****字体类型控制*****/
void LCD_FNCR(uchar temp)
{
LCD_CmdWrite(0xf0);
LCD_DataWrite(temp);
}
/**设定X Y 位置坐标。*/
void LCD_XY(uchar x,uchar y)
{
LCD_CmdWrite(0x60);
LCD_DataWrite((x & 0x3f));
delay3us(1);
LCD_CmdWrite(0x70);
LCD_DataWrite((y & 0xff));
delay3us(1);
}
/***设定放大倍数 水平h v **/
void zoom(uchar h,uchar v)
{
uchar dat1,dat2;
dat1=h & 0xc0;
dat2=v & 0x30;
LCD_CmdWrite(0xf1);
LCD_DataWrite(dat1|dat2);
}
/** 清除子程序 **/
void clear(uchar m)
{
uchar i,j;
LCD_MAMR(0x33); //双图层显示模式 同时存取DDRAM1和 DDRAM2。
LCD_WCCR(0x00); //关闭90度
LCD_MISC(0x00); //com 0-239
LCD_WLCR(0x04); //图形方式
LCD_XY(0,0); //X Y 地址
LCD_CmdWrite(0xb0); //写入
for(i=0;i<240;i++)
for(j=0;j<40;j++)
{
LCD_DataWrite(m);
}
}
/**初始化子程序**/
void LCD_Initial(void)
{
LCD_WLCR(0x00); //图形方式
LCD_MISC(0x00); //com 0-239 seg0-319
LCD_ADSR(0x00); // 关卷动
LCD_INTR(0x00); // 关中断
LCD_WCCR(0x00); // 字体正常 关闭90度
LCD_CHWI(0x00); // 游标高度为1 pixel。 间距为 1 pixel。
LCD_MAMR(0x33); //双图层显示模式 同时存取DDRAM1和 DDRAM2。
/**显示域设定**/
LCD_AWRR(0x27);
LCD_DWWR(0x27);
LCD_AWBR(0xef);
LCD_DWHR(0xef);
LCD_AWLR(0x00);
LCD_AWTR(0x00);
/**参数设定**/
LCD_XY(0,0);
LCD_BTMR(0x20); //设定光标闪烁和卷动时间周期
LCD_ITCR(0xda); //空闲时间(idle time)设定
LCD_PWM(0x00); //脉波宽度调变(PWM)开启或关闭
LCD_PDCR(0x00); //PWM 责任周期(Cycle Duty)选择
LCD_FNCR(0x00); //字体类型控制
zoom(0,0); //字体大小控制
LCD_CmdWrite(0xe0); //清除
LCD_DataWrite(0x00);
LCD_FNCR(0x08); //字体类型控制
clear(0x00);
LCD_WLCR(0x04); //开显示
}
/**********直接调用汉字********/
void Write_DDRAM(uchar x,uchar y,uchar *p)
{
//LCD_MAMR(0x33); //双图层显示模式 同时存取DDRAM1和 DDRAM2。
LCD_WLCR(0x0c); //开显示 文本模式
LCD_XY(x,y);
LCD_CmdWrite(0xb0);
while(*p>0)
{
LCD_DataWrite(*p);++p;
}
}
void LCD_ShowStr(unsigned char *text,unsigned int t)
{
LCD_CmdWrite(0xb0);
while(*text != '\0')
{
LCD_DataWrite(*text);
++text;
delay1ms(t);
}
}
/*******ASCILL表*******/
void Print_Hex(uchar buf)
{
uchar temp;
temp=buf;
temp = (temp >>4) & 0x0F; //高四位,ASCILL调整
if(temp < 0x0A)
{
temp |= 0x30;
}
else temp = temp + 0x37;
LCD_DataWrite(temp);
delay1ms(1);
temp=buf;
temp = temp & 0x0F; //低四位 ASCILL调整
if(temp < 0x0A)
{
temp |= 0x30;
}
else temp = temp + 0x37;
LCD_DataWrite(temp);
delay1ms(1);
}
/**触摸控制读取X资料**/
uchar ADC_X1(void)
{ /// 触控扫瞄X资料 Bit[9:2]
uchar temp;
LCD_CmdWrite(0xc1);
temp=LCD_DataRead();
delay1ms(10);
return temp;
}
/**触摸控制读取Y资料****/
uchar ADC_Y1(void)
{
uchar temp; /// 触控扫瞄Y资料 Bit[9:2]
LCD_CmdWrite(0xc2);
temp=LCD_DataRead();
delay1ms(10);
return temp;
}
/** 触摸屏*****/
void Display_Touch(void)
{
uchar Debounce_count = 0;
uchar temp2,X1,Y1,X2,Y2;
int Timer_count = 0;
LCD_WLCR(0x0c); //开显示 文本模式
zoom(2,2);
LCD_CmdWrite(0xb0);
Write_DDRAM(4,45,"Touch-Panel Test");
zoom(0,0);
LCD_CmdWrite(0xb0);
Write_DDRAM(0,220," No touch for 10 sec, exit touch mode ");
LCD_MAMR(0x11); //DDRAM1
LCD_CmdWrite(0xC0); // 开触摸中断
LCD_DataWrite(0xC4);
LCD_CmdWrite(0xC4); // 选择自动模式
LCD_DataWrite(0x00);
while(1)
{
Debounce_count = 0; //去抖时间设定
LCD_CmdWrite(0x0f); //清中断
LCD_DataWrite(0x00);
delay1ms(10);
LCD_CmdWrite(0x0f);
temp2 = LCD_DataRead();
if((temp2 & 0x01) == 0x01) //检设到触模
{
X1 = ADC_X1();
Y1 = ADC_Y1();
delay1ms(2);
//===================================================
// Debounce The Touch State Read Twice
//===================================================
if((X1 > 0x18)&&(X1 < 0xF0)&&(Y1 > 0x1B)&&(Y1 < 0xEA))
{
do
{
X2 = ADC_X1(); // X2 and Y2 坐标
Y2 = ADC_Y1();
delay1ms(2);
if((X2 == X1)&&(Y2 == Y1))
{
X1 = X2;
Y1 = Y2;
}
Debounce_count++;
if(Debounce_count == 2) // 两次读取
{
if((X1 != 0)||(Y1 != 0))
{
LCD_WLCR(0x0c); //开显示 文本模式
LCD_XY(13, 112);
LCD_CmdWrite(0xb0);
LCD_ShowStr("X = ",1);
LCD_XY(17, 112);
LCD_CmdWrite(0xb0);
Print_Hex(X1); // 显示 X 坐标
LCD_XY(21, 112);
LCD_CmdWrite(0xb0);
LCD_ShowStr("Y = ",1);
LCD_XY(25, 112);
LCD_CmdWrite(0xb0);
Print_Hex(Y1); // 显示 Y 坐标
Timer_count = 0;
}
Debounce_count = 0; //
LCD_CmdWrite(0x0f); // 清除触摸中断
LCD_DataWrite(0x00);
break;
}
LCD_CmdWrite(0x0f); // 清除触摸中断
LCD_DataWrite(0x00);
delay1ms(10);
LCD_CmdWrite(0x0f); // 检设触摸状态
temp2 = LCD_DataRead();
}while((temp2 & 0x01) == 0x01); // 退出触摸模式
}// The end of if((X1 > 0x18)&&(X1 < 0xF0)&&(Y1 > 0x1B)&&(Y1 < 0xEA))
LCD_CmdWrite(0x0f); // 清除触摸中断
LCD_DataWrite(0x00);
}
/*10秒没有触摸 自动退出 触摸状态*/
else
{
delay1ms(1);
Timer_count++;
if(Timer_count == 350)
{
Timer_count = 0;
break;
}
}
}
}
/***主程序**/
void main()
{
LCD_Reset();
LCD_Initial();
///Display_Touch();
Write_DDRAM(0,40,tab);
zoom(2,2);
Write_DDRAM(0,80,"HG3202407");
while(1);
}
#include <stdio.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ushort unsigned short
#define ulong unsigned long
#define DATA_BUS P1
/*
sbit RST=P3^5;
sbit A0= P3^4;
sbit INTI=P3^7;
sbit _CS=P3^3;
sbit _WR=P3^0;
sbit _RD=P3^1;
sbit BUSY=P3^6 ;
*/
sbit _WR=P3^0;
sbit _RD=P3^1;
sbit _CS=P3^2; //CE
sbit A0= P3^3; //REST
sbit RST=P3^4;
sbit BUSY=P3^5 ;
sbit INTI=P3^6;
uchar code tab[]={"杭州清达光电技术有限, 杭州佳显科技有限公司: 欢迎来自五湖四海的客户。"};
/***延时子程序***/
void delay3us(uchar m)
{
while(m--);
}
void delay10us(uchar m)
{ uchar i;
for(i=0;i<4;i++)
delay3us(m);
}
void delay1ms(uchar m)
{ uchar i;
for(i=0;i<102;i++)
delay3us(m);
}
void delay100ms(uchar m)
{ uchar i;
for(i=0;i<102;i++)
delay1ms(m);
}
/****复位子程序****/
void LCD_Reset(void)
{
RST = 0;
delay1ms(5);
RST = 1;
delay1ms(5);
}
/**读指令数据子程序**/
uchar LCD_CmdRead(void)
{
uchar dat;
DATA_BUS=0xff;
_WR=1;
_CS=1;
_CS=0;
_nop_();
A0=1;
_nop_();
_RD=0;
_nop_();
dat=DATA_BUS;
_nop_();_nop_();
_CS=1;
A0=0;
return dat;
}
/****读数据子程序*******/
uchar LCD_DataRead(void)
{
uchar dat;
DATA_BUS=0xff;
_WR=1;
_CS=1;
_CS=0;
_nop_();
A0=0;
_nop_();
_RD=0;
_nop_();
dat=DATA_BUS;
_nop_();_nop_();
_CS=1;
A0=1;
return dat;
}
/**** 忙****/
void LCD_ChkBusy(void)
{
uchar temp;
do
{
temp = LCD_CmdRead();
}while(temp & 0xc0);
}
void IO_Busy(void)
{
do
{}
while(BUSY);
}
/**** 写入指令子程序****/
void LCD_CmdWrite(uchar cmd)
{
_RD=1;
_CS=1;
_CS=0;
_nop_();
_WR=0;
_nop_();
A0=1;
_nop_();
DATA_BUS=cmd;
_nop_();_nop_();
_WR=1;
_CS=1;
A0=0;
}
/**** 写入数据子程序****/
void LCD_DataWrite(uchar cmd)
{
_RD=1;
_CS=1;
_CS=0;
_nop_();
_WR=0;
_nop_();
A0=1;
_nop_();
DATA_BUS=cmd;
_nop_();_nop_();
_WR=1;
_CS=1;
A0=1;
}
/*****LCD显示控制******/
void LCD_WLCR(uchar temp)
{
LCD_CmdWrite(0x00);
LCD_DataWrite(temp);
}
/***** 扫描控制******/
void LCD_MISC(uchar temp)
{
LCD_CmdWrite(0x01);
LCD_DataWrite(temp);
}
/** 卷动显示控制 *****/
void LCD_ADSR(uchar temp)
{
LCD_CmdWrite(0x03);
LCD_DataWrite(temp);
}
/** 中断状态控制 ***/
void LCD_INTR(uchar temp)
{
LCD_CmdWrite(0x0f);
LCD_DataWrite(temp);
}
/**光标显示控制 **/
void LCD_WCCR(uchar temp)
{
LCD_CmdWrite(0x10);
LCD_DataWrite(temp);
}
/** 光标显示控制***/
void LCD_CHWI(uchar temp)
{
LCD_CmdWrite(0x11);
LCD_DataWrite(temp);
}
/**选择显示区域控制*****/
void LCD_MAMR(uchar temp)
{
LCD_CmdWrite(0x12);
LCD_DataWrite(temp);
}
/** 右边边界显示控制(工作窗)**/
void LCD_AWRR(uchar temp)
{
LCD_CmdWrite(0x20);
LCD_DataWrite(temp);
}
/**宽度显示控制(显示窗) ***/
void LCD_DWWR(uchar temp)
{
LCD_CmdWrite(0x21);
LCD_DataWrite(temp);
}
/***下方边界显示控制***/
void LCD_AWBR(uchar temp)
{
LCD_CmdWrite(0x30);
LCD_DataWrite(temp);
}
/***高度显示控制***/
void LCD_DWHR(uchar temp)
{
LCD_CmdWrite(0x31);
LCD_DataWrite(temp);
}
/****设定工作窗口****/
void LCD_AWLR(uchar temp)
{
LCD_CmdWrite(0x40);
LCD_DataWrite(temp);
}
/**设定工作窗口***/
void LCD_AWTR(uchar temp)
{
LCD_CmdWrite(0x50);
LCD_DataWrite(temp);
}
/***设定于卷动模式下Segment 的起始位置**/
void LCD_BGSG(uchar temp)
{
LCD_CmdWrite(0x61);
LCD_DataWrite(temp);
}
/**设定于卷动模式下Segment的终点位置E***/
void LCD_EDSG(uchar temp)
{
LCD_CmdWrite(0x62);
LCD_DataWrite(temp);
}
/**设定卷动模式下Common 的起始位置**/
void LCD_BGCM(uchar temp)
{
LCD_CmdWrite(0x71);
LCD_DataWrite(temp);
}
/**设定卷动模式下Common的终点位置***/
void LCD_EDCM(uchar temp)
{
LCD_CmdWrite(0x72);
LCD_DataWrite(temp);
}
/*设定光标闪烁和卷动时间周期**/
void LCD_BTMR(uchar temp)
{
LCD_CmdWrite(0x80);
LCD_DataWrite(temp);
}
/***空闲时间(idle time)设定 */
void LCD_ITCR(uchar temp)
{
LCD_CmdWrite(0x90);
LCD_DataWrite(temp);
}
/**触控扫瞄功能**/
void LCD_TPCR1(uchar temp)
{
LCD_CmdWrite(0xc0);
LCD_DataWrite(temp);
}
/**触控扫瞄X资料***/
void LCD_TPXR(uchar temp)
{
LCD_CmdWrite(0xc1);
LCD_DataWrite(temp);
}
/**触控扫瞄y资料**/
void LCD_TPYR(uchar temp)
{
LCD_CmdWrite(0xc2);
LCD_DataWrite(temp);
}
/**触控扫瞄 x,Y 资料**/
void LCD_TPZR(uchar temp)
{
LCD_CmdWrite(0xc3);
LCD_DataWrite(temp);
}
/**触控扫瞄手动模式开启或自动模式**/
void LCD_TPCR2(uchar temp)
{
LCD_CmdWrite(0xc4);
LCD_DataWrite(temp);
}
/***脉波宽度调变(PWM)开启或关闭**/
void LCD_PWM (uchar temp)
{
LCD_CmdWrite(0xd0);
LCD_DataWrite(temp);
}
/**PWM 责任周期(Cycle Duty)选择 **/
void LCD_PDCR(uchar temp)
{
LCD_CmdWrite(0xd1);
LCD_DataWrite(temp);
}
/****字体类型控制*****/
void LCD_FNCR(uchar temp)
{
LCD_CmdWrite(0xf0);
LCD_DataWrite(temp);
}
/**设定X Y 位置坐标。*/
void LCD_XY(uchar x,uchar y)
{
LCD_CmdWrite(0x60);
LCD_DataWrite((x & 0x3f));
delay3us(1);
LCD_CmdWrite(0x70);
LCD_DataWrite((y & 0xff));
delay3us(1);
}
/***设定放大倍数 水平h v **/
void zoom(uchar h,uchar v)
{
uchar dat1,dat2;
dat1=h & 0xc0;
dat2=v & 0x30;
LCD_CmdWrite(0xf1);
LCD_DataWrite(dat1|dat2);
}
/** 清除子程序 **/
void clear(uchar m)
{
uchar i,j;
LCD_MAMR(0x33); //双图层显示模式 同时存取DDRAM1和 DDRAM2。
LCD_WCCR(0x00); //关闭90度
LCD_MISC(0x00); //com 0-239
LCD_WLCR(0x04); //图形方式
LCD_XY(0,0); //X Y 地址
LCD_CmdWrite(0xb0); //写入
for(i=0;i<240;i++)
for(j=0;j<40;j++)
{
LCD_DataWrite(m);
}
}
/**初始化子程序**/
void LCD_Initial(void)
{
LCD_WLCR(0x00); //图形方式
LCD_MISC(0x00); //com 0-239 seg0-319
LCD_ADSR(0x00); // 关卷动
LCD_INTR(0x00); // 关中断
LCD_WCCR(0x00); // 字体正常 关闭90度
LCD_CHWI(0x00); // 游标高度为1 pixel。 间距为 1 pixel。
LCD_MAMR(0x33); //双图层显示模式 同时存取DDRAM1和 DDRAM2。
/**显示域设定**/
LCD_AWRR(0x27);
LCD_DWWR(0x27);
LCD_AWBR(0xef);
LCD_DWHR(0xef);
LCD_AWLR(0x00);
LCD_AWTR(0x00);
/**参数设定**/
LCD_XY(0,0);
LCD_BTMR(0x20); //设定光标闪烁和卷动时间周期
LCD_ITCR(0xda); //空闲时间(idle time)设定
LCD_PWM(0x00); //脉波宽度调变(PWM)开启或关闭
LCD_PDCR(0x00); //PWM 责任周期(Cycle Duty)选择
LCD_FNCR(0x00); //字体类型控制
zoom(0,0); //字体大小控制
LCD_CmdWrite(0xe0); //清除
LCD_DataWrite(0x00);
LCD_FNCR(0x08); //字体类型控制
clear(0x00);
LCD_WLCR(0x04); //开显示
}
/**********直接调用汉字********/
void Write_DDRAM(uchar x,uchar y,uchar *p)
{
//LCD_MAMR(0x33); //双图层显示模式 同时存取DDRAM1和 DDRAM2。
LCD_WLCR(0x0c); //开显示 文本模式
LCD_XY(x,y);
LCD_CmdWrite(0xb0);
while(*p>0)
{
LCD_DataWrite(*p);++p;
}
}
void LCD_ShowStr(unsigned char *text,unsigned int t)
{
LCD_CmdWrite(0xb0);
while(*text != '\0')
{
LCD_DataWrite(*text);
++text;
delay1ms(t);
}
}
/*******ASCILL表*******/
void Print_Hex(uchar buf)
{
uchar temp;
temp=buf;
temp = (temp >>4) & 0x0F; //高四位,ASCILL调整
if(temp < 0x0A)
{
temp |= 0x30;
}
else temp = temp + 0x37;
LCD_DataWrite(temp);
delay1ms(1);
temp=buf;
temp = temp & 0x0F; //低四位 ASCILL调整
if(temp < 0x0A)
{
temp |= 0x30;
}
else temp = temp + 0x37;
LCD_DataWrite(temp);
delay1ms(1);
}
/**触摸控制读取X资料**/
uchar ADC_X1(void)
{ /// 触控扫瞄X资料 Bit[9:2]
uchar temp;
LCD_CmdWrite(0xc1);
temp=LCD_DataRead();
delay1ms(10);
return temp;
}
/**触摸控制读取Y资料****/
uchar ADC_Y1(void)
{
uchar temp; /// 触控扫瞄Y资料 Bit[9:2]
LCD_CmdWrite(0xc2);
temp=LCD_DataRead();
delay1ms(10);
return temp;
}
/** 触摸屏*****/
void Display_Touch(void)
{
uchar Debounce_count = 0;
uchar temp2,X1,Y1,X2,Y2;
int Timer_count = 0;
LCD_WLCR(0x0c); //开显示 文本模式
zoom(2,2);
LCD_CmdWrite(0xb0);
Write_DDRAM(4,45,"Touch-Panel Test");
zoom(0,0);
LCD_CmdWrite(0xb0);
Write_DDRAM(0,220," No touch for 10 sec, exit touch mode ");
LCD_MAMR(0x11); //DDRAM1
LCD_CmdWrite(0xC0); // 开触摸中断
LCD_DataWrite(0xC4);
LCD_CmdWrite(0xC4); // 选择自动模式
LCD_DataWrite(0x00);
while(1)
{
Debounce_count = 0; //去抖时间设定
LCD_CmdWrite(0x0f); //清中断
LCD_DataWrite(0x00);
delay1ms(10);
LCD_CmdWrite(0x0f);
temp2 = LCD_DataRead();
if((temp2 & 0x01) == 0x01) //检设到触模
{
X1 = ADC_X1();
Y1 = ADC_Y1();
delay1ms(2);
//===================================================
// Debounce The Touch State Read Twice
//===================================================
if((X1 > 0x18)&&(X1 < 0xF0)&&(Y1 > 0x1B)&&(Y1 < 0xEA))
{
do
{
X2 = ADC_X1(); // X2 and Y2 坐标
Y2 = ADC_Y1();
delay1ms(2);
if((X2 == X1)&&(Y2 == Y1))
{
X1 = X2;
Y1 = Y2;
}
Debounce_count++;
if(Debounce_count == 2) // 两次读取
{
if((X1 != 0)||(Y1 != 0))
{
LCD_WLCR(0x0c); //开显示 文本模式
LCD_XY(13, 112);
LCD_CmdWrite(0xb0);
LCD_ShowStr("X = ",1);
LCD_XY(17, 112);
LCD_CmdWrite(0xb0);
Print_Hex(X1); // 显示 X 坐标
LCD_XY(21, 112);
LCD_CmdWrite(0xb0);
LCD_ShowStr("Y = ",1);
LCD_XY(25, 112);
LCD_CmdWrite(0xb0);
Print_Hex(Y1); // 显示 Y 坐标
Timer_count = 0;
}
Debounce_count = 0; //
LCD_CmdWrite(0x0f); // 清除触摸中断
LCD_DataWrite(0x00);
break;
}
LCD_CmdWrite(0x0f); // 清除触摸中断
LCD_DataWrite(0x00);
delay1ms(10);
LCD_CmdWrite(0x0f); // 检设触摸状态
temp2 = LCD_DataRead();
}while((temp2 & 0x01) == 0x01); // 退出触摸模式
}// The end of if((X1 > 0x18)&&(X1 < 0xF0)&&(Y1 > 0x1B)&&(Y1 < 0xEA))
LCD_CmdWrite(0x0f); // 清除触摸中断
LCD_DataWrite(0x00);
}
/*10秒没有触摸 自动退出 触摸状态*/
else
{
delay1ms(1);
Timer_count++;
if(Timer_count == 350)
{
Timer_count = 0;
break;
}
}
}
}
/***主程序**/
void main()
{
LCD_Reset();
LCD_Initial();
///Display_Touch();
Write_DDRAM(0,40,tab);
zoom(2,2);
Write_DDRAM(0,80,"HG3202407");
while(1);
}
上一篇:HGO16016018测试程序
下一篇:HG2401283演示程序