如何解决LCD图标大小不对等的问题?
注:Android 4.3引入的wm工具
wm命令及用法:
系统说明:
usage: wm [subcommand] [options]
wm size [reset|WxH]
wm density [reset|DENSITY]
wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]
wm size: return or override display size.
wm density: override display density.
wm overscan: set overscan area for display.
解释:wm是高通平台(MTK平台类似的命令为am,其他平台没接触,不太清楚)下对手机分辨率、像素密度、显示区域进行设置的命令。其参数比较少,下面逐条介绍一下该命令的用法。
1、wm size [reset|WxH]
[]内的是可选项。单纯运行wm size命令将会得到lcd本身设置的显示分辨率。如下图:
wm size W x H命令是按witch x hight 设置分辨率。如果分辨率设置的过大,图标会变大,反之则变小。设置了分辨率以后执行wm size命令,可以看到LCD本身的分辨率及overwrite的分辨率。如下图:
wm size reset 命令是将分辨率设置为LCD原始分辨率。
2、 wm density [reset|DENSITY]
该命令的用法类似于wm size 命令,作用是读取、设置或者重置LCD的density值。density值即LCD的ppi.
3、 wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]
该命令用来设置、重置LCD的显示区域。四个参数分别是显示边缘距离LCD左、上、右、下的像素数。例如,对于分辨率为540x960的屏幕,通过执行 命令wm overscan 0,0,0,420可将显示区域限定在一个540x540的矩形框里。
了解wm可以解决LCD图标大小显示不正常的问题。但是这些设置都是临时的,适合于调试来确定问题和解决办法。永久性的修改可以参照以下两个办法(均在高通平台下):
法一:
2》 adb root //提示read only filysystem时执行此命令获取root权限,
adb remount
adb pull /system/build.prop D:\
在build.prop末尾添加一行 ro.sf.lcd_density=240
adb push D:\build.prop /system/
adb shell
cd /system/
chmod 644 build.prop 没有修改权限将导致手机起不来
法二: 直接修改system.prop
Y:\xxxx\device\qcom\xxxx\system.prop
ro.sf.lcd_density=240 改这个值,然后重新编译system.img
LCD电极读数如何看出单片机的接口技术?
通过测量仪表拾取被测信号是单片机前向通道设计中常用的数据采集方式。通常,接口电路从仪表电路中取得相关的模拟信号,经过A/D转换或V/F转换送入单片机;或者取得一个频率信号,经整形后送入单片机。然而,有些测量仪表电路中可能找不到这样的信号。以电容式压力传感器血压计为例,尽管从其振荡电路中可以取得一个与压强成线性关系的频率信号,送入单片机测得压强,但这个压强并不是所要拾取的收缩压、舒张压和心率;面普通的血压计又没有智能仪表那样的通信接口与单片机通信。显然,要想通过这样的仪表拾取被测信号只有直接读取其显示屏的读数了。
本文以一个全自动血压计为例,介绍将LCD显示器读数读入单片机的接口电路。该血压计显示器为61/2位段式LCD显示器,3位显示收缩压,3位显示舒张压。l/2位在两组数码中间,显示4个指示符号。
1 LCD的电极连接结构和工作波形
1.1 LCD的电极连接结构
图1为血压计LCD的电极连接结构及等效电路。其中,图l(a)为公共电极连接排列,图l(b)为段电极连接排列。它共有4个公共电极COM0~COM3,每位数码各有2个段电极Sx-0、Sx-1,其等效电路为一个4行×2列的矩阵,如图l(c)所示。
1.2 LCD的工作波形
用双踪示波器观察血压计LCD的工作波形,如图2所示。它采用时分割驱动法驱动,偏比1/3,占空比l/4,B型。公共电极COM0~COM3的信号波形始终保持不变,段电极Sx-0、Sx-1信号波形随显示数字的变化而变化。图2中的Sx-1、Sx-1波形为显示数字“O”时的工作波形。
由图2可知,不考虑信号的直流分量,所有波形的前半周期t1~t4与后半周期t5~t8大小相等,极性相反。COM0~COM3信号电压依次在t1~t4四个时间内达到峰值。时间t1为第1行上f、a两段的扫描时间,公共电极COM0,Sx-0为f段的段电极,Sx-1为a段的段电极。在t1时间内,f段上的电压COM0-Sx-0=V0,a段上的电压COM0-Sx-1=V0,f、a两段均处于选择状态,显示。其余各段在其扫描时间内的电压和显示状态如表1所列。7段中只有g段上的电压为V0/3,处于非选择状态,不显示。其余6段均处于选择状态,显示。因此,显示数字“O”。
由此可见,只要依次检查在t1~t4四个时间内f、a、g、b、e、c、d各段上的电压COMx-Sx-y(x=0,1,…,6;y=O,1)是V0还是V0/3即可获得LCD各位数码的字形码,然后再将字形码转换为测量结果。
2 单片机读数接口电路
图3为根据上述工作原理设计的805l单片机读数接口电路,图中,LCD为血压计的液晶显示器,6位数码从右到左依次编号O~5,中间半位的编号为6。它有13个段电极、4个COM电极,GND为血压计的接地端。805l的PC口为805l的扩展并行口。
2.1 显示状态读取电路
由CD4067、CD3405l、LM324(UA、UB)组成显示状态读取电路,读取LCD数码各段的显示状态。CD41367多路模拟开关从LCD的13个段电极信号中选择一路Sx-x输出到LM324(UA)的反相输入端2脚。CD405l多路模拟开关从LCD的4个COM信号中选择一路COMx输出到LM321(UA)的同相输入端3脚。LM324(UA)接成模拟减法器,由1脚输出信号COMx-Sx-x。UB作电压比较器,参考电压VR大小由电位器W1调节于V0/3~V0之间,将段电压COMx-Sx-x与VR比较。比较结果为该段的显示状态,高电平说明该段显示,低电平不显示。显示状态送入8051的P1.6脚。R1、C1组成RC滤波器,滤除高频干扰。
比如,要读取0号数码的a段显示状态,由图1知,0号数码a段的段电极是S0-1,公共电极是COM0。由程序控制在t1时间内令PC1PC0=00,使CD405l选择COM0,令PC5~PC2=0001,使CD4067选择S0-1,COM0和S0-1两信号电压经UA减法器相减,然后再经UB电压比较后得到a段的显示状态,8051从P1.6脚读取此最示状态。
2.2 INT0中断信号产生电路
UC和UD组成INT0中断信号产生电路。UC接成电压跟随器,减小电路对COM0信号的影响。R2、C2组成RC滤波器,滤除高频干扰。UD作电压比较器,参考电压VR加在同相输入端,VR大小由电位器W2调节于2V0/3~V0。电压比较器将COM0信号转换为INT0负脉冲信号,工作波形如图4所示。负脉冲的下降沿为LCD驱动信号周期T的起始时刻。此负脉冲接至8051的INT0脚,在负脉冲的下降沿产生外部中断0。
3 程序设计
启用外部中断0和定时器T0,以中断方式读取LCD各位数码的字形码。主程序以查询方式读取该字形码,然后经过读数校验、字形码到BCD码的译码、读数识别等,将字形码转换为读数。
3.1 读取字形码
通过外部中断O和定时器T0以中断方式读取LCD某一编号数码的字形码。如图5所示,INT0负脉冲在周期T的起始时刻引起外部中断O,由INT0中断服务程序启动T0定时器,依次在t1~t4半个周期内的f、a、g、b、e、c、d各时刻产生T0中断,读取各段的显示状态,获得字形码。T0定时器设为工作方式2,自动再装入定时时间为T/16,初始定时时间为T/32。INT0和T0中断服务程序流程如图6所示。
其中,PC口数据格式:PC5~PC3为要读取的那位LCD数码编号,PC2为段电极编号,PC1PC0为COM电极编号。
3.2 字形码转换
主程序以查询方式分别读取由中断服务程序采集的各位数码的字形码,查表将字形码转换为BCD码,再将几位数码的BCD码转变为数值。
3.3 读数校验
读取一位数码的字形码需要1个周期T(实际只用前半个周期),经测量,T=16.318ms。读取全部位数码至少需要用7个周期,约114ms。考虑到在单片机读数的过程中,LCD的读数有可能发生变化而导致读数错误,程序中采用连续两次读数的方法来校验读数的正确性。如果连续两次读数相同,则说明读数是正确的;如果连续两次读数不同,则说明读数可能是错误的,应重新读数。
3.4 读数识别
血压计显示的内容除了收缩压、舒张压和心率以外还有充气、放气时的瞬时压强以及一些状态信息。LCD中间的半位(6号)用于显示待机(Reay to measure)、充气(CUFF Inf1ating)、放气(CUFF Deflating)以及更换电池(Replace Battcries)四个符号。另外,4号数码显示“E”时表示测量出错,显示“P”时,右边3位(0~2号)数码显示的数字为心率。左右两边显示内容均是数字时,左边3位(3~5号)是收缩压,右边3位是舒张压.血压与心率交替显示。主程序通过这些信息来识别LCD所显示的内容。
4 结论
使用此接口电路采集数据,不必考虑与拾取信号的测量相关的细节问题和技术规范。这样,当拾取信号的测量比较复杂时,可以有效地缩短开发周期。同时,它也不存在二次A/D转换或V/F转换方法所存在的单片机采集数据与仪表读数不完全一致的问题。
程序设计用1个驱动信号周期读取1位数码,这样的读取速度对于读数变化不是很快的血压计来说已经足够了。如果测量仪表LCD读数变化很快,可以修改编程,在1个周期内同时读取几位数码,甚至修改电路设计,将后半周期也用于进行读数,实现在1个信号周期内读取所有数码。
评论
查看更多