📄 disp.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 + -