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

📄 test.c~

📁 dds 9850 的驱动代码
💻 C~
字号:
// Reset = PORTC.4 
// CS    = PORTC.0   (~SS) 
// GND   = GND 
// SData = PORTC.2   (MOSI) 
// SClk  = PORTC.1   (SCK) 

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

#define DATA  7
#define SCLK  7
#define SDATA 6
#define CMD   5
#define CS    5
#define RESET 4

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

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

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

int main(void) { 
   unsigned int i; 
   unsigned char  s; 
    
   DDRB = 0xFF;      // PORTC = Output 
    
   // LCD Hardware Reset 
   PORTC &= ~(0x01 << 4); 
   delay5ms(); 
   PORTC |= 0x01 << 4; 
    
   PORTC |= 0x01 << CS; 
   PORTC |= 0x01 << SCLK; 
   PORTC |= 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 + -