⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 source.c

📁 NOKIA手机液晶屏I3510的应用例程
💻 C
字号:
// Reset = PortB.4 
// CS    = PortB.0   (~SS) 
// GND   = GND 
// SData = PortB.2   (MOSI) 
// SClk  = PORTB.1   (SCK) 

#include <inttypes.h> 
#include <avr/io.h> 

#define CS      0 
#define SCLK   1 
#define SDATA   2 
#define RESET   4 

#define CMD      0 
#define DATA   1 

void delay5ms(void) { 
   volatile int i; 
   for(i=0; i<2200; i++); 
} 

void send(uint8_t data, uint8_t cd) { 
   // CS auf Low setzen 
   PORTB &= ~(0x01 << CS); 
    
   // Kommando oder Daten? 
   PORTB &= ~(0x01 << SCLK); 
   if(cd == CMD) 
      PORTB &= ~(0x01 << SDATA); 
   else 
      PORTB |= 0x01 << SDATA; 
   PORTB |= 0x01 << SCLK; 
    
   // 1. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x80) == 0x80) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
    
   // 2. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x40) == 0x40) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
    
   // 3. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x20) == 0x20) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
    
   // 4. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x10) == 0x10) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
    
   // 5. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x08) == 0x08) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
    
   // 6. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x04) == 0x04) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
    
   // 7. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x02) == 0x02) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
    
   // 8. Bit (MSB) 
   PORTB &= ~(0x01 << SCLK); 
   if((data & 0x01) == 0x01) 
      PORTB |= 0x01 << SDATA; 
   else 
      PORTB &= ~(0x01 << SDATA); 
   PORTB |= 0x01 << SCLK; 
} 

void cs(void) { 
   PORTB |= 0x01 << CS;   // CS wieder auf 1 
} 

int main(void) { 
   uint16_t i; 
   uint8_t  s; 
    
   DDRB = 0xFF;      // PortB = Output 
    
   // LCD Hardware Reset 
   PORTB &= ~(0x01 << 4); 
   delay5ms(); 
   PORTB |= 0x01 << 4; 
    
   PORTB |= 0x01 << CS; 
   PORTB |= 0x01 << SCLK; 
   PORTB |= 0x01 << SDATA; 
    
   send(0x01, CMD);      // LCD Software Reset 
   cs(); 
   delay5ms(); 
    
   send(0xC6, CMD);      // Initial Escape 
   cs(); 
    
   send(0xB9, CMD);      // Refresh set 
   send(0x00, DATA); 
   cs(); 
    
   send(0xB6, CMD);      // Display Control 
   send(128, DATA); 
   send(128, DATA); 
   send(129, DATA); 
   send(84, DATA); 
   send(69, DATA); 
   send(82, DATA); 
   send(67, DATA); 
   cs(); 
    
   send(0xB3, CMD);      // Gray Scale Position 
   send(1, DATA); 
   send(2, DATA); 
   send(4, DATA); 
   send(8, DATA); 
   send(16, DATA); 
   send(30, DATA); 
   send(40, DATA); 
   send(50, DATA); 
   send(60, DATA); 
   send(70, DATA); 
   send(80, DATA); 
   send(90, DATA); 
   send(100, DATA); 
   send(110, DATA); 
   send(127, DATA); 
   cs(); 
    
   send(0xB5, CMD);      // Gamma Curve Set 
   send(1, DATA); 
   cs(); 
    
   send(0xBE, CMD);      // Power Control 
   send(4, DATA); 
   cs(); 
    
   send(0x11, CMD);      // Sleep out 
   cs(); 
    
   send(0xB7, CMD);      // Temperature gradient set 
   for(i=0; i<14; i++) { 
      send(0, DATA); 
   } 
   cs(); 
    
   send(0x03, CMD);      // Booster Voltage ON 
   cs(); 
    
   for(i=0; i<8; i++) {   // Booster Voltage stabilisieren lassen 
      delay5ms(); 
   } 
    
   send(0x20, CMD);      // Inversion control 
   cs(); 
    
   send(0x25, CMD);      // Write contrast 
   send(63, DATA); 
   cs(); 
    
    
   send(0x2C, CMD);      // Memory Write 
    
   // roter Balken 
   s=0; 
   for(i=0; i<1176; i++) { 
      if(s == 0) send(15, DATA); 
      else if(s == 1) send(240, DATA); 
      else if(s == 2) send(255, DATA); 
       
      if(++s == 3) 
         s = 0; 
   } 
    
   // gr黱er Balken 
   s=0; 
   for(i=0; i<1176; i++) { 
      if(s == 0) send(240, DATA); 
      else if(s == 1) send(255, DATA); 
      else if(s == 2) send(15, DATA); 
       
      if(++s == 3) 
         s = 0; 
   } 
    
   // blauer Balken 
   s=0; 
   for(i=0; i<1176; i++) { 
      if(s == 0) send(255, DATA); 
      else if(s == 1) send(15, DATA); 
      else if(s == 2) send(240, DATA); 
       
      if(++s == 3) 
         s = 0; 
   } 
    
   // gelber Balken 
   s=0; 
   for(i=0; i<1176; i++) { 
      if(s == 0) send(0, DATA); 
      else if(s == 1) send(240, DATA); 
      else if(s == 2) send(15, DATA); 
       
      if(++s == 3) 
         s = 0; 
   } 
    
   // magenta Balken 
   s=0; 
   for(i=0; i<1176; i++) { 
      if(s == 0) send(15, DATA); 
      else if(s == 1) send(0, DATA); 
      else if(s == 2) send(240, DATA); 
       
      if(++s == 3) 
         s = 0; 
   } 
    
   // cyan Balken 
   s=0; 
   for(i=0; i<1176; i++) { 
      if(s == 0) send(240, DATA); 
      else if(s == 1) send(15, DATA); 
      else if(s == 2) send(0, DATA); 
       
      if(++s == 3) 
         s = 0; 
   } 
    
   // wei遝r Balken 
   for(i=0; i<1176; i++) { 
      send(0, DATA); 
   } 
    
   // schwarzer Balken 
   for(i=0; i<1617; i++) { 
      send(255, DATA); 
   } 
   cs(); 
    
   send(0x29, CMD);      // Display On 
   cs(); 
    
   while(1) {} 
    
   return 0; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -