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

📄 disp.c

📁 AVR Siemens colour display driver, UART 2 LCD
💻 C
字号:
#include <spi.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>
#include "fonts.h"
#include "defines.c"
#include "disp.h"

u08 buffer[25];
u08 posx,posy;

  



 const ui16 INIT0[2]={0xFDFD,0xFDFD};
// INIT1: ; 24bytes
 const ui16 INIT1[10]={0xEF00,0xEE04,0x1B04,0xFEFE,0xFEFE,0xEF90,0x4A04,0x7F3F,0xEE04,0x4306};

//INIT2: ; 40bytes
 const ui16 INIT2[20]={0xEF90,0x0983,0x0800,0x0BAF,0x0A00,0x0500,0x0600,0x0700,0xEF00,0xEE0C,0xEF90,0x0080,0xEFB0,0x4902,
0xEF00,0x7F01,0xE181,0xE202,0xE276,0xE183};

//INIT3: ; 2bytes
 const ui16 INIT3[1]={0x8001};
 
 
 

//**************************************************************************************************


void spi_send(u08 dat)
{  
 #asm
    ld    r26,y             //R26=dat
 
    sbi 0xd,7               //enable spi 
    out 0xf,r26             //r26->spdr     
SPI_SEND_2: 
    sbis    0xe,7            // ? spif
    rjmp    SPI_SEND_2 
    sbi 0x18,0            //set cs
    #endasm
}

//**************************************************************************************************

void lcd_wrcmd16(ui16 dat)
{
  lcd_wrcmd((dat>>8));
  lcd_wrcmd(dat);
}
//**************************************************************************************************
void lcd_wrdat16(ui16 dat)
{
  lcd_wrdata(dat>>8);
  lcd_wrdata(dat);
}
//**************************************************************************************************

//===========================================port_init==========================================================
void lcd_port_init(void)
{
         // setup serial data I/O pins 
         //lcd_ddr |= (1<<lcd_reset)|(1<<lcd_cs)|(1<<lcd_rs);// 溴豚屐 恹躅溧扈
         
         //lcd_port &=~ (1<<lcd_reset);//0
         //lcd_ddr |= (1<<lcd_reset); //1
         PORTD=0x00;
         
         
         

         lcd_ddr |= (1<<lcd_mosi); //1
         
         lcd_port |= (1<<lcd_cs);//1
         lcd_ddr  |= (1<<lcd_cs);//1
         
         lcd_port &=~ (1<<lcd_sck);//0
         lcd_ddr |= (1<<lcd_sck); //1
         
         lcd_port |= (1<<lcd_miso);//1  
         
         lcd_port |= (1<<lcd_rs);//1
         lcd_ddr  |= (1<<lcd_rs);//1
         /*
         lcd_port.lcd_reset=0;       // reset display      
         lcd_ddr.lcd_reset=1;        // set reset as output
    

         lcd_ddr.LCD_MOSI=1;         // MOSI must be set as output for SPI   
    
         lcd_port.lcd_cs=1;          // deselect display 
         lcd_ddr.lcd_cs=1;           // SS must be output for Master mode to work


         lcd_port.LCD_SCK =0;        // set SCK low
         lcd_ddr.LCD_SCK=1;          // set SCK as output 
    
         lcd_port.LCD_MISO=1;        // enable pull up of MISO to avoid floating input

         lcd_port.lcd_rs=1;          // RS=high
         lcd_ddr.lcd_rs=1;           // RS is output
        */

         //SPCR = (1<<SPE)|(1<<MSTR); 
         //SPSR = (1<<SPI2X);
 
         delay_ms(4);                 // wait one ms to have a nice reset
                                                  
         //lcd_port |= (1<<lcd_reset); //1        // release reset
         PORTD=0x20;

 }
 //**************************************************************************************************

void lcd_init(void)
{
 ui16 i=0;
 
    
 lcd_port |= (1<<lcd_cs); //1  //deselect display
 lcd_ddr  |= (1<<lcd_cs);//1 
     
 lcd_port_init();

 lcd_port &=~ (1<<lcd_cs);//0// select display
 delay_ms(4);
 lcd_port |= (1<<lcd_rs); //1// RS high, Command
 
 for (i=0;i<2;i++) lcd_wrcmd16(INIT0[i]);
 delay_ms(51);
 
 for (i=0;i<10;i++) lcd_wrcmd16(INIT1[i]);
 delay_ms(7);
 for (i=0;i<20;i++) lcd_wrcmd16(INIT2[i]);
 delay_ms(50);
 for (i=0;i<1;i++) lcd_wrcmd16(INIT3[i]);
 delay_ms(5);

 //玎腓怅

⌨️ 快捷键说明

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