mini2440硬件篇之LCD

发布者:Qingliu2022最新更新时间:2016-12-01 来源: eefocus关键字:mini2440  硬件篇  LCD 手机看文章 扫描二维码
随时随地手机看文章

1. 硬件原理

要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440 等。通过LCD控制器就可以产生LCD驱动器所需要的控制信号来控制STN/TFT屏了。嵌入式LCD主要以薄膜式晶体管型TFT为主流。TFT LCD 特性:

支持每像素1、2、4、8位 调色显示。

支持每像素16位、24位真彩TFT LCD.

支持最大1600万色(24位每像素模式)TFT LCD.

典型实际分辨率:640x480,320x240,160*160

最大虚拟分辨率:4M 字节.

最大虚拟分辨率(65536色) 2048x1024.

下图给出了TFT的典型时序图。

 

我们先来理解下面引脚有寄存器中相关参数的意义吧

外部引脚信号:

VSYNC: 帧同步信号,表示扫描1帧的开始,一帧就是LCD显示的一个画面。

HSYNC: 行同步信号,表示扫描1行的开始。

VDEN:数据使能信号。

VD[23:0] : LCD像素数据输出端口。

VCLK:像素时钟信号。

寄存器参数:

VSPW:帧同步信号的脉宽,单位为1行(Line)的时间。

VFPD: 帧同步信号的前肩,单位为1行(Line)的时间。

VBPD: 帧同步信号的后肩,单位为1行(Line)的时间。

LINEVAL :帧显示尺寸-1,即屏行宽-1,

HBPD:行同步信号的后肩,单位为1VCLK的时间。

HFPD:行同步信号的前肩,单位为1VCLK的时间。

HSPW:行同步信号的脉宽,单位为1VCLK的时间。

HOZVAL:行显示尺寸-1,即屏列宽-1,

 

2. 芯片手册

3. mini2440电路图

4. S3C2440寄存器

要想正确使用LCD,必须注意两点:1、时序;2、显示缓存区。

4.1. 时序

LCD一般需要三个时序信号:VSYNC、HSYNC和VCLK。VSYNC是垂直同步信号,在每进行一个帧(即一个屏)的扫描之前,该信号就有效一次,由该信号可以确定LCD的场频,即每秒屏幕刷新的次数(单位Hz)。HSYNC是水平同步信号,在每进行一行的扫描之前,该信号就有效一次,由该信号可以确定LCD的行频,即每秒屏幕从左到右扫描一行的次数(单位Hz)。VCLK是像素时钟信号。s3c2440处理LCD的时钟源是HCLK,通过寄存器LCDCON1中的CLKVAL可以调整VCLK频率大小,它的公式为:

VCLK=HCLK÷[(CLKVAL+1)×2]

例如,HCLK的频率为100MHz,要想驱动像素时钟信号为6.4MHz的LCD屏,则通过上式计算CLKVAL值,结果CLKVAL为6.8,取整后(值为6)放入寄存器LCDCON1中相应的位置即可。由于CLKVAL进行了取整,因此我们把取整后的值代入上式,重新计算VCLK,得到VCLK=7.1MHz。

按理说,对于一个已知尺寸(即水平显示尺寸HOZVAL和垂直显示尺寸LINEVAL已知)的LCD屏,只要确定了VCLK值,行频和场频就应该知道了。但这样还不行的,因为在每一帧时钟信号中,还会有一些与屏显示无关的时钟出现,这就给确定行频和场频带来了一定的复杂性。如在HSYNC信号先后会有水平同步信号前肩(HFPD)和水平同步信号后肩(HBPD)出现,在VSYNC信号先后会有垂直同步信号前肩(VFPD)和垂直同步信号后肩(VBPD)出现,在这些信号时序内,不会有有效像素信号出现,另外HSYNC和VSYNC信号有效时,其电平要保持一定的时间,它们分别叫做水平同步信号脉宽HSPW和垂直同步信号脉宽VSPW,这段时间也不能有像素信号。因此计算行频和场频时,一定要包括这些信号。HBPD、HFPD和HSPW的单位是一个VCLK的时间,而VSPW、VFPD和VBPD的单位是扫描一行所用的时间。在s3c2440中,所有的这些信号(VSPW、VFPD、VBPD、LINEVAL、HBPD、HFPD、HSPW和HOZVAL)都是实际值减1的结果。这些值是通过寄存器LCDCON2、LCDCON3和LCDCON4来配置,只要把这些值配置成与所要驱动的LCD中相关内容的数据一致即可。例如,我们所要显示的LCD屏大小为320×240,因此HOZVAL=320-1,LINEVAL=240-1。水平同步信号的脉宽、前肩和后肩分别为30、20和38,则HSPW=30-1,HFPD=20-1,HBPD=38-1;垂直同步信号的脉宽、前肩和后肩分别为3、12和15,则VSPW=3-1,VFPD=12-1,VBPD=15-1。

下面我们就具体计算一下行频(HSF)和场频(VSF):

HSF=VCLK÷[(HSPW+1)+(HSPD+1)+(HFPD+1)+(HOZVAL+1)]

       =7.1÷408=17.5kHz

VSF=HSF÷[(VSPW+1)+(VBPD+1)+(VFPD+1)+(LINEVAL+1)]

       =17.5÷270=64.8Hz

在有些情况下,s3c2440的LCD时钟信号的默认极性与所控制的LCD时钟信号的极性相反,这时可以通过寄存器LCDCON5的相关位来改变某些时钟信号的极性。

4.2. 显示缓存区

只要把所要显示的数据放入显示缓存区内,就可以在屏幕上呈现内容。该缓存区是我们自己编程时开辟的一段内存区。一般我们是通过定义一个与屏幕尺寸大小相同的二维数组来开辟该空间的,这样控制屏幕内容会方便一些,如当屏幕的尺寸为320×240时,可以定义该缓存区为LCD_BUFFER[240][320]。由于s3c2440支持16位和24位的非调色板真彩色的TFT型LCD模式,而24位颜色模式是用32位数据来表示的,所以前面定义的那个二维数据的数据类型应该是半字整型或全字整型的。例如,在24位颜色模式下,我们想要在尺寸大小为320×240屏幕的中心处设置为白色像素,则:LCD_BUFFER[120][160]=0xffffffff。

在s3c2440中,寄存器LCDSADDR1和LCDSADDR2用于设置显示缓存区,即把我们定义的那个二维数组告诉s3c2440。其中LCDBANK的9位数据指定LCD的BANK,即显示缓存区的第30位到第22位地址;LCDBASEU的21位数据指定了LCD的基址,即显示缓存区开始地址的第21位到第1位;LCDBASEL的21位数据指定了LCD的尾址,即显示缓存区结束地址的第21位到第1位。例如,我们想要在尺寸为320×240的屏幕上显示24位颜色,定义的显示缓存区数组为LCD_BUFFER[240][320],则LCDBANK等于LCD_BUFFER的第30位到第22位数据值(因为LCD_BUFFER表示的就是数组的首地址),LCDBASEU等于LCD_BUFFER的第21位到第1位数据值,由于是用32位数据表示24为颜色,因此每个像素值是4个字节,所以LCDBASEL等于(LCD_BUFFER+(240×320×4))结果的第21位到第1位的数据值。另外寄存器LCDSADDR3有两个内容:OFFSIZE和PAGEWIDTH。OFFSIZE用于虚拟屏幕的偏移长度,如果我们不使用虚拟屏幕,就把它置为0;PAGEWIDTH定义了视口的宽,单位是半字,如在上面的例子中,PAGEWIDTH应该为320×32÷16。

lcd.h


  1. /******************************************************************* 

  2.  * Copyright (C),2011-2012, XXX. 

  3.  * FileName: lcd.h  

  4.  * Author:HuangYinqing 

  5.  * Version:1.0 

  6.  * Date::2012-04-22 

  7.  * Description:LCD驱动. 

  8.  * Function List: 

  9.  * History: 

  10.  ******************************************************************/  

  11. #ifndef __LCD_H__  

  12. #define __LCD_H__  

  13.   

  14.   

  15. #define LCD_W35             //320*240/3.5英寸TFT真彩液晶屏  

  16.   

  17. #if defined(LCD_W35)  

  18. #define LCD_CLKVAL  7  

  19. #define LCD_WIDTH   320  

  20. #define LCD_HEIGHT  240  

  21.   

  22. #define LCD_HBPD    0x44    //开始  

  23. #define LCD_HFPD    0x4     //结束  

  24. #define LCD_HSPW    1       //The width of HSYNC       

  25. #define LCD_VBPD    10      //开始  

  26. #define LCD_VFPD    4       //结束  

  27. #define LCD_VSPW    1       //The width of VSYNC  

  28. #endif  

  29.   

  30. #define BPPMODE_1BPP    0x8  

  31. #define BPPMODE_2BPP    0x9  

  32. #define BPPMODE_4BPP    0xA  

  33. #define BPPMODE_8BPP    0xB  

  34. #define BPPMODE_16BPP   0xC  

  35. #define BPPMODE_24BPP   0xD  

  36.   

  37. #define LCDTYPE_TFT     0x3  

  38.   

  39. #define ENVID_DISABLE   0  

  40. #define ENVID_ENABLE    1  

  41.   

  42. #define FRM_5551        0  

  43. #define FRM_565         1  

  44.   

  45. #define HSYNC_NORM      0  

  46. #define HSYNC_INV       1  

  47.   

  48. #define VSYNC_NORM      0  

  49. #define VSYNC_INV       1  

  50.   

  51. #define PWREN           1  

  52.   

  53. #define BSWP            1  

  54. #define HWSWP           1  

  55.   

  56. #define M5D( n ) ( ( n ) & 0x1fffff )  

  57.   

  58. #define FREQ_PWM1       1000  

  59.   

  60. void LCDInit(void);  

  61. void LCDTest(void);  

  62.   

  63. extern const unsigned char sunflower_240x320[];  

  64.   

  65. #endif  



