2011-06-22 22:18:12

自己根据ili9325的规格书编写驱动。发现LCD屏没显示。于是怀疑是某些寄存器设置错误。要调试的话最好还是先熟悉寄存器的作用,调试的时候只要看到现象就能分析了。否则真是摸不到头脑。于是乎,对ili9325做了如下寄存器研究学习。视频太大了,就不上传了。

1,Driver Output Control (R01h)

1)相关理论:

LCD显示器采用按行按列的有源矩阵驱动方式,行线都是接在像素NMOS管的栅极(gate),列线接在NMOS管的源极(source)。在LCD模块中,行线和列线是分开来驱动的,驱动行线的电路叫:gate-driver ,驱动列线的电路叫:source driver。

2)规格书寄存器解释:

gate-driver相当与像素点开关,source driver用来选择颜色源,是红色绿色还是黄色。

如果SM,GS为0,那么像素点的开关是从G1到G320.那么开关打开的方向是从G1开始的,那么颜色信号源当然也从S1开始。所以SS=0.

我买2.4寸屏的时候提供的inti代码中SS为1,SM,GS分别为0和1。根据我上面的理论基础。看下它的配置是否正确。SM,GS为01说明像素点开关是从G320开始的,那么对应的颜色信号源应该从S720开始,即SS要为1,理论验证正确。

那么很多方法都可以设置,他们的效果又如何呢?这就简单了,规格书写的很清楚。左上角第1点是G320,后下角最后一点是1,根据SS,SM,GS都为0来配置的话。图像应该从右下角开始扫描。

而我厂家提供的代码应该是从左上角开始扫描的。

3)实际配置验证

验证正确。

扩展实验。

因为还有2种模式,于是我把SM设置为1,GM设置为0,过程不正常。于是把SS,SM设置为0,GS设置为1,效果不正常,但是最终停止的结果还是对的。

SM扫描枪设置为垂直方向,但是AM数据写入地址还是水平方向,那么显示过程就不太正常。我把AM设置为1,则显示是垂直扫描。

小结:说明与此寄存器关联的寄存器还有Entry Mode (R03h)寄存器。AM的方向和SM的方向一致就没什么大问题了。

2, Gate Scan Control (R60h)

1)规格书寄存器解释:SCN[5:0]

上面的R01h寄存器与此寄存器有关,从R01h寄存器看,像素显示为位置不是从G1开始就是从G320开始。我能不能配置让它从其它像素点开始显示呢。SCN[5:0]配置一下就可以实现。SM=0,GS=1的情况下SCN[5:0]配置为0Ah,则像素点从G240开始扫描。

2)实际配置验证

验证正确,确实从G240行开始显示的。

但是我本来还认为G320到G240这些行就不显示了。结果还有显示。参看我拍的视频6.

小结:按照效果来理解的话,就是GRAM中0000地址的数据分配到了LCD的物理地址的G240开始。如果不设置SCN,则GRAM中0000地址的数据是分配到LCD的G320位置即首行。

1)规格书寄存器解释:NL[5:0]

既然可以设置从哪个像素开始启动。那么我的图片很小,不需要开320个行,我只需要240 行有驱动电压,让我显示一个小图片就可以了。于是设置R61h的NL[5:0]= 1D即可。NL用来设置扫描范围为240行。

2)实际配置验证

验证正确,看视频7.

小结:以后看到按顺序的错位显示,可能就是Gate开关地址不正确。

3, Gate Scan Control (R61h)

1)相关理论NDL

灰度与像素的关系

  一般,像素值量化后用一个字节(8b)来表示。如把有黑-灰-白连续变化的灰度值量化为256个灰度级,灰度值的范围为0~255,表示亮度从深到浅,对应图像中的颜色为从黑到白。黑白照片包含了黑白之间的所有的灰度色调,每个像素值都是介于黑色和白色之间的256种灰度中的一种。那么从表象来看灰度到最大值时,我也可以理解为反色。我现在在word中打出的字是黑色的。当我选中它,则变成白色。

2)规格书寄存器解释:NDL

V63,V62,V61……V2,V1,V0代表灰度等级。它其实是提供给gamma的校准电压。代表着64种电压强度。那么是不是代表64种灰度呢?这点理解的比较模糊。NDL位能确定V63是电压最强端还是V0端为电压最强端。但是我认为只有这一个寄存器没法进行什么验证,应该还有一个寄存器配置显示的强度选择。如使用V62强度,或V3强度,那么改变NDL则LCD显示的颜色应该呈现反色。

3)实际配置看效果

验证失败,仔细看了规格书,原来配置的是non-display area.所以我无法看效果。

1)规格书寄存器解释:REV

此位没搞明白。

2)实际配置看效果

小结:原来我本来以为NDL是反色效果,结果REV=0才是反色效果。参考我的视频8。

1)规格书寄存器解释:VLE

此寄存器是设置垂直滚屏用的开关。VLE垂直滚屏的话,要配合R62的VL[8:0]使用。

4, Gate Scan Control (R6Ah)

1)规格书寄存器解释:

VL[8:0]主要是设置滚屏行数。

当VLE bit设置为1,再设置VL[8:0]=160,则垂直滚动的行数为160.从LCD的物理第1行开始垂直滚动160行。现在问题是,这滚动的速度是否很快,我肉眼能看见吗?滚动完成后,那么低161行到320行会显示什么呢?

2)实际配置验证

验证失败,我已经把扫描方向改成从右到左,但没看出它垂直滚屏。

小结:VLE及VL[8:0]一定还和其他寄存器有关。目前不知道。

5,Horizontal and Vertical RAM Address Position (R50h, R51h, R52h, R53h)

1)规格书寄存器解释:

R50,R51,R52,R53是设置地址范围用的寄存器。比较好理解。因为你要送一个RGB数据到LCD某点显示的话,也要先写地址。那么着四个寄存器就是让你确定一个LCD显示区域的范围。R50为行开始地址,R51为行结束地址,R52为列开始地址,R53为列结束地址。

突然想到一个问题,我如果显示地址一个显示点,给它的地址超出了如上定义的范围,它应该是不会显示的哦
2)实际配置验证

验证成功。参考视频9

扩展实验。看了视频9,发现240行下显示为花屏,因为下我有颜色输出的最大行就是240,至于为什么240行之后会花屏,因为,我gate开着。所以source还是会送数据来显示。那么我应该把240行以后的gate关掉,那么应该只留白色背光了。

验证成功。参考视频10。

小结:在gate打开的情况下。设置LCD显示的范围应该要小于gate的范围。如果LCD显示范围设置的比gate打开的范围大,那么也是不会有显示的。因为gate没开,RGB数据不可能从source信号传出。

6,LCD Driving Wave Control (R02h)

1)相关理论

LCD 的 VCOM 就是所有笔划或象素背后的公共电极. 因为 LCD 的每一个显示点必须加正负交替的电压才能显示, 所以要在 VCOM 上加一个一定频率的方波, 显示为 "亮" 的笔划或象素上加与其反相的波形, 形成交替电压, 不显示的笔划或象素加与之同相的波形, 相当于加 0 电压.

如果一直显示禁止的图像,则液晶电极上的电压就会一直不变。待撤销电压后,液晶很难恢复原状(为什么呢?暂时不知道。)容易造成液晶损坏。为解决这一方法,就是改变液晶电压的极性,VCOMH和VCOML一起改变。但是电压还是有的,所以图像任然显示。但是液晶就不那么容易损坏了。改变极性有帧方式,行方式,点方式。帧方式的屏幕闪烁比较明显,一般采用行方式。

2)规格书寄存器解释:

B/C是设置帧或行转换。

EOR与B/C都设置为1,则为行转换。

3)实际配置验证

设置为帧转换看效果。看不出来哦。

7,Entry Mode (R03h)

1)规格书寄存器解释:AM,I/D[1:0]

AM控制GRAM地址更新的方向是行还是列。

I/D[1:0]控制地址计数器是增加还是减小1。

这2个显示地址方向配置加上R50h ~R53h的显示地址范围配置。则可以确定扫描及显示的方向及LCD显示内容的物理位置。

更改GRAM地址方向应该比较简单,但是是否一定要配置电压扫描的方向呢?我认为是要不需要配合的,但是配置的话,显示屏的显示效果应该会更好。比如GRAM为逐列扫描,而Gate电压的扫描方式为逐行,效果可能会不好。当然也可能根本没影响。因为他们是有先后顺序的。这点不太清楚。

2)实际配置验证和看效果

Gate扫描的方向和AM地址更新方向没什么太大关系,只是我还没看出来。只是在配置I/D的时候发现与规格书不符。I/D为11时与I/D为10时显示的扫描方向与实际相反。

小结,AM是SM配置有点关系的,配置I/D为11时与I/D为10的时候发现与规格书不符

1)规格书寄存器解释:ORG

Org为1,则能根据I/D设置的方向自动更新地址。 但是首地址必须为”0x0000”.

ORG为0,则说明写入特殊地址。I/D的配置不起作用。另外,如果不用GRAM,则ORG要配置为0

ORG设置为0,应该只显示一个像素点。但是结果验证失败,也搞不清楚ORG位没起作用啊。

1)规格书寄存器解释:BGR

转换RGB写入GRAM地址的顺序。如果改下RGB的顺序,则显示的图像应该花屏了。或者说颜色改了。R值变成了B值,B的值变成了R的值。如果我用调用红色刷屏,改变RGB,应该显示的是蓝色刷屏。之前刷屏的顺序是红绿蓝,那么RGB顺序改后,刷屏顺序应该是蓝绿红。

2)实际配置验证

验证正确。参看视频11.

1)规格书寄存器解释:TRI

MCU接口与LCD 内部RAM接口模式转换,配合DFM使用。规格书写的很清楚了。再此我不写了。要验证很简单,TRI改成1,那么MCU的RGB数据传输到LCD的内容RAM后就变样,显示出来一定是花屏显示不正常。

2)实际配置验证

验证正确,但是没想到它还蛮有规律的。参看视频12.

8,Resizing Control Register (R04h)

1)规格书寄存器解释:

这个寄存器比较简单,主要设置RSZ[1:0]缩小多少倍,RCH[1:0]水平剩余的像素,RCV[1:0]垂直剩余的像素。公式可以参考ili9325规格书的P105页。至于剩余的像素到底有什么用,现在还不清楚。显示我可以尝试调整图像大小。

2)实际配置验证

验证正确。看视频13.不过还有一个要注意的,就是同时也要设置扫描地址的范围即要设置R52和R53.否则,效果即为视频14.

9,Display Control 2 (R08h)

1)规格书寄存器解释:

设置前肩和后肩的clk值。参见ili9325规格书P35页。本来以为只适用于RGB接口的VSYNC信号。现在再看看规格书中I80 System
Interface Operation Mode BP ≥ 2 lines FP ≥ 2 lines FP +BP ≤ 16 lines。说明我用的i80接口也要配置R08h寄存器的。我尝试一下在LCD初始化中删除对此寄存器的设置看看效果。

2)实际配置验证

验证正确。注销此寄存器配置,也没问题。

10,Display Control 3 (R09h)

1)规格书寄存器解释:

刚才说过Vcom做周期性的变化对屏有好处(为什么呢?)。对不显示数据的地方(是指GRAM设定的范围外的地方吗?)则Vcom也做周期性变化的话,那么周期值是多少呢,通过ISC[3:0]设置。PTG[1:0]在不显示图像的区域设置Vcom扫描模式。PTS[2:0]设置源极不显示图像区的电压等级。当设置为1,可以不适用灰阶电压,可以降低功耗。既然是在不显示的区域设置这些模式,我无法通过肉眼观看来验证,要我测量功耗,我现在也不会。这个就不验证了。

11,Display Control 4 (R0Ah)

1)相关理论

好在很多LCM驱动芯片都有一个Fmark脚,用来与主控同步,当Fmark发出一个信号给主控时,主控才开始写一帧数据,这样就可以保证两边同步。

2)规格书寄存器解释:

FMI[2:0] 根据显示数据重写周期和数据传输速率来设置FMARK信号的输出间隔。 FMARKOE 当FMARKOE=1, 由FMI成像[2:0]位设置输出间隔下,ILI9325开始输出FMARK信号。不过FMARK没与MCU相互有引脚连接,这个寄存器没用吧!

2)实际配置验证

验证正确,注销这个寄存器,也没问题。

12,RGB Display Interface Control 1
(R0Ch)

1)规格书寄存器解释:

我用的是i8080接口,作用此寄存器我用不到的。此寄存器主要是设置与RGB接口相关的。

2)实际配置验证

