硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8714|回复: 6
收起左侧

[有问必答] F4内部上下拉电阻阻值

[复制链接]

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
发表于 2014-3-20 14:42:44 | 显示全部楼层 |阅读模式
如题,这个参数在手册上没找到.  在实际应用中,用I/O口模拟8bit数据线,结果发现通信经常出错,配置成GPIO_OType_OD,内部上拉使能,  现在怀疑是否内部电阻太大导致速度快就出错
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107442
QQ
发表于 2014-3-20 14:52:19 | 显示全部楼层
不排除你的配置方式有问题,以前用107模拟16个I/O外接TFT,速度杠杠的,比103带FSMC的不相上下,还稳定。
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2014-3-20 15:55:32 | 显示全部楼层
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|
                                GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(GPIOE, &GPIO_InitStructure);
这么配置的
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2014-3-20 15:57:58 | 显示全部楼层
目的是作为双向数据口
回复

使用道具 举报

116

主题

800

回帖

1148

积分

至尊会员

积分
1148
QQ
 楼主| 发表于 2014-3-20 16:22:08 | 显示全部楼层
找到数据手册上写的是最小30K,最大50K,典型值为40K,  当I/O引脚复用成FSMC功能的时候也应该是这些电阻值吧,这么大的值速度是怎么上去的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107442
QQ
发表于 2014-3-21 21:44:33 | 显示全部楼层
明天我把107的那个程序给你找下,看看怎么配置的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107442
QQ
发表于 2014-3-22 01:21:08 | 显示全部楼层
  1. #include "stm32f10x_lib.h"
  2. #include "ili9320.h"
  3. #include "ili9320_font.h"
  4. u16 DeviceCode;
  5. void Lcd_Configuration(void)
  6. {
  7.     GPIO_InitTypeDef GPIO_InitStructure;
  8.     /*开启相应时钟 */
  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|
  10.                             RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);  
  11.     /*所有Lcd引脚配置为推挽输出*/
  12.     /*16位数据*/
  13.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  14.     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  15.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  16.     GPIO_Init(GPIOE, &GPIO_InitStructure);
  17.     /*控制脚*/
  18.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
  19.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  20.     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  21.     GPIO_Init(GPIOC, &GPIO_InitStructure);
  22. }
  23. /****************************************************************************
  24. * 名    称:void ili9320_Initializtion()
  25. * 功    能:初始化 ILI9320 控制器
  26. * 入口参数:无
  27. * 出口参数:无
  28. * 说    明:
  29. * 调用方法:ili9320_Initializtion();
  30. ****************************************************************************/
  31. void ili9320_Initializtion()
  32. {
  33.   /*****************************
  34.   **    硬件连接说明          **
  35.   ** STM32         ili9320    **
  36.   ** PE0~15 <----> DB0~15     **
  37.   ** PD15   <----> nRD        **
  38.   ** PD14   <----> RS         **
  39.   ** PD13   <----> nWR        **
  40.   ** PD12   <----> nCS        **
  41.   ** PD11   <----> nReset     **
  42.   ** PC0    <----> BK_LED     **
  43.   ******************************/
  44.      u16 i;
  45.     Lcd_Configuration();
  46.       ili9320_WriteData(0xffff);
  47.     Set_nWr;
  48.     Set_Cs;
  49.     Set_Rs;
  50.     Set_nRd;
  51.   for(i=50000;i>0;i--);
  52.   for(i=50000;i>0;i--);
  53.   for(i=50000;i>0;i--);
  54.   ili9320_WriteRegister(0x0000,0x0001);ili9320_Delay(10000);
  55.   for(i=50000;i>0;i--);
  56.   for(i=50000;i>0;i--);
  57.   DeviceCode = ili9320_ReadRegister(0x0000);
  58. //  DeviceCode = 0x9320;
  59.     if(DeviceCode==0x9325||DeviceCode==0x9328)
  60.     {
  61.           ili9320_WriteRegister(0x00e7,0x0010);      
  62.         ili9320_WriteRegister(0x0000,0x0001);              //start internal osc
  63.         ili9320_WriteRegister(0x0001,0x0100);     
  64.         ili9320_WriteRegister(0x0002,0x0700);                 //power on sequence                     
  65.         ili9320_WriteRegister(0x0003,(1<<12)|(1<<5)|(1<<4) );     //65K
  66.         ili9320_WriteRegister(0x0004,0x0000);                                   
  67.         ili9320_WriteRegister(0x0008,0x0207);               
  68.         ili9320_WriteRegister(0x0009,0x0000);         
  69.         ili9320_WriteRegister(0x000a,0x0000);                 //display setting         
  70.         ili9320_WriteRegister(0x000c,0x0001);                //display setting         
  71.         ili9320_WriteRegister(0x000d,0x0000);                 //0f3c         
  72.         ili9320_WriteRegister(0x000f,0x0000);
  73. //Power On sequence //
  74.         ili9320_WriteRegister(0x0010,0x0000);   
  75.         ili9320_WriteRegister(0x0011,0x0007);
  76.         ili9320_WriteRegister(0x0012,0x0000);                                                                 
  77.         ili9320_WriteRegister(0x0013,0x0000);                 
  78.         for(i=50000;i>0;i--);
  79.         for(i=50000;i>0;i--);
  80.         ili9320_WriteRegister(0x0010,0x1590);   
  81.         ili9320_WriteRegister(0x0011,0x0227);
  82.         for(i=50000;i>0;i--);
  83.         for(i=50000;i>0;i--);
  84.         ili9320_WriteRegister(0x0012,0x009c);                  
  85.         for(i=50000;i>0;i--);
  86.         for(i=50000;i>0;i--);
  87.         ili9320_WriteRegister(0x0013,0x1900);   
  88.         ili9320_WriteRegister(0x0029,0x0023);
  89.         ili9320_WriteRegister(0x002b,0x000e);
  90.         for(i=50000;i>0;i--);
  91.         for(i=50000;i>0;i--);
  92.         ili9320_WriteRegister(0x0020,0x0000);                                                            
  93.         ili9320_WriteRegister(0x0021,0x0000);           
  94. ///////////////////////////////////////////////////////      
  95.         for(i=50000;i>0;i--);
  96.         for(i=50000;i>0;i--);
  97.         ili9320_WriteRegister(0x0030,0x0007);
  98.         ili9320_WriteRegister(0x0031,0x0707);   
  99.         ili9320_WriteRegister(0x0032,0x0006);
  100.         ili9320_WriteRegister(0x0035,0x0704);
  101.         ili9320_WriteRegister(0x0036,0x1f04);
  102.         ili9320_WriteRegister(0x0037,0x0004);
  103.         ili9320_WriteRegister(0x0038,0x0000);        
  104.         ili9320_WriteRegister(0x0039,0x0706);     
  105.         ili9320_WriteRegister(0x003c,0x0701);
  106.         ili9320_WriteRegister(0x003d,0x000f);
  107.         for(i=50000;i>0;i--);
  108.         for(i=50000;i>0;i--);
  109.         ili9320_WriteRegister(0x0050,0x0000);        
  110.         ili9320_WriteRegister(0x0051,0x00ef);   
  111.         ili9320_WriteRegister(0x0052,0x0000);     
  112.         ili9320_WriteRegister(0x0053,0x013f);
  113.         ili9320_WriteRegister(0x0060,0xa700);        
  114.         ili9320_WriteRegister(0x0061,0x0001);
  115.         ili9320_WriteRegister(0x006a,0x0000);
  116.         ili9320_WriteRegister(0x0080,0x0000);
  117.         ili9320_WriteRegister(0x0081,0x0000);
  118.         ili9320_WriteRegister(0x0082,0x0000);
  119.         ili9320_WriteRegister(0x0083,0x0000);
  120.         ili9320_WriteRegister(0x0084,0x0000);
  121.         ili9320_WriteRegister(0x0085,0x0000);
  122.       
  123.         ili9320_WriteRegister(0x0090,0x0010);     
  124.         ili9320_WriteRegister(0x0092,0x0000);  
  125.         ili9320_WriteRegister(0x0093,0x0003);
  126.         ili9320_WriteRegister(0x0095,0x0110);
  127.         ili9320_WriteRegister(0x0097,0x0000);        
  128.         ili9320_WriteRegister(0x0098,0x0000);  
  129.          //display on sequence     
  130.         ili9320_WriteRegister(0x0007,0x0133);
  131.    
  132.         ili9320_WriteRegister(0x0020,0x0000);                                                            
  133.         ili9320_WriteRegister(0x0021,0x0000);
  134.     }
  135.     else if(DeviceCode==0x9320)
  136.     {
  137.         ili9320_WriteRegister(0x00,0x0000);
  138.         ili9320_WriteRegister(0x01,0x0100);    //Driver Output Contral.
  139.         ili9320_WriteRegister(0x02,0x0700);    //LCD Driver Waveform Contral.
  140. //        ili9320_WriteRegister(0x03,0x1030);    //Entry Mode Set.
  141.         ili9320_WriteRegister(0x03,0x1018);    //Entry Mode Set.
  142.    
  143.         ili9320_WriteRegister(0x04,0x0000);    //Scalling Contral.
  144.         ili9320_WriteRegister(0x08,0x0202);    //Display Contral 2.(0x0207)
  145.         ili9320_WriteRegister(0x09,0x0000);    //Display Contral 3.(0x0000)
  146.         ili9320_WriteRegister(0x0a,0x0000);    //Frame Cycle Contal.(0x0000)
  147.         ili9320_WriteRegister(0x0c,(1<<0));    //Extern Display Interface Contral 1.(0x0000)
  148.         ili9320_WriteRegister(0x0d,0x0000);    //Frame Maker Position.
  149.         ili9320_WriteRegister(0x0f,0x0000);    //Extern Display Interface Contral 2.
  150.    
  151.         for(i=50000;i>0;i--);
  152.         for(i=50000;i>0;i--);
  153.         ili9320_WriteRegister(0x07,0x0101);    //Display Contral.
  154.         for(i=50000;i>0;i--);
  155.         for(i=50000;i>0;i--);
  156.    
  157.         ili9320_WriteRegister(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));    //Power Control 1.(0x16b0)
  158.         ili9320_WriteRegister(0x11,0x0007);                                //Power Control 2.(0x0001)
  159.         ili9320_WriteRegister(0x12,(1<<8)|(1<<4)|(0<<0));                    //Power Control 3.(0x0138)
  160.         ili9320_WriteRegister(0x13,0x0b00);                                //Power Control 4.
  161.         ili9320_WriteRegister(0x29,0x0000);                                //Power Control 7.
  162.    
  163.         ili9320_WriteRegister(0x2b,(1<<14)|(1<<4));
  164.         
  165.         ili9320_WriteRegister(0x50,0);        //Set X Start.
  166.         ili9320_WriteRegister(0x51,239);    //Set X End.
  167.         ili9320_WriteRegister(0x52,0);        //Set Y Start.
  168.         ili9320_WriteRegister(0x53,319);    //Set Y End.
  169.    
  170.         ili9320_WriteRegister(0x60,0x2700);    //Driver Output Control.
  171.         ili9320_WriteRegister(0x61,0x0001);    //Driver Output Control.
  172.         ili9320_WriteRegister(0x6a,0x0000);    //Vertical Srcoll Control.
  173.    
  174.         ili9320_WriteRegister(0x80,0x0000);    //Display Position? Partial Display 1.
  175.         ili9320_WriteRegister(0x81,0x0000);    //RAM Address Start? Partial Display 1.
  176.         ili9320_WriteRegister(0x82,0x0000);    //RAM Address End-Partial Display 1.
  177.         ili9320_WriteRegister(0x83,0x0000);    //Displsy Position? Partial Display 2.
  178.         ili9320_WriteRegister(0x84,0x0000);    //RAM Address Start? Partial Display 2.
  179.         ili9320_WriteRegister(0x85,0x0000);    //RAM Address End? Partial Display 2.
  180.    
  181.         ili9320_WriteRegister(0x90,(0<<7)|(16<<0));    //Frame Cycle Contral.(0x0013)
  182.         ili9320_WriteRegister(0x92,0x0000);    //Panel Interface Contral 2.(0x0000)
  183.         ili9320_WriteRegister(0x93,0x0001);    //Panel Interface Contral 3.
  184.         ili9320_WriteRegister(0x95,0x0110);    //Frame Cycle Contral.(0x0110)
  185.         ili9320_WriteRegister(0x97,(0<<8));    //
  186.         ili9320_WriteRegister(0x98,0x0000);    //Frame Cycle Contral.
  187.    
  188.         ili9320_WriteRegister(0x07,0x0173);    //(0x0173)
  189.     }
  190.     else if(DeviceCode==0x9919)
  191.     {
  192.         //------POWER ON &RESET DISPLAY OFF
  193.          ili9320_WriteRegister(0x28,0x0006);
  194.         
  195.          ili9320_WriteRegister(0x00,0x0001);
  196.         
  197.          ili9320_WriteRegister(0x10,0x0000);
  198.         
  199.          ili9320_WriteRegister(0x01,0x72ef);
  200.          ili9320_WriteRegister(0x02,0x0600);
  201.          ili9320_WriteRegister(0x03,0x6a38);
  202.         
  203.          ili9320_WriteRegister(0x11,0x6874);//70
  204.         
  205.          
  206.              //  RAM WRITE DATA MASK
  207.          ili9320_WriteRegister(0x0f,0x0000);
  208.             //  RAM WRITE DATA MASK
  209.          ili9320_WriteRegister(0x0b,0x5308);
  210.         
  211.          ili9320_WriteRegister(0x0c,0x0003);
  212.         
  213.          ili9320_WriteRegister(0x0d,0x000a);
  214.         
  215.          ili9320_WriteRegister(0x0e,0x2e00);  //0030
  216.         
  217.          ili9320_WriteRegister(0x1e,0x00be);
  218.         
  219.          ili9320_WriteRegister(0x25,0x8000);
  220.         
  221.          ili9320_WriteRegister(0x26,0x7800);
  222.         
  223.          ili9320_WriteRegister(0x27,0x0078);
  224.         
  225.          ili9320_WriteRegister(0x4e,0x0000);
  226.         
  227.          ili9320_WriteRegister(0x4f,0x0000);
  228.         
  229.          ili9320_WriteRegister(0x12,0x08d9);
  230.         
  231.          // -----------------Adjust the Gamma Curve----//
  232.          ili9320_WriteRegister(0x30,0x0000);     //0007
  233.         
  234.          ili9320_WriteRegister(0x31,0x0104);       //0203
  235.         
  236.          ili9320_WriteRegister(0x32,0x0100);        //0001
  237.          ili9320_WriteRegister(0x33,0x0305);      //0007
  238.          ili9320_WriteRegister(0x34,0x0505);      //0007
  239.         
  240.          ili9320_WriteRegister(0x35,0x0305);         //0407
  241.         
  242.          ili9320_WriteRegister(0x36,0x0707);         //0407
  243.         
  244.          ili9320_WriteRegister(0x37,0x0300);          //0607
  245.         
  246.          ili9320_WriteRegister(0x3a,0x1200);         //0106
  247.         
  248.          ili9320_WriteRegister(0x3b,0x0800);         
  249.          ili9320_WriteRegister(0x07,0x0033);
  250.     }
  251.     else if(DeviceCode==0x9331)
  252.     {
  253.          /*********POWER ON &RESET DISPLAY OFF*/
  254.         /************* Start Initial Sequence **********/
  255.         ili9320_WriteRegister(0x00E7, 0x1014);
  256.         ili9320_WriteRegister(0x0001, 0x0100); // set SS and SM bit   0x0100
  257.         ili9320_WriteRegister(0x0002, 0x0200); // set 1 line inversion
  258.         ili9320_WriteRegister(0x0003, 0x1030); // set GRAM write direction and BGR=1.     0x1030
  259.         ili9320_WriteRegister(0x0008, 0x0202); // set the back porch and front porch
  260.         ili9320_WriteRegister(0x0009, 0x0000); // set non-display area refresh cycle ISC[3:0]
  261.         ili9320_WriteRegister(0x000A, 0x0000); // FMARK function
  262.         ili9320_WriteRegister(0x000C, 0x0000); // RGB interface setting
  263.         ili9320_WriteRegister(0x000D, 0x0000); // Frame marker Position
  264.         ili9320_WriteRegister(0x000F, 0x0000); // RGB interface polarity
  265.         //*************Power On sequence ****************//
  266.         ili9320_WriteRegister(0x0010, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
  267.         ili9320_WriteRegister(0x0011, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
  268.         ili9320_WriteRegister(0x0012, 0x0000); // VREG1OUT voltage
  269.         ili9320_WriteRegister(0x0013, 0x0000); // VDV[4:0] for VCOM amplitude
  270.         ili9320_Delay(200); // Dis-charge capacitor power voltage
  271.         ili9320_WriteRegister(0x0010, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB
  272.         ili9320_WriteRegister(0x0011, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
  273.         ili9320_Delay(50); // Delay 50ms
  274.         ili9320_WriteRegister(0x0012, 0x000C); // Internal reference voltage= Vci;
  275.         ili9320_Delay(50); // Delay 50ms
  276.         ili9320_WriteRegister(0x0013, 0x0800); // Set VDV[4:0] for VCOM amplitude
  277.         ili9320_WriteRegister(0x0029, 0x0011); // Set VCM[5:0] for VCOMH
  278.         ili9320_WriteRegister(0x002B, 0x000B); // Set Frame Rate
  279.         ili9320_Delay(50); // Delay 50ms
  280.         ili9320_WriteRegister(0x0020, 0x0000); // GRAM horizontal Address
  281.         ili9320_WriteRegister(0x0021, 0x0000); // GRAM Vertical Address
  282.         // ----------- Adjust the Gamma Curve ----------//
  283.         ili9320_WriteRegister(0x0030, 0x0000);
  284.         ili9320_WriteRegister(0x0031, 0x0106);
  285.         ili9320_WriteRegister(0x0032, 0x0000);
  286.         ili9320_WriteRegister(0x0035, 0x0204);
  287.         ili9320_WriteRegister(0x0036, 0x160A);
  288.         ili9320_WriteRegister(0x0037, 0x0707);
  289.         ili9320_WriteRegister(0x0038, 0x0106);
  290.         ili9320_WriteRegister(0x0039, 0x0707);
  291.         ili9320_WriteRegister(0x003C, 0x0402);
  292.         ili9320_WriteRegister(0x003D, 0x0C0F);
  293.         //------------------ Set GRAM area ---------------//
  294.         ili9320_WriteRegister(0x0050, 0x0000); // Horizontal GRAM Start Address
  295.         ili9320_WriteRegister(0x0051, 0x00EF); // Horizontal GRAM End Address
  296.         ili9320_WriteRegister(0x0052, 0x0000); // Vertical GRAM Start Address
  297.         ili9320_WriteRegister(0x0053, 0x013F); // Vertical GRAM Start Address
  298.         ili9320_WriteRegister(0x0060, 0x2700); // Gate Scan Line
  299.         ili9320_WriteRegister(0x0061, 0x0001); // NDL,VLE, REV
  300.         ili9320_WriteRegister(0x006A, 0x0000); // set scrolling line
  301.         //-------------- Partial Display Control ---------//
  302.         ili9320_WriteRegister(0x0080, 0x0000);
  303.         ili9320_WriteRegister(0x0081, 0x0000);
  304.         ili9320_WriteRegister(0x0082, 0x0000);
  305.         ili9320_WriteRegister(0x0083, 0x0000);
  306.         ili9320_WriteRegister(0x0084, 0x0000);
  307.         ili9320_WriteRegister(0x0085, 0x0000);
  308.         //-------------- Panel Control -------------------//
  309.         ili9320_WriteRegister(0x0090, 0x0010);
  310.         ili9320_WriteRegister(0x0092, 0x0600);
  311.         ili9320_WriteRegister(0x0007,0x0021);        
  312.         ili9320_Delay(50);
  313.         ili9320_WriteRegister(0x0007,0x0061);
  314.         ili9320_Delay(50);
  315.         ili9320_WriteRegister(0x0007,0x0133);  // 262K color and display ON
  316.         ili9320_Delay(50);
  317.     }  
  318.     else if(DeviceCode==0x7783)
  319.     {
  320.         // Start Initial Sequence
  321.         ili9320_WriteRegister(0x00FF,0x0001);
  322.         ili9320_WriteRegister(0x00F3,0x0008);
  323.         ili9320_WriteRegister(0x0001,0x0100);
  324.         ili9320_WriteRegister(0x0002,0x0700);
  325.         ili9320_WriteRegister(0x0003,0x1030);  //0x1030
  326.         ili9320_WriteRegister(0x0008,0x0302);
  327.         ili9320_WriteRegister(0x0008,0x0207);
  328.         ili9320_WriteRegister(0x0009,0x0000);
  329.         ili9320_WriteRegister(0x000A,0x0000);
  330.         ili9320_WriteRegister(0x0010,0x0000);  //0x0790
  331.         ili9320_WriteRegister(0x0011,0x0005);
  332.         ili9320_WriteRegister(0x0012,0x0000);
  333.         ili9320_WriteRegister(0x0013,0x0000);
  334.         ili9320_Delay(50);
  335.         ili9320_WriteRegister(0x0010,0x12B0);
  336.         ili9320_Delay(50);
  337.         ili9320_WriteRegister(0x0011,0x0007);
  338.         ili9320_Delay(50);
  339.         ili9320_WriteRegister(0x0012,0x008B);
  340.         ili9320_Delay(50);
  341.         ili9320_WriteRegister(0x0013,0x1700);
  342.         ili9320_Delay(50);
  343.         ili9320_WriteRegister(0x0029,0x0022);
  344.         
  345.         //################# void Gamma_Set(void) ####################//
  346.         ili9320_WriteRegister(0x0030,0x0000);
  347.         ili9320_WriteRegister(0x0031,0x0707);
  348.         ili9320_WriteRegister(0x0032,0x0505);
  349.         ili9320_WriteRegister(0x0035,0x0107);
  350.         ili9320_WriteRegister(0x0036,0x0008);
  351.         ili9320_WriteRegister(0x0037,0x0000);
  352.         ili9320_WriteRegister(0x0038,0x0202);
  353.         ili9320_WriteRegister(0x0039,0x0106);
  354.         ili9320_WriteRegister(0x003C,0x0202);
  355.         ili9320_WriteRegister(0x003D,0x0408);
  356.         ili9320_Delay(50);
  357.         
  358.         
  359.         ili9320_WriteRegister(0x0050,0x0000);        
  360.         ili9320_WriteRegister(0x0051,0x00EF);        
  361.         ili9320_WriteRegister(0x0052,0x0000);        
  362.         ili9320_WriteRegister(0x0053,0x013F);        
  363.         ili9320_WriteRegister(0x0060,0xA700);        
  364.         ili9320_WriteRegister(0x0061,0x0001);
  365.         ili9320_WriteRegister(0x0090,0x0033);               
  366.         ili9320_WriteRegister(0x002B,0x000B);        
  367.         ili9320_WriteRegister(0x0007,0x0133);
  368.         ili9320_Delay(50);
  369.     }  
  370.     else if(DeviceCode==0x4531)
  371.     {        
  372.         // Setup display
  373.         ili9320_WriteRegister(0x00,0x0001);
  374.         ili9320_WriteRegister(0x10,0x0628);
  375.         ili9320_WriteRegister(0x12,0x0006);
  376.         ili9320_WriteRegister(0x13,0x0A32);
  377.         ili9320_WriteRegister(0x11,0x0040);
  378.         ili9320_WriteRegister(0x15,0x0050);
  379.         ili9320_WriteRegister(0x12,0x0016);
  380.         ili9320_Delay(15);
  381.         ili9320_WriteRegister(0x10,0x5660);
  382.         ili9320_Delay(15);
  383.         ili9320_WriteRegister(0x13,0x2A4E);
  384.         ili9320_WriteRegister(0x01,0x0100);
  385.         ili9320_WriteRegister(0x02,0x0300);
  386.    
  387.         ili9320_WriteRegister(0x03,0x1030);
  388. //        ili9320_WriteRegister(0x03,0x1038);
  389.    
  390.         ili9320_WriteRegister(0x08,0x0202);
  391.         ili9320_WriteRegister(0x0A,0x0000);
  392.         ili9320_WriteRegister(0x30,0x0000);
  393.         ili9320_WriteRegister(0x31,0x0402);
  394.         ili9320_WriteRegister(0x32,0x0106);
  395.         ili9320_WriteRegister(0x33,0x0700);
  396.         ili9320_WriteRegister(0x34,0x0104);
  397.         ili9320_WriteRegister(0x35,0x0301);
  398.         ili9320_WriteRegister(0x36,0x0707);
  399.         ili9320_WriteRegister(0x37,0x0305);
  400.         ili9320_WriteRegister(0x38,0x0208);
  401.         ili9320_WriteRegister(0x39,0x0F0B);
  402.         ili9320_Delay(15);
  403.         ili9320_WriteRegister(0x41,0x0002);
  404.         ili9320_WriteRegister(0x60,0x2700);
  405.         ili9320_WriteRegister(0x61,0x0001);
  406.         ili9320_WriteRegister(0x90,0x0119);
  407.         ili9320_WriteRegister(0x92,0x010A);
  408.         ili9320_WriteRegister(0x93,0x0004);
  409.         ili9320_WriteRegister(0xA0,0x0100);
  410. //        ili9320_WriteRegister(0x07,0x0001);
  411.         ili9320_Delay(15);
  412. //        ili9320_WriteRegister(0x07,0x0021);
  413.         ili9320_Delay(15);
  414. //        ili9320_WriteRegister(0x07,0x0023);
  415.         ili9320_Delay(15);
  416. //        ili9320_WriteRegister(0x07,0x0033);
  417.         ili9320_Delay(15);
  418.         ili9320_WriteRegister(0x07,0x0133);
  419.         ili9320_Delay(15);
  420.         ili9320_WriteRegister(0xA0,0x0000);
  421.         ili9320_Delay(20);
  422.     }                        
  423.     /*
  424.     else if(DeviceCode==0x1505)
  425.     {
  426. // second release on 3/5  ,luminance is acceptable,water wave appear during camera preview
  427.         ili9320_WriteRegister(0x0007,0x0000);
  428.         ili9320_Delay(5);
  429.         ili9320_WriteRegister(0x0012,0x011C);//0x011A   why need to set several times?
  430.         ili9320_WriteRegister(0x00A4,0x0001);//NVM
  431.     //
  432.         ili9320_WriteRegister(0x0008,0x000F);
  433.         ili9320_WriteRegister(0x000A,0x0008);
  434.         ili9320_WriteRegister(0x000D,0x0008);
  435.       
  436.   //GAMMA CONTROL/
  437.         ili9320_WriteRegister(0x0030,0x0707);
  438.         ili9320_WriteRegister(0x0031,0x0007); //0x0707
  439.         ili9320_WriteRegister(0x0032,0x0603);
  440.         ili9320_WriteRegister(0x0033,0x0700);
  441.         ili9320_WriteRegister(0x0034,0x0202);
  442.         ili9320_WriteRegister(0x0035,0x0002); //?0x0606
  443.         ili9320_WriteRegister(0x0036,0x1F0F);
  444.         ili9320_WriteRegister(0x0037,0x0707); //0x0f0f  0x0105
  445.         ili9320_WriteRegister(0x0038,0x0000);
  446.         ili9320_WriteRegister(0x0039,0x0000);
  447.         ili9320_WriteRegister(0x003A,0x0707);
  448.         ili9320_WriteRegister(0x003B,0x0000); //0x0303
  449.         ili9320_WriteRegister(0x003C,0x0007); //?0x0707
  450.         ili9320_WriteRegister(0x003D,0x0000); //0x1313//0x1f08
  451.         ili9320_Delay(5);
  452.         ili9320_WriteRegister(0x0007,0x0001);
  453.         ili9320_WriteRegister(0x0017,0x0001);   //Power supply startup enable
  454.         ili9320_Delay(5);
  455.   
  456.   //power control//
  457.         ili9320_WriteRegister(0x0010,0x17A0);
  458.         ili9320_WriteRegister(0x0011,0x0217); //reference voltage VC[2:0]   Vciout = 1.00*Vcivl
  459.         ili9320_WriteRegister(0x0012,0x011E);//0x011c  //Vreg1out = Vcilvl*1.80   is it the same as Vgama1out ?
  460.         ili9320_WriteRegister(0x0013,0x0F00); //VDV[4:0]-->VCOM Amplitude VcomL = VcomH - Vcom Ampl
  461.         ili9320_WriteRegister(0x002A,0x0000);  
  462.         ili9320_WriteRegister(0x0029,0x000A); //0x0001F  Vcomh = VCM1[4:0]*Vreg1out    gate source voltage??
  463.         ili9320_WriteRegister(0x0012,0x013E); // 0x013C  power supply on
  464.            //Coordinates Control//
  465.         ili9320_WriteRegister(0x0050,0x0000);//0x0e00
  466.         ili9320_WriteRegister(0x0051,0x00EF);
  467.         ili9320_WriteRegister(0x0052,0x0000);
  468.         ili9320_WriteRegister(0x0053,0x013F);
  469.     //Pannel Image Control//
  470.         ili9320_WriteRegister(0x0060,0x2700);
  471.         ili9320_WriteRegister(0x0061,0x0001);
  472.         ili9320_WriteRegister(0x006A,0x0000);
  473.         ili9320_WriteRegister(0x0080,0x0000);
  474.     //Partial Image Control//
  475.         ili9320_WriteRegister(0x0081,0x0000);
  476.         ili9320_WriteRegister(0x0082,0x0000);
  477.         ili9320_WriteRegister(0x0083,0x0000);
  478.         ili9320_WriteRegister(0x0084,0x0000);
  479.         ili9320_WriteRegister(0x0085,0x0000);
  480.   //Panel Interface Control//
  481.         ili9320_WriteRegister(0x0090,0x0013); //0x0010 frenqucy
  482.         ili9320_WriteRegister(0x0092,0x0300);
  483.         ili9320_WriteRegister(0x0093,0x0005);
  484.         ili9320_WriteRegister(0x0095,0x0000);
  485.         ili9320_WriteRegister(0x0097,0x0000);
  486.         ili9320_WriteRegister(0x0098,0x0000);
  487.   
  488.         ili9320_WriteRegister(0x0001,0x0100);
  489.         ili9320_WriteRegister(0x0002,0x0700);
  490.         ili9320_WriteRegister(0x0003,0x1030);
  491.         ili9320_WriteRegister(0x0004,0x0000);
  492.         ili9320_WriteRegister(0x000C,0x0000);
  493.         ili9320_WriteRegister(0x000F,0x0000);
  494.         ili9320_WriteRegister(0x0020,0x0000);
  495.         ili9320_WriteRegister(0x0021,0x0000);
  496.         ili9320_WriteRegister(0x0007,0x0021);
  497.         ili9320_Delay(20);
  498.         ili9320_WriteRegister(0x0007,0x0061);
  499.         ili9320_Delay(20);
  500.         ili9320_WriteRegister(0x0007,0x0173);
  501.         ili9320_Delay(20);
  502.     }                                          
  503.     else if(DeviceCode==0x8989)
  504.     {
  505.         ili9320_WriteRegister(0x0000,0x0001);    ili9320_Delay(50000);  //打开晶振
  506.         ili9320_WriteRegister(0x0003,0xA8A4);    ili9320_Delay(50000);   //0xA8A4
  507.         ili9320_WriteRegister(0x000C,0x0000);    ili9320_Delay(50000);   
  508.         ili9320_WriteRegister(0x000D,0x080C);    ili9320_Delay(50000);   
  509.         ili9320_WriteRegister(0x000E,0x2B00);    ili9320_Delay(50000);   
  510.         ili9320_WriteRegister(0x001E,0x00B0);    ili9320_Delay(50000);   
  511.         ili9320_WriteRegister(0x0001,0x2B3F);    ili9320_Delay(50000);   //驱动输出控制320*240  0x6B3F
  512.         ili9320_WriteRegister(0x0002,0x0600);    ili9320_Delay(50000);
  513.         ili9320_WriteRegister(0x0010,0x0000);    ili9320_Delay(50000);
  514.         ili9320_WriteRegister(0x0011,0x6070);    ili9320_Delay(50000);        //0x4030           //定义数据格式  16位色         横屏 0x6058
  515.         ili9320_WriteRegister(0x0005,0x0000);    ili9320_Delay(50000);
  516.         ili9320_WriteRegister(0x0006,0x0000);    ili9320_Delay(50000);
  517.         ili9320_WriteRegister(0x0016,0xEF1C);    ili9320_Delay(50000);
  518.         ili9320_WriteRegister(0x0017,0x0003);    ili9320_Delay(50000);
  519.         ili9320_WriteRegister(0x0007,0x0233);    ili9320_Delay(50000);        //0x0233      
  520.         ili9320_WriteRegister(0x000B,0x0000);    ili9320_Delay(50000);
  521.         ili9320_WriteRegister(0x000F,0x0000);    ili9320_Delay(50000);        //扫描开始地址
  522.         ili9320_WriteRegister(0x0041,0x0000);    ili9320_Delay(50000);
  523.         ili9320_WriteRegister(0x0042,0x0000);    ili9320_Delay(50000);
  524.         ili9320_WriteRegister(0x0048,0x0000);    ili9320_Delay(50000);
  525.         ili9320_WriteRegister(0x0049,0x013F);    ili9320_Delay(50000);
  526.         ili9320_WriteRegister(0x004A,0x0000);    ili9320_Delay(50000);
  527.         ili9320_WriteRegister(0x004B,0x0000);    ili9320_Delay(50000);
  528.         ili9320_WriteRegister(0x0044,0xEF00);    ili9320_Delay(50000);
  529.         ili9320_WriteRegister(0x0045,0x0000);    ili9320_Delay(50000);
  530.         ili9320_WriteRegister(0x0046,0x013F);    ili9320_Delay(50000);
  531.         ili9320_WriteRegister(0x0030,0x0707);    ili9320_Delay(50000);
  532.         ili9320_WriteRegister(0x0031,0x0204);    ili9320_Delay(50000);
  533.         ili9320_WriteRegister(0x0032,0x0204);    ili9320_Delay(50000);
  534.         ili9320_WriteRegister(0x0033,0x0502);    ili9320_Delay(50000);
  535.         ili9320_WriteRegister(0x0034,0x0507);    ili9320_Delay(50000);
  536.         ili9320_WriteRegister(0x0035,0x0204);    ili9320_Delay(50000);
  537.         ili9320_WriteRegister(0x0036,0x0204);    ili9320_Delay(50000);
  538.         ili9320_WriteRegister(0x0037,0x0502);    ili9320_Delay(50000);
  539.         ili9320_WriteRegister(0x003A,0x0302);    ili9320_Delay(50000);
  540.         ili9320_WriteRegister(0x003B,0x0302);    ili9320_Delay(50000);
  541.         ili9320_WriteRegister(0x0023,0x0000);    ili9320_Delay(50000);
  542.         ili9320_WriteRegister(0x0024,0x0000);    ili9320_Delay(50000);
  543.         ili9320_WriteRegister(0x0025,0x8000);    ili9320_Delay(50000);
  544.         ili9320_WriteRegister(0x004f,0);        //行首址0
  545.         ili9320_WriteRegister(0x004e,0);        //列首址0
  546.     }  */
  547.   for(i=50000;i>0;i--);
  548.   ili9320_Clear(0x00f8);
  549.   ili9320_Clear(0xf800);
  550. }
  551. /****************************************************************************
  552. * 名    称:void ili9320_SetCursor(u16 x,u16 y)
  553. * 功    能:设置屏幕座标
  554. * 入口参数:x      行座标
  555. *           y      列座标
  556. * 出口参数:无
  557. * 说    明:
  558. * 调用方法:ili9320_SetCursor(10,10);
  559. ****************************************************************************/
  560. __inline void ili9320_SetCursor(u16 x,u16 y)
  561. {
  562. //    if(DeviceCode==0x8989)
  563. //    {
  564. //         ili9320_WriteRegister(0x004e,y);        //行
  565. //        ili9320_WriteRegister(0x004f,0x13f-x);  //列
  566. //    }
  567. //    else if(DeviceCode==0x9919)
  568. //    {
  569. //        ili9320_WriteRegister(0x004e,x); // 行
  570. //          ili9320_WriteRegister(0x004f,y); // 列   
  571. //    }
  572. //    else
  573. //    {
  574.           ili9320_WriteRegister(0x0020,y); // 行
  575.           ili9320_WriteRegister(0x0021,0x13f-x); // 列
  576. //    }
  577. }
  578. /****************************************************************************
  579. * 名    称:void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
  580. * 功    能:设置窗口区域
  581. * 入口参数:StartX     行起始座标
  582. *           StartY     列起始座标
  583. *           EndX       行结束座标
  584. *           EndY       列结束座标
  585. * 出口参数:无
  586. * 说    明:
  587. * 调用方法:ili9320_SetWindows(0,0,100,100);
  588. ****************************************************************************/
  589. __inline void ili9320_SetWindows(u16 StartX,u16 StartY,u16 EndX,u16 EndY)
  590. {
  591.   ili9320_SetCursor(StartX,StartY);
  592.   ili9320_WriteRegister(0x0050, StartX);
  593.   ili9320_WriteRegister(0x0052, StartY);
  594.   ili9320_WriteRegister(0x0051, EndX);
  595.   ili9320_WriteRegister(0x0053, EndY);
  596. }
  597. /****************************************************************************
  598. * 名    称:void ili9320_Clear(u16 dat)
  599. * 功    能:将屏幕填充成指定的颜色,如清屏,则填充 0xffff
  600. * 入口参数:dat      填充值
  601. * 出口参数:无
  602. * 说    明:
  603. * 调用方法:ili9320_Clear(0xffff);
  604. ****************************************************************************/
  605. void ili9320_Clear(u16 dat)
  606. {
  607.   u32  i;
  608.   ili9320_SetCursor(0x0000, 0x0000);  
  609.   Clr_Cs;
  610.   ili9320_WriteIndex(0x0022);   
  611.   for(i=0;i<76800;i++)
  612.   {
  613.     ili9320_WriteData(dat);
  614.   }
  615.   Set_Cs;
  616. }
  617. /****************************************************************************
  618. * 名    称:u16 ili9320_GetPoint(u16 x,u16 y)
  619. * 功    能:获取指定座标的颜色值
  620. * 入口参数:x      行座标
  621. *           y      列座标
  622. * 出口参数:当前座标颜色值
  623. * 说    明:
  624. * 调用方法:i=ili9320_GetPoint(10,10);
  625. ****************************************************************************/
  626. //u16 ili9320_GetPoint(u16 x,u16 y)
  627. //{
  628. //  ili9320_SetCursor(x,y);
  629. //  return (ili9320_BGR2RGB(ili9320_ReadRegister(0x0022)));
  630. //}
  631. u16 ili9320_GetPoint(u16 x,u16 y)
  632. {
  633.   u16 temp;
  634.   ili9320_SetCursor(x,y);
  635.   Clr_Cs;
  636.   ili9320_WriteIndex(0x0022);  
  637.     temp = ili9320_ReadData(); //dummy
  638.     temp = ili9320_ReadData();     
  639.    Set_Cs;
  640.    if(DeviceCode!=0x7783&&DeviceCode!=0x4531)
  641.          temp=ili9320_BGR2RGB(temp);
  642.    return (temp);
  643. }
  644. /****************************************************************************
  645. * 名    称:void ili9320_SetPoint(u16 x,u16 y,u16 point)
  646. * 功    能:在指定座标画点
  647. * 入口参数:x      行座标
  648. *           y      列座标
  649. *           point  点的颜色
  650. * 出口参数:无
  651. * 说    明:
  652. * 调用方法:ili9320_SetPoint(10,10,0x0fe0);
  653. ****************************************************************************/
  654. void ili9320_SetPoint(u16 x,u16 y,u16 point)
  655. {
  656.   if ( (x>320)||(y>240) ) return;
  657.   ili9320_SetCursor(x,y);
  658.   Clr_Cs;
  659.   ili9320_WriteIndex(0x0022);
  660.   ili9320_WriteData(point);
  661.   Set_Cs;
  662. }
  663. /****************************************************************************
  664. * 名    称:void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
  665. * 功    能:在指定座标范围显示一副图片
  666. * 入口参数:StartX     行起始座标
  667. *           StartY     列起始座标
  668. *           EndX       行结束座标
  669. *           EndY       列结束座标
  670.             pic        图片头指针
  671. * 出口参数:无
  672. * 说    明:图片取模格式为水平扫描,16位颜色模式
  673. * 调用方法:ili9320_DrawPicture(0,0,100,100,(u16*)demo);
  674. ****************************************************************************/
  675. void ili9320_DrawPicture(u16 StartX,u16 StartY,u16 EndX,u16 EndY,u16 *pic)
  676. {
  677.   u16  i;
  678.   ili9320_SetWindows(StartX,StartY,EndX,EndY);
  679.   ili9320_SetCursor(StartX,StartY);
  680.   
  681.   Clr_Cs;
  682.   ili9320_WriteIndex(0x0022);
  683.   for (i=0;i<(EndX*EndY);i++)
  684.   {
  685.       ili9320_WriteData(*pic++);
  686.   }     
  687.   Set_Cs;
  688. }
  689. /****************************************************************************
  690. * 名    称:void ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkColor)
  691. * 功    能:在指定座标显示一个8x16点阵的ascii字符
  692. * 入口参数:x          行座标
  693. *           y          列座标
  694. *           charColor  字符的颜色
  695. *           bkColor    字符背景颜色
  696. * 出口参数:无
  697. * 说    明:显示范围限定为可显示的ascii码
  698. * 调用方法:ili9320_PutChar(10,10,'a',0x0000,0xffff);
  699. ****************************************************************************/
  700. void ili9320_PutChar(u16 x,u16 y,u8 c,u16 charColor,u16 bkColor)
  701. {
  702.   u16 i=0;
  703.   u16 j=0;
  704.   
  705.   u8 tmp_char=0;
  706.   for (i=0;i<16;i++)
  707.   {
  708.     tmp_char=ascii_8x16[((c-0x20)*16)+i];
  709.     for (j=0;j<8;j++)
  710.     {
  711.       if ( (tmp_char >> 7-j) & 0x01 == 0x01)
  712.         {
  713.           ili9320_SetPoint(x+j,y+i,charColor); // 字符颜色
  714.         }
  715.         else
  716.         {
  717.           ili9320_SetPoint(x+j,y+i,bkColor); // 背景颜色
  718.         }
  719.     }
  720.   }
  721. }
  722. /****************************************************************************
  723. * 名    称:void ili9320_Test()
  724. * 功    能:测试液晶屏
  725. * 入口参数:无
  726. * 出口参数:无
  727. * 说    明:显示彩条,测试液晶屏是否正常工作
  728. * 调用方法:ili9320_Test();
  729. ****************************************************************************/
  730. void ili9320_Test()
  731. {
  732.   u8  R_data,G_data,B_data,i,j;
  733.     ili9320_SetCursor(0x00, 0x0000);
  734.     ili9320_WriteRegister(0x0050,0x00);//水平 GRAM起始位置
  735.     ili9320_WriteRegister(0x0051,239);//水平GRAM终止位置
  736.     ili9320_WriteRegister(0x0052,0);//垂直GRAM起始位置
  737.     ili9320_WriteRegister(0x0053,319);//垂直GRAM终止位置  
  738.     Clr_Cs;
  739.     ili9320_WriteIndex(0x0022);
  740.     R_data=0;G_data=0;B_data=0;     
  741.     for(j=0;j<50;j++)//红色渐强条
  742.     {
  743.         for(i=0;i<240;i++)
  744.             {R_data=i/8;ili9320_WriteData(R_data<<11|G_data<<5|B_data);
  745.         }
  746.     }
  747.     R_data=0x1f;G_data=0x3f;B_data=0x1f;
  748.     for(j=0;j<50;j++)
  749.     {
  750.         for(i=0;i<240;i++)
  751.             {
  752.             G_data=0x3f-(i/4);
  753.             B_data=0x1f-(i/8);
  754.             ili9320_WriteData(R_data<<11|G_data<<5|B_data);
  755.             }
  756.     }
  757. //----------------------------------
  758.     R_data=0;G_data=0;B_data=0;
  759.     for(j=0;j<50;j++)//绿色渐强条
  760.     {
  761.         for(i=0;i<240;i++)
  762.             {G_data=i/4;
  763.             ili9320_WriteData(R_data<<11|G_data<<5|B_data);
  764. }
  765.     }
  766.     R_data=0x1f;G_data=0x3f;B_data=0x1f;
  767.     for(j=0;j<50;j++)
  768.     {
  769.         for(i=0;i<240;i++)
  770.             {
  771.             R_data=0x1f-(i/8);
  772.             B_data=0x1f-(i/8);
  773.             ili9320_WriteData(R_data<<11|G_data<<5|B_data);
  774.         }
  775.     }
  776. //----------------------------------
  777.     R_data=0;G_data=0;B_data=0;
  778.     for(j=0;j<60;j++)//蓝色渐强条
  779.     {
  780.         for(i=0;i<240;i++)
  781.             {B_data=i/8;ili9320_WriteData(R_data<<11|G_data<<5|B_data);
  782.             }
  783.     }
  784.     B_data=0;
  785.     R_data=0x1f;G_data=0x3f;B_data=0x1f;
  786.     for(j=0;j<60;j++)
  787.     {
  788.         for(i=0;i<240;i++)
  789.             {
  790.             G_data=0x3f-(i/4);
  791.             R_data=0x1f-(i/8);
  792.             ili9320_WriteData(R_data<<11|G_data<<5|B_data);
  793.         }
  794.     }      
  795.     Set_Cs;
  796. }
  797. /****************************************************************************
  798. * 名    称:u16 ili9320_BGR2RGB(u16 c)
  799. * 功    能:RRRRRGGGGGGBBBBB 改为 BBBBBGGGGGGRRRRR 格式
  800. * 入口参数:c      BRG 颜色值
  801. * 出口参数:RGB 颜色值
  802. * 说    明:内部函数调用
  803. * 调用方法:
  804. ****************************************************************************/
  805. u16 ili9320_BGR2RGB(u16 c)
  806. {
  807.   u16  r, g, b, rgb;
  808.   b = (c>>0)  & 0x1f;
  809.   g = (c>>5)  & 0x3f;
  810.   r = (c>>11) & 0x1f;
  811.   
  812.   rgb =  (b<<11) + (g<<5) + (r<<0);
  813.   return( rgb );
  814. }
  815. /****************************************************************************
  816. * 名    称:void ili9320_WriteIndex(u16 idx)
  817. * 功    能:写 ili9320 控制器寄存器地址
  818. * 入口参数:idx   寄存器地址
  819. * 出口参数:无
  820. * 说    明:调用前需先选中控制器,内部函数
  821. * 调用方法:ili9320_WriteIndex(0x0000);
  822. ****************************************************************************/
  823. __inline void ili9320_WriteIndex(u16 idx)
  824. {
  825.     Clr_Rs;
  826.     Set_nRd;
  827.     GPIOE->ODR = idx;
  828.     Clr_nWr;
  829.     Set_nWr;
  830. }
  831. /****************************************************************************
  832. * 名    称:void ili9320_WriteData(u16 dat)
  833. * 功    能:写 ili9320 寄存器数据
  834. * 入口参数:dat     寄存器数据
  835. * 出口参数:无
  836. * 说    明:向控制器指定地址写入数据,调用前需先写寄存器地址,内部函数
  837. * 调用方法:ili9320_WriteData(0x1030)
  838. ****************************************************************************/
  839. void ili9320_WriteData(u16 data)
  840. {
  841.     Set_Rs;
  842.     Set_nRd;
  843.       GPIOE->ODR = data;
  844.     Clr_nWr;
  845.     Set_nWr;
  846. }
  847. /****************************************************************************
  848. * 名    称:u16 ili9320_ReadData(void)
  849. * 功    能:读取控制器数据
  850. * 入口参数:无
  851. * 出口参数:返回读取到的数据
  852. * 说    明:内部函数
  853. * 调用方法:i=ili9320_ReadData();
  854. ****************************************************************************/
  855. __inline u16 ili9320_ReadData(void)
  856. {
  857. //========================================================================
  858. // **                                                                    **
  859. // ** nCS       ----\\__________________________________________/-------  **
  860. // ** RS        ------\\____________/-----------------------------------  **
  861. // ** nRD       -------------------------\\_____/---------------------  **
  862. // ** nWR       --------\\_______/--------------------------------------  **
  863. // ** DB[0:15]  ---------[index]----------[data]-----------------------  **
  864. // **                                                                    **
  865. //========================================================================
  866.     unsigned short val = 0;
  867.     Set_Rs;
  868.     Set_nWr;
  869.     Clr_nRd;
  870.     GPIOE->CRH = 0x44444444;
  871.     GPIOE->CRL = 0x44444444;
  872.     val = GPIOE->IDR;
  873.     val = GPIOE->IDR;
  874.     GPIOE->CRH = 0x33333333;
  875.     GPIOE->CRL = 0x33333333;
  876.     Set_nRd;
  877.     return val;
  878. }
  879. /****************************************************************************
  880. * 名    称:u16 ili9320_ReadRegister(u16 index)
  881. * 功    能:读取指定地址寄存器的值
  882. * 入口参数:index    寄存器地址
  883. * 出口参数:寄存器值
  884. * 说    明:内部函数
  885. * 调用方法:i=ili9320_ReadRegister(0x0022);
  886. ****************************************************************************/
  887. __inline u16 ili9320_ReadRegister(u16 index)
  888. {
  889.       Clr_Cs;
  890.     ili9320_WriteIndex(index);     
  891.     index = ili9320_ReadData();         
  892.     Set_Cs;
  893.     return index;
  894. }
  895. /****************************************************************************
  896. * 名    称:void ili9320_WriteRegister(u16 index,u16 dat)
  897. * 功    能:写指定地址寄存器的值
  898. * 入口参数:index    寄存器地址
  899. *         :dat      寄存器值
  900. * 出口参数:无
  901. * 说    明:内部函数
  902. * 调用方法:ili9320_WriteRegister(0x0000,0x0001);
  903. ****************************************************************************/
  904. __inline void ili9320_WriteRegister(u16 index,u16 dat)
  905. {
  906. /************************************************************************
  907.   **                                                                    **
  908.   ** nCS       ----\\__________________________________________/-------  **
  909.   ** RS        ------\\____________/-----------------------------------  **
  910.   ** nRD       -------------------------------------------------------  **
  911.   ** nWR       --------\\_______/--------\\_____/-----------------------  **
  912.   ** DB[0:15]  ---------[index]----------[data]-----------------------  **
  913.   **                                                                    **
  914.   ************************************************************************/
  915.     Clr_Cs;
  916.     ili9320_WriteIndex(index);      
  917.     ili9320_WriteData(dat);   
  918.     Set_Cs;
  919. }
  920. void ili9320_DrawHLine(u16 Xpos, u16 Ypos, u16 Xpos1, u16 color)
  921. {
  922.     u16 i = 0;
  923.    
  924.    
  925.    
  926.     for (i = 0; i <Xpos1-Xpos+1; i++)
  927.     {
  928.         ili9320_SetCursor(Xpos+i, Ypos);
  929.         Clr_Cs;
  930.         ili9320_WriteIndex(0x0022);
  931.         ili9320_WriteData(color);
  932.         Set_Cs;
  933.     }
  934.    
  935. }
  936. /****************************************************************************
  937. * 名    称:void ili9320_Delay(vu32 nCount)
  938. * 功    能:延时
  939. * 入口参数:nCount   延时值
  940. * 出口参数:无
  941. * 说    明:
  942. * 调用方法:ili9320_Delay(10000);
  943. ****************************************************************************/
  944. void ili9320_Delay(vu32 nCount)
  945. {
  946.   for(; nCount != 0; nCount--);
  947. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-1 08:21 , Processed in 0.181975 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表