久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 52312|回復: 91
收起左側

12864液晶用STM32驅動成功 附程序

  [復制鏈接]
ID:104835 發(fā)表于 2016-2-1 01:19 | 顯示全部樓層 |閱讀模式
試了兩天終于成功了。

我寫的這個程序,如果大家要參考移植的話,12864.c這個文件一個字也不用動,所有需要移植的部分我全部寫到12864.h文件來了。方便大家查看。

這兩天發(fā)現幾個問題特別需要注意一下。

一。要開啟功能復用IO口時鐘,我用的是PB口。STM32F10x系列的MCU復位后,PA13/14/15 & PB3/4默認配置為JTAG功能。有時我們?yōu)榱顺浞掷肕CU I/O口的資源,會把這些端口設置為普通I/O口。所以要關閉 JTAG


二。寫液晶指令或者數據的時候要注意,出錯的話也是不能顯示的。我用宏定義來寫。
#define  LCD_WriteData(x)     {LCD12864_GPIO->BSRR = x<<8 & 0xff00;LCD12864_GPIO->BRR = ((~x)<<8) & 0xff00;}
//高8位的數據


三。PB2是BOOT1,這個腳不要用,不然USB線下載不進去。


四。因為液晶要檢測忙狀態(tài),所以控制的5個引腳我設置成推挽輸出模式,但是8個數據引腳PB8~PB15我設置成開漏輸出模式。在開漏模式狀態(tài)下,對輸入寄存器的讀訪問可獲得I/O端口狀態(tài)。PB15為忙狀態(tài)檢測位。


耐心做。沒做出來的話之前的付出都白費了。

  1. #include "lcd.h"
  2. #include "stdlib.h"
  3. #include "font.h"
  4. #include "delay.h"         
  5.                                          
  6. //畫筆顏色,背景顏色
  7. u16 POINT_COLOR = 0x0000,BACK_COLOR = 0xFFFF;  
  8. u16 DeviceCode;         

  9. #if LCD_FAST_IO==1 //快速IO
  10. //寫寄存器函數
  11. void LCD_WR_REG(u8 data)
  12. {
  13.         LCD_RS_CLR;//寫地址  
  14.         LCD_CS_CLR;
  15.         DATAOUT(data);
  16.         LCD_WR_CLR;
  17.         LCD_WR_SET;
  18.         LCD_CS_SET;   
  19. }
  20. #else//正常IO
  21. //寫寄存器函數
  22. void LCD_WR_REG(u8 data)
  23. {
  24.         LCD_RS=0;//寫地址  
  25.         LCD_CS=0;
  26.         DATAOUT(data);
  27.         LCD_WR=0;
  28.         LCD_WR=1;
  29.         LCD_CS=1;   
  30. }        
  31. #endif       

  32. //寫寄存器
  33. void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue)
  34. {       
  35.         LCD_WR_REG(LCD_Reg);  
  36.         LCD_WR_DATA(LCD_RegValue);                             
  37. }          
  38. //讀寄存器
  39. u16 LCD_ReadReg(u8 LCD_Reg)
  40. {                                                                                  
  41.         u16 t;
  42.         LCD_WR_REG(LCD_Reg);  //寫入要讀的寄存器號  
  43.         GPIOB->CRL=0X88888888; //PB0-7  上拉輸入
  44.         GPIOB->CRH=0X88888888; //PB8-15 上拉輸入
  45.         GPIOB->ODR=0XFFFF;    //全部輸出高
  46. #if LCD_FAST_IO==1 //快速IO
  47.         LCD_RS_SET;
  48.         LCD_CS_CLR;
  49.         //讀取數據(讀寄存器時,并不需要讀2次)
  50.         LCD_RD_CLR;
  51.         delay_us(5);//FOR 8989,延時5us                                          
  52.         LCD_RD_SET;
  53.         t=DATAIN;  
  54.         LCD_CS_SET;
  55. #else
  56.         LCD_RS=1;
  57.         LCD_CS=0;
  58.         //讀取數據(讀寄存器時,并不需要讀2次)
  59.         LCD_RD=0;                                          
  60.         LCD_RD=1;
  61.         t=DATAIN;  
  62.         LCD_CS=1;
  63. #endif  
  64.         GPIOB->CRL=0X33333333; //PB0-7  上拉輸出
  65.         GPIOB->CRH=0X33333333; //PB8-15 上拉輸出
  66.         GPIOB->ODR=0XFFFF;    //全部輸出高
  67.         return t;  
  68. }
  69.    
  70. //開始寫GRAM
  71. void LCD_WriteRAM_Prepare(void)
  72. {
  73.         LCD_WR_REG(R34);
  74. }
  75.          
  76. //LCD寫GRAM
  77. void LCD_WriteRAM(u16 RGB_Code)
  78. {                                                            
  79.         LCD_WR_DATA(RGB_Code);//寫十六位GRAM
  80. }
  81. /******************************************************************
  82. 函數名稱:u16 LCD_BGR2RGB(u16 c)
  83. 功能說明:從ILI93xx讀出的數據為GBR格式,而我們寫入的時候為RGB格式。
  84.           通過該函數轉換。
  85. 輸入函數:c:GBR格式的顏色值
  86. 輸出函數:返回值:RGB格式的顏色值
  87. ******************************************************************/
  88. u16 LCD_BGR2RGB(u16 c)
  89. {
  90.         u16  r,g,b,rgb;   
  91.         b=(c>>0)&0x1f;
  92.         g=(c>>5)&0x3f;
  93.         r=(c>>11)&0x1f;         
  94.         rgb=(b<<11)+(g<<5)+(r<<0);                 
  95.         return(rgb);
  96. }                 
  97. /******************************************************************
  98. 函數名稱:u16 LCD_ReadPoint(u16 x,u16 y)
  99. 功能說明:讀取個某點的顏色值       
  100. 輸入函數:x:0~239  y:0~319
  101. 輸出函數:返回值:此點的顏色
  102. ******************************************************************/
  103. u16 LCD_ReadPoint(u16 x,u16 y)
  104. {
  105.         u16 t;       
  106.         if(x>=LCD_W||y>=LCD_H)return 0;//超過了范圍,直接返回                  
  107.         LCD_SetCursor(x,y);
  108.         LCD_WR_REG(R34);       //選擇GRAM地址
  109.         GPIOB->CRL=0X88888888; //PB0-7  上拉輸入
  110.         GPIOB->CRH=0X88888888; //PB8-15 上拉輸入
  111.         GPIOB->ODR=0XFFFF;     //全部輸出高
  112. #if LCD_FAST_IO==1 //快速IO
  113.         LCD_RS_SET;
  114.         LCD_CS_CLR;
  115.         //讀取數據(讀GRAM時,需要讀2次)
  116.         LCD_RD_CLR;                                          
  117.         LCD_RD_SET;
  118.         delay_us(2);//FOR 9320,延時2us                                          
  119.         //dummy READ
  120.         LCD_RD_CLR;                                          
  121.         delay_us(2);//FOR 8989,延時2us                                          
  122.         LCD_RD_SET;
  123.         t=DATAIN;  
  124.         LCD_CS_SET;
  125. #else
  126.         LCD_RS=1;
  127.         LCD_CS=0;
  128.         //讀取數據(讀GRAM時,需要讀2次)
  129.         LCD_RD=0;                                          
  130.         LCD_RD=1;
  131.         //dummy READ
  132.         LCD_RD=0;                                          
  133.         LCD_RD=1;
  134.         t=DATAIN;  
  135.         LCD_CS=1;  
  136. #endif
  137.         GPIOB->CRL=0X33333333; //PB0-7  上拉輸出
  138.         GPIOB->CRH=0X33333333; //PB8-15 上拉輸出
  139.         GPIOB->ODR=0XFFFF;    //全部輸出高  
  140.         if(DeviceCode==0X4531||DeviceCode==0X8989||DeviceCode==0XB505)return t;//這幾種IC直接返回顏色值
  141.         else return LCD_BGR2RGB(t);
  142. }
  143. /******************************************************************
  144. 函數名稱:void LCD_DisplayOn(void)
  145. 功能說明:LCD開啟顯示
  146. ******************************************************************/
  147. void LCD_DisplayOn(void)
  148. {                                          
  149.         LCD_WriteReg(R7, 0x0173); //26萬色顯示開啟
  150. }
  151.          
  152. /******************************************************************
  153. 函數名稱:void LCD_DisplayOff(void)
  154. 功能說明:LCD關閉顯示
  155. ******************************************************************/
  156. void LCD_DisplayOff(void)
  157. {          
  158.         LCD_WriteReg(R7,0x0);//關閉顯示
  159. }   
  160. /******************************************************************
  161. 函數名稱:__inline void LCD_SetCursor(u16 Xpos, u16 Ypos)
  162. 功能說明:設置光標位置
  163. 輸入參數:Xpos:橫坐標  Ypos:縱坐標
  164. 輸出參數:無
  165. ******************************************************************/
  166. __inline void LCD_SetCursor(u16 Xpos, u16 Ypos)
  167. {
  168. #if USE_HORIZONTAL==1
  169.         if(DeviceCode==0X8989)
  170.         {
  171.                 LCD_WriteReg(0X4E, Ypos);
  172.                 LCD_WriteReg(0X4F, 319-Xpos);
  173.     }else
  174.         {
  175.                 LCD_WriteReg(R32, Ypos);
  176.                 LCD_WriteReg(R33, 319-Xpos);
  177.         }                                                          
  178. #else
  179.         if(DeviceCode==0X8989)
  180.         {
  181.                 LCD_WriteReg(0X4E, Xpos);
  182.                 LCD_WriteReg(0X4F, Ypos);
  183.     }else
  184.         {
  185.                 LCD_WriteReg(R32, Xpos);
  186.                 LCD_WriteReg(R33, Ypos);
  187.         }                                                    
  188. #endif
  189. }  
  190. /******************************************************************
  191. 函數名稱:void LCD_DrawPoint(u16 x,u16 y)
  192. 功能說明:畫點
  193. 輸入參數:x:0~239  y:0~319         POINT_COLOR:此點的顏色
  194. 輸出參數:無
  195. ******************************************************************/
  196. void LCD_DrawPoint(u16 x,u16 y)
  197. {
  198.         LCD_SetCursor(x,y);                //設置光標位置
  199.         LCD_WR_REG(R34);                //開始寫入GRAM
  200.         LCD_WR_DATA(POINT_COLOR);
  201. }          
  202. /******************************************************************
  203. 函數名稱:void LCD_Init(void)
  204. 功能說明:初始化lcd

  205. 該初始化函數可以初始化各種ILI93XX液晶,但是其他函數是基于ILI9320的!
  206. 在其他型號的驅動芯片上沒有測試!
  207. ******************************************************************/
  208. void LCD_Init(void)
  209. {  
  210.                                                                                       
  211.         GPIO_InitTypeDef GPIO_InitStructure;

  212.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);
  213.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
  214.        
  215.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6;//GPIO_Pin_10
  216.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //推挽輸出
  217.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  218.         GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIOC       
  219.     //GPIO_WriteBit(GPIOC,GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6,Bit_SET);
  220.         GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_9|GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6);


  221.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;        //  
  222.         GPIO_Init(GPIOB, &GPIO_InitStructure); //GPIOB
  223.         //GPIO_WriteBit(GPIOC,GPIO_Pin_All,Bit_SET);
  224.         GPIO_SetBits(GPIOB,GPIO_Pin_All);

  225.         delay_ms(50); // delay 50 ms
  226.         LCD_WriteReg(0x0000,0x0001);
  227.         delay_ms(50); // delay 50 ms
  228.         DeviceCode = LCD_ReadReg(0x0000);   
  229.         printf(" LCD ID:%x\n",DeviceCode); //打印LCD ID  
  230.         if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325
  231.         {
  232.                   LCD_WriteReg(0x00EC,0x108F);// internal timeing  
  233.                 LCD_WriteReg(0x00EF,0x1234);// ADD
  234.                 LCD_WriteReg(0x0001,0x0100);     
  235.         LCD_WriteReg(0x0002,0x0700);//電源開啟     

  236.                 //LCD_WriteReg(0x00e7,0x0010);      
  237.         //LCD_WriteReg(0x0000,0x0001);//開啟內部時鐘
  238.         LCD_WriteReg(0x0001,0x0100);     
  239.         LCD_WriteReg(0x0002,0x0700);//電源開啟                    
  240.                 //LCD_WriteReg(0x0003,(1<<3)|(1<<4) );         //65K  RGB
  241.                 //DRIVE TABLE(寄存器 03H)
  242.                 //BIT3=AM BIT4:5=ID0:1
  243.                 //AM ID0 ID1   FUNCATION
  244.                 // 0  0   0           R->L D->U
  245.                 // 1  0   0           D->U        R->L
  246.                 // 0  1   0           L->R D->U
  247.                 // 1  1   0    D->U        L->R
  248.                 // 0  0   1           R->L U->D
  249.                 // 1  0   1    U->D        R->L
  250.                 // 0  1   1    L->R U->D 正常就用這個.
  251.                 // 1  1   1           U->D        L->R
  252.         LCD_WriteReg(0x0003,(1<<12)|(3<<4)|(0<<3) );//65K   
  253.         LCD_WriteReg(0x0004,0x0000);                                   
  254.         LCD_WriteReg(0x0008,0x0207);                   
  255.         LCD_WriteReg(0x0009,0x0000);         
  256.         LCD_WriteReg(0x000a,0x0000);//display setting         
  257.         LCD_WriteReg(0x000c,0x0001);//display setting         
  258.         LCD_WriteReg(0x000d,0x0000);//0f3c         
  259.         LCD_WriteReg(0x000f,0x0000);
  260.                 //電源配置
  261.         LCD_WriteReg(0x0010,0x0000);   
  262.         LCD_WriteReg(0x0011,0x0007);
  263.         LCD_WriteReg(0x0012,0x0000);                                                                 
  264.         LCD_WriteReg(0x0013,0x0000);                 
  265.         delay_ms(50);
  266.         LCD_WriteReg(0x0010,0x1590);   
  267.         LCD_WriteReg(0x0011,0x0227);
  268.         delay_ms(50);
  269.         LCD_WriteReg(0x0012,0x009c);                  
  270.         delay_ms(50);
  271.         LCD_WriteReg(0x0013,0x1900);   
  272.         LCD_WriteReg(0x0029,0x0023);
  273.         LCD_WriteReg(0x002b,0x000e);
  274.         delay_ms(50);
  275.         LCD_WriteReg(0x0020,0x0000);                                                            
  276.         LCD_WriteReg(0x0021,0x013f);           
  277.                 delay_ms(50);
  278.                 //伽馬校正
  279.         LCD_WriteReg(0x0030,0x0007);
  280.         LCD_WriteReg(0x0031,0x0707);   
  281.         LCD_WriteReg(0x0032,0x0006);
  282.         LCD_WriteReg(0x0035,0x0704);
  283.         LCD_WriteReg(0x0036,0x1f04);
  284.         LCD_WriteReg(0x0037,0x0004);
  285.         LCD_WriteReg(0x0038,0x0000);        
  286.         LCD_WriteReg(0x0039,0x0706);     
  287.         LCD_WriteReg(0x003c,0x0701);
  288.         LCD_WriteReg(0x003d,0x000f);
  289.         delay_ms(50);
  290.         LCD_WriteReg(0x0050,0x0000); //水平GRAM起始位置
  291.         LCD_WriteReg(0x0051,0x00ef); //水平GRAM終止位置                    
  292.         LCD_WriteReg(0x0052,0x0000); //垂直GRAM起始位置                    
  293.         LCD_WriteReg(0x0053,0x013f); //垂直GRAM終止位置  
  294.         
  295.         LCD_WriteReg(0x0060,0xa700);        
  296.         LCD_WriteReg(0x0061,0x0001);
  297.         LCD_WriteReg(0x006a,0x0000);
  298.         LCD_WriteReg(0x0080,0x0000);
  299.         LCD_WriteReg(0x0081,0x0000);
  300.         LCD_WriteReg(0x0082,0x0000);
  301.         LCD_WriteReg(0x0083,0x0000);
  302.         LCD_WriteReg(0x0084,0x0000);
  303.         LCD_WriteReg(0x0085,0x0000);
  304.       
  305.         LCD_WriteReg(0x0090,0x0010);     
  306.         LCD_WriteReg(0x0092,0x0600);  
  307.         //開啟顯示設置   
  308.         LCD_WriteReg(0x0007,0x0133);  
  309.         }else if(DeviceCode==0x9320||DeviceCode==0x9300)
  310.         {
  311.                 LCD_WriteReg(0x00,0x0000);
  312.                 LCD_WriteReg(0x01,0x0100);        //Driver Output Contral.
  313.                 LCD_WriteReg(0x02,0x0700);        //LCD Driver Waveform Contral.
  314.                 LCD_WriteReg(0x03,0x1030);//Entry Mode Set.
  315.                 //LCD_WriteReg(0x03,0x1018);        //Entry Mode Set.
  316.        
  317.                 LCD_WriteReg(0x04,0x0000);        //Scalling Contral.
  318.                 LCD_WriteReg(0x08,0x0202);        //Display Contral 2.(0x0207)
  319.                 LCD_WriteReg(0x09,0x0000);        //Display Contral 3.(0x0000)
  320.                 LCD_WriteReg(0x0a,0x0000);        //Frame Cycle Contal.(0x0000)
  321.                 LCD_WriteReg(0x0c,(1<<0));        //Extern Display Interface Contral 1.(0x0000)
  322.                 LCD_WriteReg(0x0d,0x0000);        //Frame Maker Position.
  323.                 LCD_WriteReg(0x0f,0x0000);        //Extern Display Interface Contral 2.            
  324.                 delay_ms(50);
  325.                 LCD_WriteReg(0x07,0x0101);        //Display Contral.
  326.                 delay_ms(50);                                                                   
  327.                 LCD_WriteReg(0x10,(1<<12)|(0<<8)|(1<<7)|(1<<6)|(0<<4));        //Power Control 1.(0x16b0)
  328.                 LCD_WriteReg(0x11,0x0007);                                                                //Power Control 2.(0x0001)
  329.                 LCD_WriteReg(0x12,(1<<8)|(1<<4)|(0<<0));                                //Power Control 3.(0x0138)
  330.                 LCD_WriteReg(0x13,0x0b00);                                                                //Power Control 4.
  331.                 LCD_WriteReg(0x29,0x0000);                                                                //Power Control 7.
  332.        
  333.                 LCD_WriteReg(0x2b,(1<<14)|(1<<4));            
  334.                 LCD_WriteReg(0x50,0);        //Set X Star
  335.                 //水平GRAM終止位置Set X End.
  336.                 LCD_WriteReg(0x51,239);        //Set Y Star
  337.                 LCD_WriteReg(0x52,0);        //Set Y End.t.
  338.                 LCD_WriteReg(0x53,319);        //
  339.        
  340.                 LCD_WriteReg(0x60,0x2700);        //Driver Output Control.
  341.                 LCD_WriteReg(0x61,0x0001);        //Driver Output Control.
  342.                 LCD_WriteReg(0x6a,0x0000);        //Vertical Srcoll Control.
  343.        
  344.                 LCD_WriteReg(0x80,0x0000);        //Display Position? Partial Display 1.
  345.                 LCD_WriteReg(0x81,0x0000);        //RAM Address Start? Partial Display 1.
  346.                 LCD_WriteReg(0x82,0x0000);        //RAM Address End-Partial Display 1.
  347.                 LCD_WriteReg(0x83,0x0000);        //Displsy Position? Partial Display 2.
  348.                 LCD_WriteReg(0x84,0x0000);        //RAM Address Start? Partial Display 2.
  349.                 LCD_WriteReg(0x85,0x0000);        //RAM Address End? Partial Display 2.
  350.        
  351.                 LCD_WriteReg(0x90,(0<<7)|(16<<0));        //Frame Cycle Contral.(0x0013)
  352.                 LCD_WriteReg(0x92,0x0000);        //Panel Interface Contral 2.(0x0000)
  353.                 LCD_WriteReg(0x93,0x0001);        //Panel Interface Contral 3.
  354.                 LCD_WriteReg(0x95,0x0110);        //Frame Cycle Contral.(0x0110)
  355.                 LCD_WriteReg(0x97,(0<<8));        //
  356.                 LCD_WriteReg(0x98,0x0000);        //Frame Cycle Contral.          
  357.                 LCD_WriteReg(0x07,0x0173);        //(0x0173)
  358.         }else if(DeviceCode==0x5408)
  359.         {
  360.                 LCD_WriteReg(0x01,0x0100);                                                                  
  361.                 LCD_WriteReg(0x02,0x0700);//LCD Driving Waveform Contral
  362.                 LCD_WriteReg(0x03,0x1030);//Entry Mode設置           
  363.                 //指針從左至右自上而下的自動增模式
  364.                 //Normal Mode(Window Mode disable)
  365.                 //RGB格式
  366.                 //16位數據2次傳輸的8總線設置
  367.                 LCD_WriteReg(0x04,0x0000); //Scalling Control register     
  368.                 LCD_WriteReg(0x08,0x0207); //Display Control 2
  369.                 LCD_WriteReg(0x09,0x0000); //Display Control 3         
  370.                 LCD_WriteReg(0x0A,0x0000); //Frame Cycle Control         
  371.                 LCD_WriteReg(0x0C,0x0000); //External Display Interface Control 1
  372.                 LCD_WriteReg(0x0D,0x0000); //Frame Maker Position                 
  373.                 LCD_WriteReg(0x0F,0x0000); //External Display Interface Control 2
  374.                 delay_ms(20);
  375.                 //TFT 液晶彩色圖像顯示方法14
  376.                 LCD_WriteReg(0x10,0x16B0); //0x14B0 //Power Control 1
  377.                 LCD_WriteReg(0x11,0x0001); //0x0007 //Power Control 2
  378.                 LCD_WriteReg(0x17,0x0001); //0x0000 //Power Control 3
  379.                 LCD_WriteReg(0x12,0x0138); //0x013B //Power Control 4
  380.                 LCD_WriteReg(0x13,0x0800); //0x0800 //Power Control 5
  381.                 LCD_WriteReg(0x29,0x0009); //NVM read data 2
  382.                 LCD_WriteReg(0x2a,0x0009); //NVM read data 3
  383.                 LCD_WriteReg(0xa4,0x0000);         
  384.                 LCD_WriteReg(0x50,0x0000); //設置操作窗口的X軸開始列
  385.                 LCD_WriteReg(0x51,0x00EF); //設置操作窗口的X軸結束列
  386.                 LCD_WriteReg(0x52,0x0000); //設置操作窗口的Y軸開始行
  387.                 LCD_WriteReg(0x53,0x013F); //設置操作窗口的Y軸結束行
  388.                 LCD_WriteReg(0x60,0x2700); //Driver Output Control
  389.                 //設置屏幕的點數以及掃描的起始行
  390.                 LCD_WriteReg(0x61,0x0001); //Driver Output Control
  391.                 LCD_WriteReg(0x6A,0x0000); //Vertical Scroll Control
  392.                 LCD_WriteReg(0x80,0x0000); //Display Position – Partial Display 1
  393.                 LCD_WriteReg(0x81,0x0000); //RAM Address Start – Partial Display 1
  394.                 LCD_WriteReg(0x82,0x0000); //RAM address End - Partial Display 1
  395.                 LCD_WriteReg(0x83,0x0000); //Display Position – Partial Display 2
  396.                 LCD_WriteReg(0x84,0x0000); //RAM Address Start – Partial Display 2
  397.                 LCD_WriteReg(0x85,0x0000); //RAM address End – Partail Display2
  398.                 LCD_WriteReg(0x90,0x0013); //Frame Cycle Control
  399.                 LCD_WriteReg(0x92,0x0000);  //Panel Interface Control 2
  400.                 LCD_WriteReg(0x93,0x0003); //Panel Interface control 3
  401.                 LCD_WriteReg(0x95,0x0110);  //Frame Cycle Control
  402.                 LCD_WriteReg(0x07,0x0173);                 
  403.                 delay_ms(50);
  404.         }       
  405.         else if(DeviceCode==0x1505)
  406.         {
  407.                 // second release on 3/5  ,luminance is acceptable,water wave appear during camera preview
  408.         LCD_WriteReg(0x0007,0x0000);
  409.         delay_ms(50);
  410.         LCD_WriteReg(0x0012,0x011C);//0x011A   why need to set several times?
  411.         LCD_WriteReg(0x00A4,0x0001);//NVM         
  412.         LCD_WriteReg(0x0008,0x000F);
  413.         LCD_WriteReg(0x000A,0x0008);
  414.         LCD_WriteReg(0x000D,0x0008);            
  415.                   //伽馬校正
  416.         LCD_WriteReg(0x0030,0x0707);
  417.         LCD_WriteReg(0x0031,0x0007); //0x0707
  418.         LCD_WriteReg(0x0032,0x0603);
  419.         LCD_WriteReg(0x0033,0x0700);
  420.         LCD_WriteReg(0x0034,0x0202);
  421.         LCD_WriteReg(0x0035,0x0002); //?0x0606
  422.         LCD_WriteReg(0x0036,0x1F0F);
  423.         LCD_WriteReg(0x0037,0x0707); //0x0f0f  0x0105
  424.         LCD_WriteReg(0x0038,0x0000);
  425.         LCD_WriteReg(0x0039,0x0000);
  426.         LCD_WriteReg(0x003A,0x0707);
  427.         LCD_WriteReg(0x003B,0x0000); //0x0303
  428.         LCD_WriteReg(0x003C,0x0007); //?0x0707
  429.         LCD_WriteReg(0x003D,0x0000); //0x1313//0x1f08
  430.         delay_ms(50);
  431.         LCD_WriteReg(0x0007,0x0001);
  432.         LCD_WriteReg(0x0017,0x0001);//開啟電源
  433.         delay_ms(50);
  434.                   //電源配置
  435.         LCD_WriteReg(0x0010,0x17A0);
  436.         LCD_WriteReg(0x0011,0x0217);//reference voltage VC[2:0]   Vciout = 1.00*Vcivl
  437.         LCD_WriteReg(0x0012,0x011E);//0x011c  //Vreg1out = Vcilvl*1.80   is it the same as Vgama1out ?
  438.         LCD_WriteReg(0x0013,0x0F00);//VDV[4:0]-->VCOM Amplitude VcomL = VcomH - Vcom Ampl
  439.         LCD_WriteReg(0x002A,0x0000);  
  440.         LCD_WriteReg(0x0029,0x000A);//0x0001F  Vcomh = VCM1[4:0]*Vreg1out    gate source voltage??
  441.         LCD_WriteReg(0x0012,0x013E);// 0x013C  power supply on
  442.         //Coordinates Control//
  443.         LCD_WriteReg(0x0050,0x0000);//0x0e00
  444.         LCD_WriteReg(0x0051,0x00EF);
  445.         LCD_WriteReg(0x0052,0x0000);
  446.         LCD_WriteReg(0x0053,0x013F);
  447.             //Pannel Image Control//
  448.         LCD_WriteReg(0x0060,0x2700);
  449.         LCD_WriteReg(0x0061,0x0001);
  450.         LCD_WriteReg(0x006A,0x0000);
  451.         LCD_WriteReg(0x0080,0x0000);
  452.             //Partial Image Control//
  453.         LCD_WriteReg(0x0081,0x0000);
  454.         LCD_WriteReg(0x0082,0x0000);
  455.         LCD_WriteReg(0x0083,0x0000);
  456.         LCD_WriteReg(0x0084,0x0000);
  457.         LCD_WriteReg(0x0085,0x0000);
  458.                   //Panel Interface Control//
  459.         LCD_WriteReg(0x0090,0x0013);//0x0010 frenqucy
  460.         LCD_WriteReg(0x0092,0x0300);
  461.         LCD_WriteReg(0x0093,0x0005);
  462.         LCD_WriteReg(0x0095,0x0000);
  463.         LCD_WriteReg(0x0097,0x0000);
  464.         LCD_WriteReg(0x0098,0x0000);
  465.   
  466.         LCD_WriteReg(0x0001,0x0100);
  467.         LCD_WriteReg(0x0002,0x0700);
  468.         LCD_WriteReg(0x0003,0x1030);
  469.         LCD_WriteReg(0x0004,0x0000);
  470.         LCD_WriteReg(0x000C,0x0000);
  471.         LCD_WriteReg(0x000F,0x0000);
  472.         LCD_WriteReg(0x0020,0x0000);
  473.         LCD_WriteReg(0x0021,0x0000);
  474.         LCD_WriteReg(0x0007,0x0021);
  475.         delay_ms(20);
  476.         LCD_WriteReg(0x0007,0x0061);
  477.         delay_ms(20);
  478.         LCD_WriteReg(0x0007,0x0173);
  479.         delay_ms(20);
  480.         }else if(DeviceCode==0xB505)
  481.         {
  482.                 LCD_WriteReg(0x0000,0x0000);
  483.                 LCD_WriteReg(0x0000,0x0000);
  484.                 LCD_WriteReg(0x0000,0x0000);
  485.                 LCD_WriteReg(0x0000,0x0000);
  486.                
  487.                 LCD_WriteReg(0x00a4,0x0001);
  488.                 delay_ms(20);                  
  489.                 LCD_WriteReg(0x0060,0x2700);
  490.                 LCD_WriteReg(0x0008,0x0202);
  491.                
  492.                 LCD_WriteReg(0x0030,0x0214);
  493.                 LCD_WriteReg(0x0031,0x3715);
  494.                 LCD_WriteReg(0x0032,0x0604);
  495.                 LCD_WriteReg(0x0033,0x0e16);
  496.                 LCD_WriteReg(0x0034,0x2211);
  497.                 LCD_WriteReg(0x0035,0x1500);
  498.                 LCD_WriteReg(0x0036,0x8507);
  499.                 LCD_WriteReg(0x0037,0x1407);
  500.                 LCD_WriteReg(0x0038,0x1403);
  501.                 LCD_WriteReg(0x0039,0x0020);
  502.                
  503.                 LCD_WriteReg(0x0090,0x001a);
  504.                 LCD_WriteReg(0x0010,0x0000);
  505.                 LCD_WriteReg(0x0011,0x0007);
  506.                 LCD_WriteReg(0x0012,0x0000);
  507.                 LCD_WriteReg(0x0013,0x0000);
  508.                 delay_ms(20);
  509.                
  510.                 LCD_WriteReg(0x0010,0x0730);
  511.                 LCD_WriteReg(0x0011,0x0137);
  512.                 delay_ms(20);
  513.                
  514.                 LCD_WriteReg(0x0012,0x01b8);
  515.                 delay_ms(20);
  516.                
  517.                 LCD_WriteReg(0x0013,0x0f00);
  518.                 LCD_WriteReg(0x002a,0x0080);
  519.                 LCD_WriteReg(0x0029,0x0048);
  520.                 delay_ms(20);
  521.                
  522.                 LCD_WriteReg(0x0001,0x0100);
  523.                 LCD_WriteReg(0x0002,0x0700);
  524.                 LCD_WriteReg(0x0003,0x1230);
  525.                 LCD_WriteReg(0x0008,0x0202);
  526.                 LCD_WriteReg(0x000a,0x0000);
  527.                 LCD_WriteReg(0x000c,0x0000);
  528.                 LCD_WriteReg(0x000d,0x0000);
  529.                 LCD_WriteReg(0x000e,0x0030);
  530.                 LCD_WriteReg(0x0050,0x0000);
  531.                 LCD_WriteReg(0x0051,0x00ef);
  532.                 LCD_WriteReg(0x0052,0x0000);
  533.                 LCD_WriteReg(0x0053,0x013f);
  534.                 LCD_WriteReg(0x0060,0x2700);
  535.                 LCD_WriteReg(0x0061,0x0001);
  536.                 LCD_WriteReg(0x006a,0x0000);
  537.                 //LCD_WriteReg(0x0080,0x0000);
  538.                 //LCD_WriteReg(0x0081,0x0000);
  539.                 LCD_WriteReg(0x0090,0X0011);
  540.                 LCD_WriteReg(0x0092,0x0600);
  541.                 LCD_WriteReg(0x0093,0x0402);
  542.                 LCD_WriteReg(0x0094,0x0002);
  543.                 delay_ms(20);
  544.                
  545.                 LCD_WriteReg(0x0007,0x0001);
  546.                 delay_ms(20);
  547.                 LCD_WriteReg(0x0007,0x0061);
  548.                 LCD_WriteReg(0x0007,0x0173);
  549.                
  550.                 LCD_WriteReg(0x0020,0x0000);
  551.                 LCD_WriteReg(0x0021,0x0000);          
  552.                 LCD_WriteReg(0x00,0x22);  
  553.         }else if(DeviceCode==0x8989)
  554.         {          
  555.                 LCD_WriteReg(0x0000,0x0001);//打開晶振
  556.             LCD_WriteReg(0x0003,0xA8A4);//0xA8A4
  557.             LCD_WriteReg(0x000C,0x0000);   
  558.             LCD_WriteReg(0x000D,0x080C);   
  559.             LCD_WriteReg(0x000E,0x2B00);   
  560.             LCD_WriteReg(0x001E,0x00B0);   
  561.             LCD_WriteReg(0x0001,0x2B3F);//驅動輸出控制320*240  0x6B3F
  562.             LCD_WriteReg(0x0002,0x0600);
  563.             LCD_WriteReg(0x0010,0x0000);  
  564.             LCD_WriteReg(0x0011,0x6070); //定義數據格式  16位色                 橫屏 0x6058
  565.             LCD_WriteReg(0x0005,0x0000);  
  566.             LCD_WriteReg(0x0006,0x0000);  
  567.             LCD_WriteReg(0x0016,0xEF1C);  
  568.             LCD_WriteReg(0x0017,0x0003);  
  569.             LCD_WriteReg(0x0007,0x0233); //0x0233      
  570.             LCD_WriteReg(0x000B,0x0000);  
  571.             LCD_WriteReg(0x000F,0x0000); //掃描開始地址
  572.             LCD_WriteReg(0x0041,0x0000);  
  573.             LCD_WriteReg(0x0042,0x0000);  
  574.             LCD_WriteReg(0x0048,0x0000);  
  575.             LCD_WriteReg(0x0049,0x013F);  
  576.             LCD_WriteReg(0x004A,0x0000);  
  577.             LCD_WriteReg(0x004B,0x0000);  
  578.             LCD_WriteReg(0x0044,0xEF00);  
  579.             LCD_WriteReg(0x0045,0x0000);  
  580.             LCD_WriteReg(0x0046,0x013F);  
  581.             LCD_WriteReg(0x0030,0x0707);  
  582.             LCD_WriteReg(0x0031,0x0204);  
  583.             LCD_WriteReg(0x0032,0x0204);  
  584.             LCD_WriteReg(0x0033,0x0502);  
  585.             LCD_WriteReg(0x0034,0x0507);  
  586.             LCD_WriteReg(0x0035,0x0204);  
  587.             LCD_WriteReg(0x0036,0x0204);  
  588.             LCD_WriteReg(0x0037,0x0502);  
  589.             LCD_WriteReg(0x003A,0x0302);  
  590.             LCD_WriteReg(0x003B,0x0302);  
  591.             LCD_WriteReg(0x0023,0x0000);  
  592.             LCD_WriteReg(0x0024,0x0000);  
  593.             LCD_WriteReg(0x0025,0x8000);  
  594.             LCD_WriteReg(0x004f,0);        //行首址0
  595.             LCD_WriteReg(0x004e,0);        //列首址0
  596.         }else if(DeviceCode==0x4531)
  597.         {
  598.                 LCD_WriteReg(0X00,0X0001);   
  599.                 delay_ms(10);   
  600.                 LCD_WriteReg(0X10,0X1628);   
  601.                 LCD_WriteReg(0X12,0X000e);//0x0006   
  602.                 LCD_WriteReg(0X13,0X0A39);   
  603.                 delay_ms(10);   
  604.                 LCD_WriteReg(0X11,0X0040);   
  605.                 LCD_WriteReg(0X15,0X0050);   
  606.                 delay_ms(10);   
  607.                 LCD_WriteReg(0X12,0X001e);//16   
  608.                 delay_ms(10);   
  609.                 LCD_WriteReg(0X10,0X1620);   
  610.                 LCD_WriteReg(0X13,0X2A39);   
  611.                 delay_ms(10);   
  612.                 LCD_WriteReg(0X01,0X0100);   
  613.                 LCD_WriteReg(0X02,0X0300);   
  614.                 LCD_WriteReg(0X03,0X1030);//改變方向的   
  615.                 LCD_WriteReg(0X08,0X0202);   
  616.                 LCD_WriteReg(0X0A,0X0008);   
  617.                 LCD_WriteReg(0X30,0X0000);   
  618.                 LCD_WriteReg(0X31,0X0402);   
  619.                 LCD_WriteReg(0X32,0X0106);   
  620.                 LCD_WriteReg(0X33,0X0503);   
  621.                 LCD_WriteReg(0X34,0X0104);   
  622.                 LCD_WriteReg(0X35,0X0301);   
  623.                 LCD_WriteReg(0X36,0X0707);   
  624.                 LCD_WriteReg(0X37,0X0305);   
  625.                 LCD_WriteReg(0X38,0X0208);   
  626.                 LCD_WriteReg(0X39,0X0F0B);   
  627.                 LCD_WriteReg(0X41,0X0002);   
  628.                 LCD_WriteReg(0X60,0X2700);   
  629.                 LCD_WriteReg(0X61,0X0001);   
  630.                 LCD_WriteReg(0X90,0X0210);   
  631.                 LCD_WriteReg(0X92,0X010A);   
  632.                 LCD_WriteReg(0X93,0X0004);   
  633.                 LCD_WriteReg(0XA0,0X0100);   
  634.                 LCD_WriteReg(0X07,0X0001);   
  635.                 LCD_WriteReg(0X07,0X0021);   
  636.                 LCD_WriteReg(0X07,0X0023);   
  637.                 LCD_WriteReg(0X07,0X0033);   
  638.                 LCD_WriteReg(0X07,0X0133);   
  639.                 LCD_WriteReg(0XA0,0X0000);
  640.         }else if(DeviceCode==0x4535)
  641.         {                             
  642.                 LCD_WriteReg(0X15,0X0030);   
  643.                 LCD_WriteReg(0X9A,0X0010);   
  644.                 LCD_WriteReg(0X11,0X0020);   
  645.                 LCD_WriteReg(0X10,0X3428);   
  646.                 LCD_WriteReg(0X12,0X0002);//16   
  647.                 LCD_WriteReg(0X13,0X1038);   
  648.                 delay_ms(40);   
  649.                 LCD_WriteReg(0X12,0X0012);//16   
  650.                 delay_ms(40);   
  651.                   LCD_WriteReg(0X10,0X3420);   
  652.                 LCD_WriteReg(0X13,0X3038);   
  653.                 delay_ms(70);   
  654.                 LCD_WriteReg(0X30,0X0000);   
  655.                 LCD_WriteReg(0X31,0X0402);   
  656.                 LCD_WriteReg(0X32,0X0307);   
  657.                 LCD_WriteReg(0X33,0X0304);   
  658.                 LCD_WriteReg(0X34,0X0004);   
  659.                 LCD_WriteReg(0X35,0X0401);   
  660.                 LCD_WriteReg(0X36,0X0707);   
  661.                 LCD_WriteReg(0X37,0X0305);   
  662.                 LCD_WriteReg(0X38,0X0610);   
  663.                 LCD_WriteReg(0X39,0X0610);
  664.                   
  665.                 LCD_WriteReg(0X01,0X0100);   
  666.                 LCD_WriteReg(0X02,0X0300);   
  667.                 LCD_WriteReg(0X03,0X1030);//改變方向的   
  668.                 LCD_WriteReg(0X08,0X0808);   
  669.                 LCD_WriteReg(0X0A,0X0008);   
  670.                 LCD_WriteReg(0X60,0X2700);   
  671.                 LCD_WriteReg(0X61,0X0001);   
  672.                 LCD_WriteReg(0X90,0X013E);   
  673.                 LCD_WriteReg(0X92,0X0100);   
  674.                 LCD_WriteReg(0X93,0X0100);   
  675.                 LCD_WriteReg(0XA0,0X3000);   
  676.                 LCD_WriteReg(0XA3,0X0010);   
  677.                 LCD_WriteReg(0X07,0X0001);   
  678.                 LCD_WriteReg(0X07,0X0021);   
  679.                 LCD_WriteReg(0X07,0X0023);   
  680.                 LCD_WriteReg(0X07,0X0033);   
  681.                 LCD_WriteReg(0X07,0X0133);   
  682.         }                                 
  683.         LCD_LED=1;//點亮背光         
  684.         LCD_Clear(WHITE);
  685. }                    
  686.   
  687. //清屏函數
  688. //Color:要清屏的填充色
  689. void LCD_Clear(u16 Color)
  690. {
  691.         u32 index=0;      
  692.         LCD_SetCursor(0x00,0x0000);//設置光標位置
  693.         LCD_WriteRAM_Prepare();     //開始寫入GRAM                   
  694.         for(index=0;index<76800;index++)
  695.         {
  696.                 LCD_WR_DATA(Color);   
  697.         }
  698. }   
  699. /******************************************************************
  700. 函數名稱:void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)
  701. 功能說明:在指定區(qū)域內填充指定顏色
  702. 輸入參數:區(qū)域大小: (xend-xsta)*(yend-ysta)
  703. 輸出參數:無
  704. ******************************************************************/
  705. void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)
  706. {         
  707.         u16 i,j;
  708.         u16 xlen=0;
  709. #if USE_HORIZONTAL==1
  710.         xlen=yend-ysta+1;          
  711.         for(i=xsta;i<=xend;i++)
  712.         {
  713.                  LCD_SetCursor(i,ysta);      //設置光標位置
  714.                 LCD_WriteRAM_Prepare();     //開始寫入GRAM          
  715.                 for(j=0;j<xlen;j++)LCD_WR_DATA(color);//設置光標位置           
  716.         }
  717. #else
  718.         xlen=xend-xsta+1;          
  719.         for(i=ysta;i<=yend;i++)
  720.         {
  721.                  LCD_SetCursor(xsta,i);      //設置光標位置
  722.                 LCD_WriteRAM_Prepare();     //開始寫入GRAM          
  723.                 for(j=0;j<xlen;j++)LCD_WR_DATA(color);//設置光標位置             
  724.         }
  725. #endif                                                              
  726. }  
  727. /******************************************************************
  728. 函數名稱:void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
  729. 功能說明:畫線
  730. 輸入參數:x1,y1:起點坐標         x2,y2:終點坐標  
  731. 輸出參數:無
  732. ******************************************************************/       
  733. void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)
  734. {
  735.         u16 t;
  736.         int xerr=0,yerr=0,delta_x,delta_y,distance;
  737.         int incx,incy,uRow,uCol;

  738.         delta_x=x2-x1; //計算坐標增量
  739.         delta_y=y2-y1;
  740.         uRow=x1;
  741.         uCol=y1;
  742.         if(delta_x>0)incx=1; //設置單步方向
  743.         else if(delta_x==0)incx=0;//垂直線
  744.         else {incx=-1;delta_x=-delta_x;}
  745.         if(delta_y>0)incy=1;
  746.         else if(delta_y==0)incy=0;//水平線
  747.         else{incy=-1;delta_y=-delta_y;}
  748.         if( delta_x>delta_y)distance=delta_x; //選取基本增量坐標軸
  749.         else distance=delta_y;
  750.         for(t=0;t<=distance+1;t++ )//畫線輸出
  751.         {  
  752.                 LCD_DrawPoint(uRow,uCol);//畫點
  753.                 xerr+=delta_x ;
  754.                 yerr+=delta_y ;
  755.                 if(xerr>distance)
  756.                 {
  757.                         xerr-=distance;
  758.                         uRow+=incx;
  759.                 }
  760.                 if(yerr>distance)
  761.                 {
  762.                         yerr-=distance;
  763.                         uCol+=incy;
  764.                 }
  765.         }  
  766. }   
  767. /******************************************************************
  768. 函數名稱:LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
  769. 功能說明:在指定位置畫矩形
  770. 輸入參數:x1,y1,x2,y2 坐標點
  771. 輸出參數:無
  772. ******************************************************************/       
  773. void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)
  774. {
  775.         LCD_DrawLine(x1,y1,x2,y1);
  776.         LCD_DrawLine(x1,y1,x1,y2);
  777.         LCD_DrawLine(x1,y2,x2,y2);
  778.         LCD_DrawLine(x2,y1,x2,y2);
  779. }
  780. /******************************************************************
  781. 函數名稱:void Draw_Circle(u16 x0,u16 y0,u8 r)
  782. 功能說明:在指定位置畫一個指定大小的圓
  783. 輸入參數:(x,y):中心點         r    :半徑
  784. 輸出參數:無
  785. ******************************************************************/          
  786. void Draw_Circle(u16 x0,u16 y0,u8 r)
  787. {
  788.         int a,b;
  789.         int di;
  790.         a=0;b=r;          
  791.         di=3-(r<<1);             //判斷下個點位置的標志
  792.         while(a<=b)
  793.         {
  794.                 LCD_DrawPoint(x0-b,y0-a);             //3           
  795.                 LCD_DrawPoint(x0+b,y0-a);             //0           
  796.                 LCD_DrawPoint(x0-a,y0+b);             //1      
  797.                 LCD_DrawPoint(x0-b,y0-a);             //7           
  798.                 LCD_DrawPoint(x0-a,y0-b);             //2            
  799.                 LCD_DrawPoint(x0+b,y0+a);             //4               
  800.                 LCD_DrawPoint(x0+a,y0-b);             //5
  801.                 LCD_DrawPoint(x0+a,y0+b);             //6
  802.                 LCD_DrawPoint(x0-b,y0+a);            
  803.                 a++;
  804.                 //使用Bresenham算法畫圓     
  805.                 if(di<0)di +=4*a+6;          
  806.                 else
  807.                 {
  808.                         di+=10+4*(a-b);   
  809.                         b--;
  810.                 }
  811.                 LCD_DrawPoint(x0+a,y0+b);
  812.         }
  813. }
  814. /******************************************************************
  815. 函數名稱:void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
  816. 功能說明:在指定位置顯示一個字符
  817. 輸入參數:x:0~234  y:0~308         num:要顯示的字符:" "--->"~"  
  818.                   size:字體大小 12/16
  819.                   mode:疊加方式(1)還是非疊加方式(0)
  820. 輸出參數:無
  821. ******************************************************************/
  822. void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
  823. {  
  824. #if USE_HORIZONTAL==1
  825. #define MAX_CHAR_POSX 312
  826. #define MAX_CHAR_POSY 232
  827. #else     
  828. #define MAX_CHAR_POSX 232
  829. #define MAX_CHAR_POSY 312
  830. #endif
  831.     u8 temp;
  832.     u8 pos,t;
  833.         u16 x0=x;
  834.         u16 colortemp=POINT_COLOR;      
  835.     if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;            
  836.         //設置窗口                  
  837.         num=num-' ';//得到偏移后的值
  838.         if(!mode) //非疊加方式
  839.         {
  840.                 for(pos=0;pos<size;pos++)
  841.                 {
  842.                         if(size==12)temp=asc2_1206[num][pos];//調用1206字體
  843.                         else temp=asc2_1608[num][pos];                 //調用1608字體
  844.                         for(t=0;t<size/2;t++)
  845.                     {                 
  846.                         if(temp&0x01)POINT_COLOR=colortemp;
  847.                                 else POINT_COLOR=BACK_COLOR;
  848.                                 LCD_DrawPoint(x,y);       
  849.                                 temp>>=1;
  850.                                 x++;
  851.                     }
  852.                         x=x0;
  853.                         y++;
  854.                 }       
  855.         }else//疊加方式
  856.         {
  857.                 for(pos=0;pos<size;pos++)
  858.                 {
  859.                         if(size==12)temp=asc2_1206[num][pos];//調用1206字體
  860.                         else temp=asc2_1608[num][pos];                 //調用1608字體
  861.                         for(t=0;t<size/2;t++)
  862.                     {                 
  863.                         if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//畫一個點     
  864.                         temp>>=1;
  865.                     }
  866.                 }
  867.         }
  868.         POINT_COLOR=colortemp;                                          
  869. }   
  870. //m^n函數
  871. u32 mypow(u8 m,u8 n)
  872. {
  873.         u32 result=1;         
  874.         while(n--)result*=m;   
  875.         return result;
  876. }                         
  877. /******************************************************************
  878. 函數名稱:void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
  879. 功能說明:顯示2個數字
  880. 輸入參數:x,y:起點坐標 len :數字的位數 /size:字體大小  color:顏色
  881.                   num:數值(0~4294967295);         
  882. 輸出參數:無
  883. ******************************************************************/
  884. void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)
  885. {                
  886.         u8 t,temp;
  887.         u8 enshow=0;                                                  
  888.         for(t=0;t<len;t++)
  889.         {
  890.                 temp=(num/mypow(10,len-t-1))%10;
  891.                 if(enshow==0&&t<(len-1))
  892.                 {
  893.                         if(temp==0)
  894.                         {
  895.                                 LCD_ShowChar(x+(size/2)*t,y,' ',size,0);
  896.                                 continue;
  897.                         }else enshow=1;
  898.                           
  899.                 }
  900.                  LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,0);
  901.         }
  902. }
  903. /******************************************************************
  904. 函數名稱:void LCD_Show2Num(u16 x,u16 y,u16 num,u8 len,u8 size,u8 mode)
  905. 功能說明:顯示2個數字
  906. 輸入參數:x,y:起點坐標 size:字體大小   num:數值(0~99);
  907.                   mode:模式0,填充模式;1,疊加模式       
  908. 輸出參數:無
  909. ******************************************************************/
  910. void LCD_Show2Num(u16 x,u16 y,u16 num,u8 len,u8 size,u8 mode)
  911. {                
  912.         u8 t,temp;                                                  
  913.         for(t=0;t<len;t++)
  914.         {
  915.                 temp=(num/mypow(10,len-t-1))%10;
  916.                  LCD_ShowChar(x+(size/2)*t,y,temp+'0',size,mode);
  917.         }
  918. }
  919. /******************************************************************
  920. 函數名稱:void LCD_ShowString(u16 x,u16 y,const u8 *p)
  921. 功能說明:顯示字符串,用16字體
  922. 輸入參數:x,y:起點坐標    *p:字符串起始地址
  923. 輸出參數:無
  924. ******************************************************************/
  925. void LCD_ShowString(u16 x,u16 y,const u8 *p)
  926. {         
  927.     while(*p!='\0')
  928.     {      
  929.         if(x>MAX_CHAR_POSX){x=0;y+=16;}
  930.         if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}
  931.         LCD_ShowChar(x,y,*p,16,0);
  932.         x+=8;
  933.         p++;
  934.     }  
  935. }
復制代碼



DIS12864.zip

305.42 KB, 下載次數: 735, 下載積分: 黑幣 -5

評分

參與人數 6黑幣 +54 收起 理由
電子科123 + 30 共享資料的黑幣獎勵!
ioe + 5 很給力!
swap1 + 5 5
蘆葦劫 + 8 贊一個!
waerdeng + 5 共享資料的黑幣獎勵!
1821164 + 1 贊一個!

查看全部評分

回復

使用道具 舉報

ID:257024 發(fā)表于 2017-12-15 17:15 | 顯示全部樓層
很好的分享。希望能用得上。
以前我移植普中51開發(fā)板的12864mini屏示范程序到STM32,可是沒有成功。
有空再按樓主的代碼試試看。謝謝分享。
回復

使用道具 舉報

ID:117398 發(fā)表于 2016-4-28 20:57 | 顯示全部樓層
勝利不少事,謝謝了
回復

使用道具 舉報

ID:117398 發(fā)表于 2016-4-28 20:58 | 顯示全部樓層
好東西,收藏了
回復

使用道具 舉報

ID:89072 發(fā)表于 2016-5-6 23:00 | 顯示全部樓層
好東西,收藏了謝謝樓主
回復

使用道具 舉報

ID:117047 發(fā)表于 2016-5-14 20:21 | 顯示全部樓層
正在學習STM32,謝謝分享!
回復

使用道具 舉報

ID:121880 發(fā)表于 2016-5-21 00:17 來自觸屏版 | 顯示全部樓層
很受用
回復

使用道具 舉報

ID:117047 發(fā)表于 2016-5-21 07:38 | 顯示全部樓層
感謝分享,之前用arduino驅動,現在學STM32。
回復

使用道具 舉報

ID:124191 發(fā)表于 2016-5-31 10:30 | 顯示全部樓層
收藏下!
回復

使用道具 舉報

ID:126035 發(fā)表于 2016-6-10 00:10 | 顯示全部樓層
怎么復制代碼跟壓縮包里的代碼不一樣呢
回復

使用道具 舉報

ID:62929 發(fā)表于 2016-6-10 07:15 來自觸屏版 | 顯示全部樓層
菜鳥路過學習啦!
回復

使用道具 舉報

ID:126035 發(fā)表于 2016-6-10 11:16 | 顯示全部樓層
Mingfly 發(fā)表于 2016-4-28 20:57
勝利不少事,謝謝了

怎么弄的,我的怎么只亮不顯示呢
回復

使用道具 舉報

ID:84495 發(fā)表于 2016-6-16 09:07 | 顯示全部樓層
看來51想學stm32,困難重重啊
回復

使用道具 舉報

ID:135031 發(fā)表于 2016-7-26 21:21 | 顯示全部樓層
請問8個數據引腳PB8~PB15設置成開漏輸出模式,那么你電路設計上是不是要把PB8~PB15接上拉電阻?正在做這個,急切想知道?還有請問你液晶屏C86引腳接高還是低?
回復

使用道具 舉報

ID:138059 發(fā)表于 2016-8-31 16:06 | 顯示全部樓層
貼出來的代碼是ILI93xx的LCD驅動程序,下載的文件中有個12864.c的,就是這個,并且在文件管理器中刪除掉lcd.c這個文件,編譯即可通過。具體是否可行晚上實驗
回復

使用道具 舉報

ID:144614 發(fā)表于 2016-10-26 19:20 | 顯示全部樓層
正巧   在玩12864
回復

使用道具 舉報

ID:145531 發(fā)表于 2016-11-1 16:09 | 顯示全部樓層
大神好棒!正好需求,拿走多謝多謝多謝多謝!
回復

使用道具 舉報

ID:150611 發(fā)表于 2016-11-27 20:26 | 顯示全部樓層
謝謝分享,項目中需要,分析的不錯
回復

使用道具 舉報

ID:159199 發(fā)表于 2017-1-1 15:50 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:164504 發(fā)表于 2017-2-13 20:32 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:165380 發(fā)表于 2017-2-19 14:01 | 顯示全部樓層
厲害喲。學習了
回復

使用道具 舉報

ID:165456 發(fā)表于 2017-2-20 21:14 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:165608 發(fā)表于 2017-2-21 07:09 | 顯示全部樓層
菜鳥路過學習啦!
回復

使用道具 舉報

ID:167578 發(fā)表于 2017-3-2 09:22 | 顯示全部樓層
希望這次能行
回復

使用道具 舉報

ID:167578 發(fā)表于 2017-3-2 09:25 | 顯示全部樓層
希望這次可以,可以的話我會反饋的
回復

使用道具 舉報

ID:183878 發(fā)表于 2017-3-27 17:12 | 顯示全部樓層
感謝樓主,正在學習用STM32驅動192160液晶
回復

使用道具 舉報

ID:192284 發(fā)表于 2017-4-22 11:33 | 顯示全部樓層
很好的參考學習程序,謝謝樓主分享
回復

使用道具 舉報

ID:204809 發(fā)表于 2017-5-29 10:09 來自觸屏版 | 顯示全部樓層
不錯哦
回復

使用道具 舉報

ID:205909 發(fā)表于 2017-5-29 19:41 | 顯示全部樓層
樓主你好,我想請問一下,這段程序一開始include的LCD,FONT,STDLIB,DELAY,都在程序包里面嗎?還是要自己再寫?(新人沒幣下載程序包,只能先問問了,不好意思)
回復

使用道具 舉報

ID:205909 發(fā)表于 2017-5-29 19:44 | 顯示全部樓層
樓主你好,請問一下,這個程序一開頭include的LCD,FONT,STDLIB,DELAY什么的,都在這個壓縮包里面嗎?還要自己寫嗎?(新人沒幣,只能先問問了,不好意思了)
回復

使用道具 舉報

ID:205925 發(fā)表于 2017-5-29 20:44 | 顯示全部樓層
樓主你好,請問一下,這個程序一開頭include的LCD,FONT,STDLIB,DELAY什么的,都在這個壓縮包里面嗎?還要自己寫嗎?(新人沒幣,只能先問問了,不好意思了)
回復

使用道具 舉報

ID:215023 發(fā)表于 2017-6-27 21:56 | 顯示全部樓層
請教下,我想把這個程序移植到stm32f103ZE芯片上,需要注意什么啊?我直接吧你程序中對應的IO口插上就可以了嗎?
回復

使用道具 舉報

ID:215349 發(fā)表于 2017-6-28 09:47 | 顯示全部樓層
謝謝分享  新人學習一下
回復

使用道具 舉報

ID:216904 發(fā)表于 2017-7-3 20:27 | 顯示全部樓層
謝謝分享  新人學習一下
回復

使用道具 舉報

ID:168582 發(fā)表于 2017-7-22 10:27 | 顯示全部樓層
謝謝樓主分享
回復

使用道具 舉報

ID:224920 發(fā)表于 2017-8-5 10:57 | 顯示全部樓層
謝謝樓主~~
回復

使用道具 舉報

ID:226091 發(fā)表于 2017-8-9 13:59 | 顯示全部樓層
感謝感謝,省了不少事,雖然還沒調
回復

使用道具 舉報

ID:228225 發(fā)表于 2017-8-18 10:12 | 顯示全部樓層
頂一個
回復

使用道具 舉報

ID:228225 發(fā)表于 2017-8-18 10:14 | 顯示全部樓層
下載看看
回復

使用道具 舉報

ID:230079 發(fā)表于 2017-8-30 15:38 | 顯示全部樓層
好東西,謝謝
回復

使用道具 舉報

ID:233012 發(fā)表于 2017-9-14 09:24 | 顯示全部樓層

能發(fā)給我一份嗎?謝謝。2651145773@QQ.COM
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区日韩精品 | 免费簧片视频 | 综合五月 | 成人在线小视频 | 91在线观看免费 | 99pao成人国产永久免费视频 | 国产免费看| 中文字幕不卡在线观看 | 亚洲欧美日韩在线不卡 | 99精品免费久久久久久久久日本 | 亚洲国产精品视频 | 成人精品一区二区三区中文字幕 | 日韩免费在线观看视频 | 99久久久久 | 成人网av | 久久五月婷 | 亚洲成av人片在线观看 | 亚洲人人 | 国产精品日韩欧美一区二区三区 | 午夜久久久久久久久久一区二区 | 久久国产一区二区三区 | 欧美日韩国产一区二区三区 | 久久久成人免费视频 | 久久蜜桃精品 | 精品国产一区二区三区免费 | 欧美一区二区免费视频 | 日本人做爰大片免费观看一老师 | 9久9久 | 96国产精品久久久久aⅴ四区 | 国产午夜精品视频 | 色综合久久天天综合网 | 国内自拍偷拍一区 | 一级无毛片 | 国产精品一区二区三区久久 | 欧美日本亚洲 | 亚洲黄色在线免费观看 | 做a的各种视频 | 伊人超碰在线 | 99精品电影 | 黄a免费网络 | 国产精品一区二区久久久久 |