验证正确,注销这个寄存器,也没问题。

13,Frame Marker Position (R0Dh)

1)规格书寄存器解释:

这个比较简单,设置输出信号同步的信号位置。就是在BP后隔多少帧,则MCU可以向LCD传输数据。但是我认为这是针对RGB接口协议的,1)规格书寄存器解释:

这个比较简单,设置输出信号同步的信号位置我用的i8080接口协议,应该不用设置这个寄存器。

2)实际配置验证

验证正确,注销这个寄存器,也没问题。

14,RGB Display Interface Control 2
(R0Fh)

1)规格书寄存器解释:

这个比较简单,RGB信号有效时的极性。我用的i8080接口协议,应该不用设置这个寄存器。

2)实际配置验证

验证正确,注销这个寄存器,也没问题。

15,GRAM Horizontal/Vertical Address
Set (R20h, R21h)

1)规格书寄存器解释:

这个比较简单,设置水平和垂直的GRAM地址初值。然后配置AM和I/D则在此地址基础上地址会自动更新。如果设置的值不是0,而是00和1EF,那么17’h00000 ~
17’h000EF段中的RGB数据就不会变化。因为不会写RGB到17’h00000 ~ 17’h000EF段中了。

2)实际配置验证

验证正确,参看视频15.

16,Gamma Control (R30h ~ R3Dh)

相关理论

Gamma值的修正,可以改变画面明暗,增加对比。动态Gamma控制则根据每个画面的不同动态修正Gamma值。通常在一个黑暗的画面中,很难分辨出细节,若把全部亮度提升,虽然看得到暗处,但是又会造成失真,例如蓝天的部分就会褪色。因此改变局部的Gamma(γ)曲线,即可修正局部的亮度,增加对比

1)规格书寄存器解释:

Gamma值设置。参见ili9325规格书P90,具体也不知道怎么设置。

但是我知道是用于图像效果微调整的。

实验证明,把它们注销也没问题。

17,Partial Image 1 Display Position
(R80h)

Partial Image 1
RAM Start/End Address (R81h, R82h)

Partial Image 2
Display Position (R83h)

Partial Image 2
RAM Start/End Address (R84h, R85h)

1)规格书寄存器解释:

以上这几个寄存器用来设置显示部分图像的LCD屏显示位置,和GRAM中显示内容的起始地址。具体含义可以参考ili9325提供的实例P102-P103页。

18,Panel Interface Control 1(R90h)

1)规格书寄存器解释:

设置行clk内部时钟,不设置应该不会有数据进GRAM,那么就没显示。

2)实际配置验证

注销这个寄存器,看效果。

验证结果为注销也可以。

19,Panel Interface Control 2 (R92h)

1)规格书寄存器解释:

设置行gate内部时钟在非显示区,不设置应该不会开gate。降低功耗。

20,Panel Interface Control 4 (R95h)

1)规格书寄存器解释:

设置RGB接口的clk。我是i8080接口不用的。

21, Power Control
1 (R10h)

1)相关理论

先说明一下LCM中的电源电路结构,包括内置电源AD/DC转换电路,Gamma校正电路(gammat调节+灰度电压产生电路),列驱动电路(Source Driver),行驱动电路(Gate Driver),

关于电压,参考ili9325规格书P101页的电压表。也可以参看P12页的电压pin脚说明

说明一下VGH和VGL提供Gate Driver。VGAM1OUT提供Source Driver电压,VCOMH和VCOML提供LCD屏的公共电压。VLCD即DDVDH提供Source driver和Vcom Driver的电压,VCL,提供VcomL Driver的电压。另外这些电压直接有约束关系。(DDVDH – VREG1OUT
) > 0.5V, (VCOML1 – VCL) > 0.5V, (VCOML2 – VCL) > 0.5V。

2)规格书寄存器解释:SLP,STB,DSTB,AP[2:0]

以上4种控制为都是为了节约功耗而设置的。SLP:睡眠模式,STB:待命模式,DSTB:深度待命模式。AP[2:0],调整LCD电源电路中的电流。暂时我不去修改它们的配置。

1)规格书寄存器解释:SAP,APE

以上2种配置主要起到开关作用。SAP:Source driver的开关。APE:PowerSupply的开关。

1)规格书寄存器解释:BT[3:0]

设置升压电路的因数。

21, Power Control
2 (R11h)

1)规格书寄存器解释:

VC[2:0]:设置基准参考电压VCi1与输入电压Vci的比例因子。

DC0[2:0]:设置升压电路1的频率。不太清楚是哪个电路。

DC1[2:0]:设置升压电路2的频率。不太清楚是哪个电路。

22,Power Control 3 (R12h)

1)规格书寄存器解释:

VRH[3:0]:设置Vci与VREG1OUT的比例因子。可以通过Vci确定VREG1OUT。

VCIRE:配置VRH[3:0]选择使用内部或是外部电压*比例因子=VREG1OUT电压

PON:行驱动电压开关。

23,Power Control 4 (R13h)

1)规格书寄存器解释:

VDV[4:0]:VREG1OUT与Vcom比例因数。主要是通过VREG1OUT设置Vcom的电压值。

24,Power Control 7 (R29h)

1)规格书寄存器解释:

设置内部 VcomH 电压。

看了它的出厂配置代码。Vci1=Vci=3.3v,DDVDH=6.6V,VCL=-3.3V.VGH=19.8V,VGL=-16.5V,VCOMH=4V,Vcom=1.04*1.875=5.07V,VREG1OUT= 4.875V;  VcomL怎么没设置啊,我认为VcomL=-Vcom/2=-2.5V。根据规格书P101的电源范围。发现VGH设置偏高。DDVDH偏高。根据P106页最大值设定范围,也发现这2个值偏高。

我准备把Vci1基准电压降低到0.85 x Vci(3.3V)=2.8V,修改VC[2:0]=2.

DDVDH=5.6V,VCL=-2.8V.VGH=16.8V,VGL=-14V,VREG1OUT用的是内部基准2.5V,所以与VREG1OUT有关的电压都不变。Vcom=1.04*1.875=5.07V,VREG1OUT= 4.875V。不过VcomL的值我不确定。

2)实际配置验证

验证成功,我设置的Vci与Vci1的比例因数0.85也ok。

25,Frame Rate and Color Control
(R2Bh)

每秒刷屏的数量。

2)实际配置验证

本来想尝试加快刷屏。结果已经设置的是最快的了R2Bh=0xD,于是我设置为0. 40帧/s然后就发现图像抖的厉害。不过这个寄存器主要针对动态图像的。如做摄像头+LCD显示的话就比较注意刷屏率了。于是我把刷屏率这个寄存器配置注销掉,发现它的显示速度稍微慢点。估计它是有默认值得。

会不会很多寄存器都有默认值啊。我要尝试批量注销寄存器配置代码。我发现只要power on时序对基本就ok了。

26, Display
Control 1 (R07h)

略。

Ili9325大多数的寄存器我都解释了一下,并且有一些寄存器还做了实验。发现这些寄存器越看越简单。为什么这么说。我现在就想学打太极一样。已经把所有的招式都忘了。而学会的是融汇贯通。

小结一下,需要配置的必要内容。

1,  电压值要配置,并且power on。

2,  内部晶振值要配置。各各driver 要打开。如Gate不打开,则不会有显示。

3,  GRAM地址要配置。

4,  显示范围要配置。

5,  显示方向要配置,包括Gate驱动扫描的方向和Source驱动的数据进入方向。

Ok。研究了它的配置数据,即熟悉的各各寄存器的作用。我将根据P101页的PowerSupply配置流程来写我的初始化程序。

附录:

视频对应的配置说明

1,  在出厂配置

2,  在出厂配置的基础上,设置SS=0,SM=0,GS=0,AM=0,I/D=3

3,  在出厂配置的基础上,设置SS=0,SM=1,GS=0,AM=0,I/D=3

4,  在出厂配置的基础上,设置SS=0,SM=1,GS=0,AM=1,I/D=3

5,  在出厂配置的基础上,设置SS=1,SM=0,GS=1,AM=0,I/D=1

6,  在出厂配置的基础上,设置SCN=0x0A

7,  在出厂配置的基础上,设置SCN=0x0A,NL=0x1D

8,  在出厂配置的基础上,设置REV=0

9,  在出厂配置的基础上,设置VEA=0xEF

10, 在出厂配置的基础上,设置VEA=0xEF,NL=0x1D

11, 在出厂配置的基础上,设置BGR=0