lcd.c


  1. /******************************************************************* 

  2.  * Copyright (C),2011-2012, XXX. 

  3.  * FileName: lcd.c  

  4.  * Author:HuangYinqing 

  5.  * Version:1.0 

  6.  * Date::2012-04-22 

  7.  * Description:LCD驱动. 

  8.  * Function List: 

  9.  * History: 

  10.  ******************************************************************/  

  11. #include "common.h"  

  12. #include "core.h"  

  13. #include "drv.h"  

  14.   

  15. //定义240行,320列的数组,用来存放像素数据  

  16. //每个像素用16位数据表示 (16BPP模式)  

  17. //volatile用来定义可被多线程访问或修改的变量  

  18. volatile static unsigned short LCD_BUFFER[LCD_HEIGHT][LCD_WIDTH];  

  19.   

  20. #define LCD_ADDR ( (U32)LCD_BUFFER )  

  21.       

  22.   

  23. /******************************************************************** 

  24. 函数功能:LCD初始化。 

  25. 入口参数:无。 

  26. 返    回:无。 

  27. 备    注:无。 

  28. ********************************************************************/  

  29. void LCDInit(void)  

  30. {  

  31.     rGPCUP = 0xffffffff;//Disable Pull-up register  

  32.     rGPCCON = 0xaaaa02a8;//设置GPC各引脚对应引脚功能为 VD[7...0],VM,VFRAME,VLINE,VCLK  

  33.       

  34.     rGPDUP = 0xffffffff;//Disable Pull-up register  

  35.     rGPDCON = 0xaaaaaaaa;//设置VD[15:8]    

  36.   

  37.     //bit[17:8](4:CLKVAL);bit[6:5](11:TFT LCD panel);bit[4:1](1100:16BPP for TFT)  

  38.     rLCDCON1 = ( LCD_CLKVAL<<8 ) | ( LCDTYPE_TFT<<5 ) | ( BPPMODE_16BPP<<1) | ( ENVID_DISABLE<<0 );//设置像素时钟:VPLK=HPLK/((CLKVAL+1)*2)=HPLK/10=         

  39.     //bit[31:24](1:VBPD);bit[23:14](320-1:行数(320));bit[13:6](5:VFPD);bit[5:0](1:VSPW);   

  40.     rLCDCON2 = ( LCD_VBPD<<24 ) | ( ( LCD_HEIGHT-1 )<<14 ) | ( ( LCD_VFPD )<<6 ) | ( ( LCD_VSPW )<<0 );      

  41.     //bit[25:19](36:HBPD);bit[18:8](240-1:列数(240));bit[7:0](19:HFPD);  

  42.     rLCDCON3 = ( LCD_HBPD<<19 ) | ( ( LCD_WIDTH-1 )<<8 ) | ( LCD_HFPD<<0 );     

  43.     //bit[15:8](13:MVAL,只有当LCDCON1 bit[7]MMODE=1才有效);bit[7:0](5:HSPW)  

  44.     rLCDCON4 = ( LCD_HSPW<<0 );    

  45.     //设置为16BPP模式时为5:6:5格式,VLINE/HSYNC,VFRAME/VSYNC的极性反转,LCD_PWREN信号输出使能,半字交换使能  

  46.     //rLCDCON5= ( (FORMAT16BPP_565 << 11) | (HSYNC_INV<<9) | (VSYNC_INV<<8) | (ENLEND<<2) | (HWSWP<<0));  

  47.     rLCDCON5 = ( (FRM_565<<11) | (HSYNC_INV<<9)  | (VSYNC_INV<<8) | (PWREN<<3) | ( HWSWP<<0 ) );  

  48.   

  49.   

  50.     /* LCDBANK:视频帧缓冲区内存地址30-22位 

  51.        LCDBASEU:视频帧缓冲区的开始地址21-1位 

  52.        LCDBASEL:视频帧缓冲区的结束地址21-1位 

  53.     */  

  54.   

  55.     //LCD_ADDR为32位,如果只取30-22位,可认为32-31无效  

  56.     //bit[29:21]:LCDBANK bit[20:0]:LCDBASEU  

  57.     rLCDSADDR1 = ( ( LCD_ADDR >> 22 ) << 21 ) | ( ( M5D ( LCD_ADDR >> 1 ) ) << 0 );        

  58.     //bit[20:0]:LCDBASEL 公式   

  59.     rLCDSADDR2 = M5D ( ( LCD_ADDR + LCD_WIDTH * LCD_HEIGHT * 2 ) >> 1 ); //LCD_ADDR中的第21位移到了第20位,然后我只取0-20位          

  60.     //BIT[21:11]:OFFSIZE BIT[10:0]:PAGEWIDTH  

  61.     rLCDSADDR3 = LCD_WIDTH;  

  62.   

  63.     //屏蔽中断    

  64.     rLCDINTMSK |= 3;  

  65.   

  66.     //DISABLE 调色板  

  67.     rTPAL = 0x0;  

  68.   

  69.     //禁止LPC3600和LCC3600  

  70.     rTCONSEL &= ~( ( 1 << 4 ) | 1<<0 );         

  71. }  

  72.   

  73.   

  74. /******************************************************************** 

  75. 函数功能:显示图片。 

  76. 入口参数: 

  77.     x0,y0:显示的位置。 

  78.     h,l:图片的高度和宽度。 

  79.     pucBmp:位图数据指针。 

  80. 返    回:无。 

  81. 备    注:无。 

  82. ********************************************************************/  

  83. void PaintBmp( int x0, int y0, int h, int l, const unsigned char *pucBmp)  

  84. {  

  85.     int x,y;  

  86.     U32 c;  

  87.     int p = 0;  

  88.       

  89.     for( y = 0 ; y < l ; y++ )  

  90.     {  

  91.         for( x = 0 ; x < h ; x++ )  

  92.         {  

  93.             c = pucBmp[p+1] | (pucBmp[p]<<8) ;  

  94.   

  95.             if ( ( (x0+x) < LCD_WIDTH) && ( (y0+y) < LCD_HEIGHT) )  

  96.                 LCD_BUFFER[y0+y][x0+x] = c ;  

  97.   

  98.             p = p + 2 ;  

  99.         }  

  100.     }  

  101. }  

  102.   

  103.   

  104. /******************************************************************** 

  105. 函数功能:清屏幕。 

  106. 入口参数: 

  107.     usColor:用什么颜色清屏。 

  108. 返    回:无。 

  109. 备    注:无。 

  110. ********************************************************************/  

  111. void LCDClearScreen( unsigned short usColor)  

  112. {  

  113.     unsigned int x,y ;  

  114.           

  115.     for( y = 0 ; y < LCD_HEIGHT ; y++ )  

  116.     {  

  117.         for( x = 0 ; x < LCD_WIDTH ; x++ )  

  118.         {  

  119.             LCD_BUFFER[y][x] = usColor ;  

  120.         }  

  121.     }  

  122. }  

  123.   

  124. /******************************************************************** 

  125. 函数功能:使能LCD电源。 

  126. 入口参数: 

  127.     invPwren:极性。 

  128.     pwren:电源使能。 

  129. 返    回:无。 

  130. 备    注:无。 

  131. ********************************************************************/  

  132. static void LCDPowerEnable(int invPwren,int pwren)  

  133. {  

  134.     //GPG4 is setted as LCD_PWREN  

  135.     rGPGUP = rGPGUP | ( 1 << 4 ); // Pull-up disable  

  136.     rGPGCON = rGPGCON | ( 3 << 8 ); //GPG4=LCD_PWREN  

  137.       

  138.     //Enable LCD POWER ENABLE Function  

  139.     rLCDCON5 = rLCDCON5 & (~(1<<3)) | (pwren<<3);      // PWREN  

  140.     rLCDCON5 = rLCDCON5 & (~(1<<5)) | (invPwren<<5);   // INVPWREN  

  141. }  

  142.   

  143.   

  144. /******************************************************************** 

  145. 函数功能:使能视频输出。 

  146. 入口参数: 

  147.     onoff:1:使能;0:禁止。 

  148. 返    回:无。 

  149. 备    注:无。 

  150. ********************************************************************/  

  151. static void LCDEnvidOnOff(int onoff)  

  152. {  

  153.     if ( onoff == 1 )  

  154.         rLCDCON1 |= 1; // ENVID=ON  

  155.     else  

  156.         rLCDCON1 = rLCDCON1 & (~0x1); // ENVID Off  

  157. }  

  158.   

  159. /******************************************************************** 

  160. 函数功能:背光设置。 

  161. 入口参数: 

  162.     HiRatio:占空比。 

  163. 返    回:无。 

  164. 备    注:无。 

  165. ********************************************************************/  

  166. void LCDBkLtSet(U32 HiRatio)  

  167. {  

  168.     if(!HiRatio)  

  169.     {  

  170.         rGPBCON  = rGPBCON & (~(3<<2)) | (1<<2) ;   //GPB1设置为output  

  171.         rGPBDAT &= ~(1<<1);  

  172.         return;  

  173.     }  

  174.       

  175.     rGPBCON = rGPBCON & (~(3<<2)) | (2<<2) ;        //GPB1设置为TOUT1  

  176.       

  177.     if( HiRatio > 100 )  

  178.         HiRatio = 100 ;   

  179.       

  180.     rTCON = rTCON & (~(0xf<<8)) ;         // clear manual update bit, stop Timer1  

  181.   

  182.     rTCFG0  &= 0xffffff00;                  // set Timer 0&1 prescaler 0  

  183.     rTCFG0 |= 15;                           //prescaler = 15+1  

  184.   

  185.     rTCFG1  &= 0xffffff0f;                  // set Timer 1 MUX 1/16  

  186.     rTCFG1  |= 0x00000030;                  // set Timer 1 MUX 1/16  

  187.   

  188.     rTCNTB1  = ( 100000000>>8 )/FREQ_PWM1;        //if set inverter off, when TCNT2<=TCMP2, TOUT is high, TCNT2>TCMP2, TOUT is low  

  189.     rTCMPB1  = ( rTCNTB1*(100-HiRatio))/100 ;   //if set inverter on,  when TCNT2<=TCMP2, TOUT is low,  TCNT2>TCMP2, TOUT is high  

  190.   

  191.     rTCON = rTCON & (~(0xf<<8)) | (0x0e<<8) ;  

  192.     //自动重装,输出取反关闭,更新TCNTBn、TCMPBn,死区控制器关闭  

  193.     rTCON = rTCON & (~(0xf<<8)) | (0x0d<<8) ;       //开启背光控制  

  194. }  

  195.   

  196.   

  197. /******************************************************************** 

  198. 函数功能:背光控制。 

  199. 入口参数:无。 

  200. 返    回:无。 

  201. 备    注:无。 

  202. ********************************************************************/  

  203. void LCDBackLightControl( void )  

  204. {  

  205.     U8 HiRatio = 50 ;         

  206.       

  207.     LCDBkLtSet( HiRatio ) ;  

  208.   

  209.     while( 1 )  

  210.     {  

  211.         U8 key = Uart0GetChar();  

  212.   

  213.         if( key == '+' )  

  214.         {  

  215.             if( HiRatio < 100 )  

  216.                 HiRatio += 1 ;  

  217.         }  

  218.           

  219.         if( key == '-' )  

  220.         {  

  221.             if( HiRatio > 1 )  

  222.                 HiRatio -= 1 ;  

  223.         }  

  224.           

  225.         if( key == ESC_KEY ) break ;  

  226.           

  227.         LCDBkLtSet( HiRatio ) ;  

  228.     }  

  229. }  

  230.   

  231.   

  232.   

  233. /******************************************************************** 

  234. 函数功能:LCD测试程序。 

  235. 入口参数:无。 

  236. 返    回:无。 

  237. 备    注:无。 

  238. ********************************************************************/  

  239. void LCDTest(void)  

  240. {     

  241.     LCDInit();  

  242.     LCDBkLtSet( 70 ) ;  

  243.     LCDPowerEnable( 0, 1 );  

  244.     LCDEnvidOnOff( 1 );  

  245.       

  246.     //清屏  

  247.     LCDClearScreen( (0x00<<11) | (0x00<<5) | (0x00<<0) );//5:6:5(红,绿,蓝),参数为一个像素的颜色  

  248.     delay(1);  

  249.     LCDClearScreen( (0x1f<<11) | (0x00<<5) | (0x00<<0) );//(15:11)红  

  250.     delay(1);     

  251.     LCDClearScreen( (0x00<<11) | (0x3f<<5) | (0x00<<0) );//绿  

  252.     delay(1);     

  253.     LCDClearScreen( (0x00<<11) | (0x00<<5) | (0x1f<<0) );//蓝  

  254.     delay(1);  

  255.     LCDClearScreen( (0x1f<<11) | (0x3f<<5) | (0x1f<<0) );//三色加起来是白  

  256.     delay(1);  

  257.   

  258.     PaintBmp(0, 0, 240, 320, sunflower_240x320);  

  259.     delay(1);  

  260.       

  261.     LCDBackLightControl();  

  262.     LCDClearScreen(0xffff);  

  263. }  



