中显触摸屏按键值返回能叠加吗

防止误触、不易损坏还能让手机屏显得更大_网易新闻
防止误触、不易损坏还能让手机屏显得更大
用微信扫码二维码
分享至好友和朋友圈
  如今,智能手机很难再找到更多的实体按键,取而代之的则是各式各样的虚拟按键。尤其对于安卓手机来说,自从系统进入安卓4.0时代以来,越来越多的安卓手机开始使用虚拟按键设计, 返回键、Home键和菜单键这三个按键成为安卓手机的标配。为什么手机厂商会把实体按键改为虚拟键呢?虚拟按键有哪些方面的优势呢? 来看看。  防止误触 不易损坏
如果你是一个手游爱好者, 当你在横屏玩游戏的时候,非常容易误触到实体的按键,而虚拟按键则可以根据需要自动隐藏起来,当结束游戏后再自动弹出,彻底解决误触的问题,十分方便。
虽然精湛的加工工艺,可以将实体按键的触感反馈做到几乎完美,但是实体按键毕竟存在一定的寿命问题,尤其对于按键频率较高的手机发烧友来说,更是一大困扰。 此外,对于手机厂商来说,减少实体按键的使用可以大大减少物料和设计成本,按键设计完全可以通过软件来搞定。
自定义功能方便自如
虚拟按键的一大优势在于实体按键的位置排列不能更改,而虚拟按键的位置排列却想怎么改就怎么改。 此外,虚拟按键的功能还可以自定义, 比如由于以前遗留的习惯,经常用菜单键,于是就把菜单键调了出来, 多任务键用得比较少, 就可以设置成了长按呼出。另外,根据需要还可以在右下角多加了一个下拉通知栏的快捷键, 这样来消息的时候我就不用把手伸到屏幕顶部,对于单手持机操作还是很方便的。
增加手机屏的占比度
采用实体按键的手机,在机身结构设计时需要在机身下方留出空间位置, 这在手机这种寸土寸金的地方实在是浪费。同时,采用虚拟按键使得以往采用实体按键的手机存在的漏光现象可以轻松解决掉。 屏内虚拟按键还可以减少手机的长度, 在相同机身下可以装入更大的屏幕, 而在相同屏幕下可以做到更小的机身。
解决安卓碎片化问题提升系统观感
从Android 3.0开始,谷歌为解决平板上横竖屏功能按键时很难兼顾的四个实体按键而开始尝试改用三个虚拟按键,这样使得平板在横竖屏切换时,三个虚拟按键可以随着界面变化,解决了交互同一的问题。尝试到平板虚拟按键的甜头后,谷歌开始在Android 4.0之后的软件版本将虚拟按键作为标配。
当然采用虚拟按键后的Android手机会在屏幕出现一个双“下巴”,一定程度上影响视觉美观。 不过在后续的Android版本中, 谷歌也开始优化虚拟按键的美观性,比如做成背景透明的,从而提升了系统的美感。
新文化记者 王祥(来源:新文化报)
本文来源:华商网-新文化报 。更多精彩内容
请登录华商网()
责任编辑:王晓易_NE0011
用微信扫码二维码
分享至好友和朋友圈
加载更多新闻
热门产品:   
:        
:         
热门影院:
阅读下一篇
用微信扫描二维码
分享至好友和朋友圈手机触摸屏返回键没反应_百度知道
手机触摸屏返回键没反应
手机返回键没反应,应该是电容屏,另一个菜单键不按时里面有淡淡的光,而返回键没有。是不是坏了
我有更好的答案
触摸屏失灵的原因:充电时所使用的充电器非原装或者适配器有故障。手机放在口袋摩擦产生静电干扰。&手机屏幕潮湿或沾水。手机某些软件运行导致系统反应迟缓。手机固件或者触摸屏本身损坏。触摸屏失灵解决方法:更换使用手机原装充电器。轻按电源键关闭屏幕,再点亮屏幕,一般可恢复正常。擦干净手机屏幕上的水份,触屏恢复正常。等待系统恢复正常或关闭相应的软件。到官网下载固件升级或到客服中心处理。
采纳率:58%
来自团队:
请问楼主的机器是什么型号的。如果是安卓的机器,出现以上情况的:即返回键指示灯不亮了且失灵的可能的原因有以下几种:1,刷机的rom,存在不稳定因素,造成指示灯烧灯的情况;2,机器本身硬件不够精良,使用一段时间之后,造成的损坏; 建议:如果不影响使用,其实不必在意的。本人以前使用的defy,因为刷机rom的原因,搜索键指示灯被烧毁,但是不影响使用的。楼主的返回键既然不可以使用了,那就必须去维修了。
本回答被提问者采纳
估计是里面的接触不好
应该是坏掉了
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
手机触摸屏的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。触摸屏按键处理方法研究_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
触摸屏按键处理方法研究
&&触摸屏按键处理方法研究
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢求帮忙!12864动态显示按键按下次数的问题,就是按几下按键液晶会显示数字,自己的程序,但是就是液晶不变 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
求帮忙!12864动态显示按键按下次数的问题,就是按几下按键液晶会显示数字,自己的程序,但是就是液晶不变
12:48:28  
#include &reg52.H&
#include &intrins.h&& &&&
#include &Ctype.h&
#include&stdio.h&
sbit key=P2^0;& && &
sbit cs1=P1^1;
sbit reset=P1^0;& &&&
sbit rs=P3^0;
sbit sclk=P3^1;& && &
sbit sid=P3^2;
sbit Rom_IN=P1^2;& & //字库IC 接口定义:Rom_IN 就是字库IC 的SI
sbit Rom_OUT=P1^3;& &//字库IC 接口定义:Rom_OUT就是字库IC 的SO
sbit Rom_SCK=P1^4;& &//字库IC 接口定义:Rom_SCK就是字库IC 的SCK
sbit Rom_CS=P1^5;& & //字库IC接口定义Rom_CS就是字库IC的CS#
sbit add=P2^1;
#define uchar unsigned char& &
#define uint unsigned int
#define ulong unsigned long
char xianshi[5];
/*记录按键次数的变量*/
void delay_us(int i)
& & int j,k;
& & for(j=0;j&i;j++)
& & for(k=0;k&1;k++);
void delay(int i)
& &int j,k;
& &for(j=0;j&i;j++)
& & for(k=0;k&110;k++);
void transfer_command(int data1) /*写指令*/&&
& & & & cs1=0;
& & & & rs=0;
& & & & for(i=0;i&8;i++)
& & & & & & & & sclk=0;
& && &&&delay_us(2);
& & & & & & & & if(data1&0x80) sid=1;
& & & & & & & & else sid=0;
& & & & & & & & sclk=1;
& && &&&delay_us(2);
& & & & & & & & data1=data1&&=1;
& & & & cs1=1;
void transfer_data_lcd(int data1)/*写数据*/
& & & & cs1=0;
& & & & rs=1;
& & & & for(i=0;i&8;i++)
& & & & & & & & sclk=0;
& && &&&delay_us(1);
& & & & & & & & if(data1&0x80) sid=1;
& & & & & & & & else sid=0;
& & & & & & & & sclk=1;
& && &&&delay_us(1);
& & & & & & & & data1=data1&&=1;
& & & & cs1=1;
void initial_lcd()/*液晶屏初始化*/
& & & & //cs1=0;
& & & & reset=0;& && &&&& & & & //低电平复位
& & & & delay(100);
& & & & reset=1;& & & & & & & && &&&//复位完毕
& & & & delay(100);& && &&&
& & & & transfer_command(0xe2);& & & &&&//软复位
& & & & delay(5);
& & & & transfer_command(0x2c);&&//升压步聚1
& & & & delay(5);& & & &
& & & & transfer_command(0x2e);&&//升压步聚2
& & & & delay(5);
& & & & transfer_command(0x2f);&&//升压步聚3
& & & & delay(5);
& & & & transfer_command(0x24);&&//粗调对比度,可设置范围0x20~0x27
& & & & transfer_command(0x81);&&//微调对比度
& & & & transfer_command(0x1f);&&//0x1a,微调对比度的值,可设置范围0x00~0x3f 与上一条是双指令上一条的0x81不动,下面的才是值
& & & & transfer_command(0xa2);&&//1/7偏压比(bias)一般不改0xa2是1/9
& & & & transfer_command(0xc8);&&//行扫描顺序:从上到下
& & & & transfer_command(0xa0);&&//列扫描顺序:从左到右
& & & & transfer_command(0x40);&&//起始行:第一行开始
& & & & transfer_command(0xaf);&&//开显示& & & &
void lcd_address(uchar page,uchar column) /*显示位置,行和列的设置*/
column=column-1;& && && &//我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1.
page=page-1;
transfer_command(0xb0+page);& &//设置页地址。每页是 8 行。一个画面的 64 行被分成 8 个页。我们平常所说的第 1 页,在 LCD 驱动 IC 里是第 0 页,所以在这里减去1*/
transfer_command(((column&&4)&0x0f)+0x10); //设置列地址的高4 位
transfer_command(column&0x0f);& & //设置列地址的低4 位
/*全屏清屏*/
void clear_screen()
unsigned char i,j;
&&for(i=0;i&9;i++)
&&lcd_address(1+i,1);
&&for(j=0;j&132;j++)
transfer_data_lcd(0x00);
//送指令到晶联讯字库IC
void send_command_to_ROM( uchar datu )
for(i=0;i&8;i++ )
&&Rom_SCK=0;
&&delay_us(10);
&&if(datu&0x80)Rom_IN = 1;
&&else Rom_IN = 0;
&&datu = datu&&1;
&&Rom_SCK=1;
&&delay_us(10);
//从晶联讯字库IC 中取汉字或字符数据(1 个字节)
static uchar get_data_from_ROM( )
uchar ret_data=0;
for(i=0;i&8;i++)
&&Rom_OUT=1;
&&Rom_SCK=0;
&&//delay_us(1);
&&ret_data=ret_data&&1;
&&if( Rom_OUT )
& &ret_data=ret_data+1;
& &ret_data=ret_data+0;
&&Rom_SCK=1;
&&//delay_us(1);
return(ret_data);
//从指定地址读出数据写到液晶屏指定(page,column)座标中
void get_and_write_16x16(ulong fontaddr,uchar page,uchar column)
uchar i,j,disp_
Rom_CS = 0;
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)&&16);&&//地址的高8 位,共24 位
send_command_to_ROM((fontaddr&0xff00)&&8);& &//地址的中8 位,共24 位
send_command_to_ROM(fontaddr&0xff);& &&&//地址的低8 位,共24 位
for(j=0;j&2;j++)
&&lcd_address(page+j,column);
&&for(i=0; i&16; i++ )
& &disp_data=get_data_from_ROM();
& &transfer_data_lcd(disp_data); //写数据到LCD,每写完1 字节的数据后列地址自动加1
void get_and_write_8x16(ulong fontaddr,uchar page,uchar column)
uchar i,j,disp_
Rom_CS = 0;
send_command_to_ROM(0x03);
send_command_to_ROM((fontaddr&0xff0000)&&16);&&//地址的高8 位,共24 位
send_command_to_ROM((fontaddr&0xff00)&&8);& &//地址的中8 位,共24 位
send_command_to_ROM(fontaddr&0xff);& &&&//地址的低8 位,共24 位
for(j=0;j&2;j++)
&&lcd_address(page+j,column);
&&for(i=0; i&8; i++ )
& &disp_data=get_data_from_ROM();
& &transfer_data_lcd(disp_data); //写数据到LCD,每写完1 字节的数据后列地址自动加1
//****************************************************************
ulong&&fontaddr=0;
void display_GB2312_string(uchar page,uchar column,uchar *text)
uchar i= 0;& &&&
while((text&0x00))
&&if(((text&=0xb0) &&(text&=0xf7))&&(text[i+1]&=0xa1))
& &//国标简体(GB2312)汉字在晶联讯字库IC 中的地址由以下公式来计算:
& &//Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseABaseAdd=0
& &//由于担心8 位单片机有乘法溢出问题,所以分三部取地址
& &fontaddr = (text- 0xb0)*94;&&
& &fontaddr += (text[i+1]-0xa1)+846;
& &fontaddr = (ulong)(fontaddr*32);
& &get_and_write_16x16(fontaddr,page,column);&&//从指定地址读出数据写到液晶屏指定(page,column)座标中
& &column+=16;
&&else if(((text&=0xa1) &&(text&=0xa3))&&(text[i+1]&=0xa1))
& &//国标简体(GB 点的字符在晶联讯字库IC 中的地址由以下公式来计算:
& &//Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseABaseAdd=0
& &//由于担心8 位单片机有乘法溢出问题,所以分三部取地址
& &fontaddr = (text- 0xa1)*94;&&
& &fontaddr += (text[i+1]-0xa1);
& &fontaddr = (ulong)(fontaddr*32);
& &get_and_write_16x16(fontaddr,page,column);&&//从指定地址读出数据写到液晶屏指定(page,column)座标中
& &column+=16;
&&else if((text&=0x20) &&(text&=0x7e))&&
&&{& && && &
& &fontaddr = (text- 0x20);
& &fontaddr = (unsigned long)(fontaddr*16);
& &fontaddr = (unsigned long)(fontaddr+0x3cf80);& &
& &get_and_write_8x16(fontaddr,page,column);&&//从指定地址读出数据写到液晶屏指定(page,column)座标中
& &column+=8;
void key_add(void)/*按键加*/
&&int H, M, S, W;
&&if(add==0)
& &&&delay(10);/*延时去抖*/
& & & &&&if(add==0)
& & & &&&{
& & & && &&&while(!add);
& & & & & & & & p++;
& & & & & & & & delay(10);
& & & &&&}
& && &&&H=((p/1000)%10);
& && &&&M=(p/100)%10;
& && &&&S=(p/10)%10;
& && &&&W=(p%10);
& && &&&sprintf(&xianshi, &%d%d%d%d&, H, M, S,W);& && && && & // 将整数转换成字符串
& & & & & & & & & & & &
void timer0_chushihua()/*定时器初始化*/
& && &&&TMOD=0x01;
& & & & TH0=0x00;
& & & & TL0=0x00;
& & & & EA=1;
& & & & ET0=1;
& & & & TR0=1;
void timer0() interrupt 1
{& & & && &
& && & TH0=()/256;/*设定定时器初始值,定时20ms*/
& && & TL0=()%256;
& & & & display_GB2312_string(7,33,xianshi);/*显示按键按过的次数*/
& & & & display_GB2312_string(5,1,&∑&&000000&);/*显示固定字符和数字*/
& && &&&display_GB2312_string(1,1,&dshyhuf&);/*显示固定字母*/
& & & & & & & & & & & & & & & &
void main(void)
& && &initial_lcd();/*液晶屏初始化*/
& && &clear_screen();/*液晶屏清屏*/
& && &timer0_chushihua();& & & &&&
& &&&while(1)
& & {& & & && && &
& & & & key_add();
附件: 您需要
才可以下载或查看,没有帐号?
本帖最后由 andy_wsj 于
09:30 编辑
void timer0() interrupt 1
{& && && &&&
& && &&&TH0=()/256;/*设定定时器初始值,定时20ms*/
& && &&&TL0=()%256;
& && && &display_GB2312_string(7,33,xianshi);/*显示按键按过的次数*/
& && && &display_GB2312_string(5,1,&∑&&000000&);/*显示固定字符和数字*/
& && && &display_GB2312_string(1,1,&dshyhuf&);/*显示固定字母*/
& && && && && && && && && && && &
display_GB2312_string不用放到中断里面吧?放在主循环就可以了
中断用一个变量计时,时间到了主循环就刷新显示
反而是按键扫描可以放到中断里面来
助理工程师
12:48:29  
本帖最后由 andy_wsj 于
09:30 编辑
void timer0() interrupt 1
{& && && &&&
& && &&&TH0=()/256;/*设定定时器初始值,定时20ms*/
& && &&&TL0=()%256;
& && && &display_GB2312_string(7,33,xianshi);/*显示按键按过的次数*/
& && && &display_GB2312_string(5,1,&∑&&000000&);/*显示固定字符和数字*/
& && && &display_GB2312_string(1,1,&dshyhuf&);/*显示固定字母*/
& && && && && && && && && && && &
display_GB2312_string不用放到中断里面吧?放在主循环就可以了
中断用一个变量计时,时间到了主循环就刷新显示
反而是按键扫描可以放到中断里面来
13:27:49  
请问会不会是进入中断出不来,或者本身就是按键加的函数有问题
17:20:30  
谢谢分享谢谢分享谢谢分享
& && & 谢谢分享谢谢分享& && && && && && && &&&谢谢分享
& && & 谢谢分享谢谢分享& && && && && & 谢谢分享& && && &
& && && && && && & 谢谢分享& && && && &&&谢谢分享谢谢分享谢谢分享
& && && && & 谢谢分享& && && && &&&谢谢分享& && &&&谢& && && && && & 谢
& && && && & 谢谢分享& && && && &&&谢谢分享& && &&&谢& && && && && & 谢
& && && && & 谢谢分享& && && && &&&谢谢分享& && &&&分& && && && && & 分
& && && && & 谢谢分享& && && && &&&谢谢分享& && &&&享& && && && && & 享
& && && && & 谢谢分享& && && && &&&谢谢分享& && &&&谢& && && && && & 谢
& && && && & 谢谢分享& && && && &&&谢谢分享& && &&&谢& && && && && & 谢
谢& && &&&谢谢分享& && && && && &谢谢分享& && & 分& && && && && & 分
谢谢& &&&谢谢分享& && && && &&&谢谢分享& && &&&享& && && && && & 享
谢谢分 谢谢分享& && && && &&&谢谢分享& && &&&谢& && && && && & 谢
谢谢分 谢谢分享& && && && && && && && && && & 谢& && & 谢
22:00:26  
自新 发表于
谢谢分享谢谢分享谢谢分享
& && & 谢谢分享谢谢分享& && && && && && && &&&谢谢分享
& && & 谢谢分享谢谢分享& && && && && & 谢谢分享& && && &
这是求助好不好?怎么成分享了……
22:01:31  
没有大神帮忙解答一下疑问吗?
22:13:38  
先一步一步找问题,液晶能显示则证明液晶驱动程序没问题,液晶显示不变就可能是按键按下的值没有传给液晶,亦或者是液晶反应了又被复原了……
10:02:47  
void timer0() interrupt 1
{& && && &&&
大神果然是大神......这个我想了两天没解决,厉害
11:17:48  
不明觉厉,顶!d=====( ̄▽ ̄*)b
助理工程师
15:10:47  
可能是出了中断后马上又进入中断了。进入中断后可以先把TR置0,出中断前再将其置1.& &不知道是不是这个原因,在下水平很有限呀
17:52:25  
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

 

随机推荐