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