关键字:mini2440  硬件篇  LCD 引用地址:mini2440硬件篇之LCD

上一篇:mini2440硬件篇之ADC触摸屏
下一篇:mini2440硬件篇之IIC

推荐阅读最新更新时间:2024-03-16 15:22

苹果iPhone SE Plus明年发布:4.7英寸LCD屏 支持5G
10月26日消息,业内人士Ross Young爆料,苹果下一代iPhone SE系列命名为iPhone SE Plus,采用LCD屏,屏幕尺寸与iPhone 8相同,为4.7英寸,支持5G网络。   我们知道,iPhone SE是苹果比较特殊的一条产品线,号称苹果的“性能小钢炮”。它主打小屏、低价以及高性价比,主要面向预算有限以及想要尝试iPhone和iOS系统的用户。   去年苹果发布了iPhone SE第二代,该机采用了类似于iPhone 8的外观设计,搭载A13处理器,可以说是iPhone入门设备的最佳机型。   如今手机行业进入了5G时代,从iPhone 12系列开始,苹果也转向了5G,因此iPhone SE系列
[手机便携]
苹果iPhone SE Plus明年发布:4.7英寸<font color='red'>LCD</font>屏 支持5G
STM8L052C6 低功耗+LCD显示 经验分享
由于工作原因,需要做一个低功耗的红外遥控器。于是接触了STM8L这系列低功耗单片机,因为我这个项目要求资源要求不高,所以选了052C6这款。32k flash,2Kbytes的RAM,还有EEPROM。资源很丰富,能满足很多场合的应用了。 这款单片机的低功耗宣称可以小于1uA,不过没什么实际意义,什么都没开的数据。我自己做实验,做一块最小系统版,halt模式下电流为3uA左右。IO口的状态不同,电流相差很大,经过实验发现GPIO_Mode_Out_OD_Low_Slow 模式下功耗最低。实际应用中应该按照IO口外接电路原理分析得到最佳状态。 进入低功耗模式很简单,一句 halt();就解决了。不过根据前人经验来说,最好在执
[单片机]
PIC单片机在ICD做lcd显示时钟演示程序
;************************************************* ;* CLKTEST.ASM * ;************************************************* ;* ICDDEMO教学实验板 lcd显示时钟演示程序 * ;************************************************* include p16f877.inc ;*---- ; 定义 LCD数据& 控制I/O口 LCD_DATA equ PORTB LCD_CNTL1 equ PORTB LCD_CNTL2 equ PORTA ; 定义 LCD控制相应的I
[单片机]
采用AT89C51+ADC0832+LCD1602的电子称设计
电子称设计,主要用于菜市场的电子称,可以设置价格,根据价格和重量计算出金额,该设计采用了Proteus仿真软件,采用AT89C51为主控,采用ADC0832芯片来进行ADC的转换,采用LCD1602显示屏显示,同时设计了矩阵键盘用于输入价格。设计难度3颗星(满星为5颗)。 首先设计电路图,由于模块不多,所以接口可以随意分配,电路仿真图如下图1。 设计时需要一步一步进行设计,一般设计开始尽量将人机交互的模块优先级调高。这里呢就优先对LCD1602进行设计,驱动程序如下: void wrc(uint8 c) { delay(1); rs=0; rw=0; e=0; P0=c; e=1; del
[单片机]
采用AT89C51+ADC0832+<font color='red'>LCD</font>1602的电子称设计
51单片机外围模块——LCD1602液晶模块
LCD1602简介 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x10的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。 1602的引脚 操作步骤 初始化(写命令) 写地址 写数据 时序图及时序参数 LCD1602关键性的指令设置 1.清屏指令 功能: 清除液晶显示器,即将 DDRAM 的内容全部填入 空白 的 ASCII码 20H; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(AC)的值设为 0。 2.进
[单片机]
51单片机外围模块——<font color='red'>LCD</font>1602液晶模块
智能手机面板市场需求两极分化:LCD需求走弱,OLED强劲
集微网消息 进入四季度,智能手机面板市场需求仍然呈现明显的分化趋势。部分零部件价格上涨带动整机成本上涨,使得低端的需求再次延迟,进而造成短期内低端市场继续萎缩,LCD面板需求走弱;OLED面板在iPhone的高需求下维持强劲。供应侧,面板的有效供应呈现稳定增长的趋势,同时面板厂也在积极地优化其产品策略,包括产能分配及价格策略,从而实现更好的收益。 根据群智咨询数据显示,10月份智能手机面板价格仍呈现分化趋势。其中a-Si面板稳中下滑,需求持续下滑,叠加供应侧产能增加,部分面板厂采取低价竞争的策略以争取到更多的订单,a-Si Cell价格将持续下降。 而10月份模组价格整体维持稳定,随着Cell价格的下探,模组价格将有机会在四季
[手机便携]
智能手机面板市场需求两极分化:<font color='red'>LCD</font>需求走弱,OLED强劲
LCD实验学习笔记(十):TFT LCD
硬件组成: REGBANK是LCD控制寄存器组,含17个寄存器及一块256*16的调色板,用来设置参数。 LCDCDMA中有两个FIFO,当FIFO空或数据减少到阈值,自动发起DMA传输,从内存获取图像数据,不需CPU干涉。 VIDPRCS将LCDCDMA中的数据组成特定格式,从VD 发送LCD屏。 TIMEGEN产生控制信号VSYNC,HSYNC,VCLK,VDEN,LEND。VSYNC是跳到左上角的信号,HSYNC是跳到下一行最左边的信号。每个VCLK表示正在传输一个像素的数据。 数据格式: 一幅图像为一帧(frame),由多行组成,每行由多个像素点组成,每个像素的颜色使用若干位表示(BPP)。 VSYNC信号表示一帧数据的开
[单片机]
奇美欲入股内地家电企业 LCD-TV年底再降15%
液晶时代中,运营情况刚刚有些走好的国产家电企业,可能又要面临一次巨大的冲击。来自液晶产业链上游的友达、奇美近期表示,他们将在下半年发力内地市场。打造自己的液晶电视品牌。友达电子台湾高层更是透露,不排斥有入股内地家电企业的可能。 随着消费者对于大尺寸液晶电视的需求,和液晶屏价格的大幅下降,国内液晶电视消费市场进一步得到释放。根据全球权威的市场研究公司GfK对我国100个城市彩电的零售监测结果,2006年2月,平板电视销量约占整体彩电的16%,销售额比例约为55%。而且从去年12月份开始,液晶电视的销售额比重就已经超过传统CRT彩电。 作为液晶面板的上游供应商,友达和奇美占据着全球35%市场份额。生产规模和技术工艺都已达到了世界最高
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved