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

📄 test.c

📁 ATmega16应用例子
💻 C
字号:
//ICC-AVR application builder : 2005-4-16 21:20:40
// Target : M8
// Crystal: 8.0000Mhz

#include <iom16v.h>
#include <macros.h>

#define csl asm("cbi 0x18,0") //PB0
#define csh asm("sbi 0x18,0")

#define restl asm("cbi 0x12,1") //PB4
#define resth asm("sbi 0x12,1")

#define sclkl asm("cbi 0x18,7") //PB5
#define sclkh asm("sbi 0x18,7")

#define sdatal asm("cbi 0x18,5") //PB3
#define sdatah asm("sbi 0x18,5")
#define CS      3 
#define SCLK    7 
#define SDATA   5 
#define RESET   2 

#define CMD     0 
#define DATA    1 

void port_init(void)
{
 PORTB = 0xFF;
 DDRB  = 0x00;
 PORTC = 0x7F; //m103 output only
 DDRC  = 0x00;
 PORTD = 0xFF;
 DDRD  = 0x00;
}

//call this routine to initialise all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 //CLI(); //disable all interrupts
 port_init();

 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x00; //timer interrupt sources
 //SEI(); //re-enable interrupts
 //all peripherals are now initialised
}

//
//ICC-AVR application builder : 2005-4-16 21:20:40
// Target : M8
// Crystal: 8.0000Mhz


 

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

//----------------------------
//发送指令或数据       硬件SPI
//速度快,没有刷屏现象
//----------------------------
void send(unsigned char myData,unsigned char cd)
{
if(cd==DATA)
{
	csl;
	sclkl;
	sdatah;
	sclkh; 
}
else
{
	csl;

	sclkl;
	sdatal;
	sclkh;

}	
	 SPCR = 0x50; //setup SPI

	 SPDR = myData;

	  while(!(SPSR & 0x80));
	
	  csh;
	  SPCR = 0x00;

	
}

//----------------------------
//发送指令或数据   软件模拟SPI
//速度较慢,有刷屏现象
//----------------------------
void send2(char data, char cd)
{ 
   // CS auf Low setzen 
   PORTD &= ~(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) { 
   PORTD |= 0x01 << CS;   // CS wieder auf 1 
} 

int main(void) { 
   int i; 
   char  s; 
     init_devices();
   DDRB = 0xFF;      // PortB = Output 
   DDRD = 0xff;
   // LCD Hardware Reset 
   PORTD &= ~(0x01 << 0); 
   delay5ms(); 
   PORTD |= 0x01 << 0; 
    
   PORTD |= 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(3, DATA); 
   cs(); 
   
   send(0x3A, CMD);      // Power Control 
   send(0b00000011, 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(141, DATA); 
      else if(s == 1) send(56, DATA); 
      else if(s == 2) send(211, 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 + -