12, 在出厂配置的基础上,设置TRI=1

13, 在出厂配置的基础上,设置RSZ=1,R52h=240/2,R53h=320/2

14, 在出厂配置的基础上,设置RSZ=0

15, 在出厂配置的基础上,设置R20h=0xEF,R21h=0x5

16, 在出厂配置的基础上,设置R2Bh=0

ili9325--LCD寄存器配置研究的更多相关文章

  1. 摄像头驱动OV7725学习笔记连载(二):0V7725 SCCB时序的实现之寄存器配置

    上一篇博客主要介绍了OV7725的电气特性以及SCCB接口的时序和输出一帧图像的时序图以及数据的拼接.输出一帧图像与输出时钟PCLK有关. 上图是OV7725实现的整体框架,有点丑.FPGA描述SCC ...

  2. 关于AXI_Quad_SPI的寄存器配置

    关于AXI_Quad_SPI的寄存器配置 1.核初始化配置 首先是: 40:0000_000A 1C:8000_0000 28:0000_0004 2.命令与dummy_data 60:000001E ...

  3. STM8串口初始化寄存器配置

    //库函数配置 UART1_DeInit(); UART1_Init((u32)1000000, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, \ UART1_PARI ...

  4. stm8s + si4463 寄存器配置

    /***********************************************函 数: main功 能: 程序入口输 入: /输 出: /描 述: /**************** ...

  5. 裸机LCD驱动配置

    横屏4.3寸LCD为480*272(行:480个像素点        列:272个行) 1.1  LCD原理图 : Pin1:Von  电源正(这里由硬件自动控制) Pin2:VM/VDEN 数据使能 ...

  6. Nagios学习实践系列——配置研究[监控当前服务器]

    其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...

  7. Nginx安全配置研究

    x00 测试环境 ? 1 2 3 操作系统:CentOS6.5 Web服务器:Nginx1.4.6 Php版本:Php5.4.26 0x01 Nginx介绍 nginx本身不能处理PHP,它只是个we ...

  8. 与或左移右移操作在ARM寄存器配置中的作用

    逻辑运算: 与运算&:与0清零  清零用与运算 或运算 |:或1置一  置一用或运算 异或 ^:不同为1  /*****单个寄存器清零置一*************************** ...

  9. STM32的操作过程,寄存器配置与调试过程(转载)

    很多学习stm32的,为什么学习stm32他也不知道,我们所知道的就是各个论坛讨论stm32的很多,而我们很多人之所以学习stm32是很多的淘宝卖家做了大量的图片文字宣传,于是我们经不住诱惑就买了板子 ...

随机推荐

  1. 根据xlsx模板生成excel数据文件发送邮件代码

    package mail; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExcept ...

  2. Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)

    系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...

  3. linux的shadow文件

    在<Python绝技>这本书的第一个小程序首先展示了针对与unix系统中shadow文件密码的暴力破解的能力,因为之前只是对shadow文件停留在保存了用户密码的阶段,但并没有详细研究,所 ...

  4. N - Asteroids

    Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N g ...

  5. 实现Ajax异步的layui分页

    https://www.e-learn.cn/content/java/1084522

  6. vue3版本到vue2版本的桥接工具

    vue2的命令可以正常使用.

  7. js的运用1

    1.parselnt() 2.parsefloat() 遇到第一个字节是非数字就结束了. 3.      var   a="hello world" a这个变量是字符串了,对于里面 ...

  8. python学习之旅(三)

    Python基础知识(2):运算符 一.算术运算符 加 +,减 -,乘 *,除 /,幂 **,求余 %,取整 // 二.成员运算符 in,not in 判断一个字符是否在字符串中 name = &qu ...

  9. ExecuteExcel4Macro (宏函数)使用说明

    用ExecuteExcel4Macro从未打开的Excel工作簿中读取数据(转载) 从另外一个未打开的Excel文件中读取数据的函数 下面这个函数调用XLM宏从未打开的工作簿中读取数据. *注意:   ...

  10. xcode工程编译错误之iOS解决CUICatalog: Invalid asset name supplied问题

    [问题分析]: 这个问题其实是老问题,产生原因就是因为在使用的时候 [UIImage imageNamed:]时,图片不存在或者传入的图片名为nil. [解决方法]: 添加一个系统断点,来判断如果图片 ...