屏
16Bit
main.c
#include "stc15w4k56s4.h" #define RS P54 #define CS P43 #define RD P42 #define WR P41 #define RST P40 void delayms(unsigned int ms) { unsigned int cnt = 0; while (ms--) { for (cnt = 0; cnt < 1000; cnt++) { } } } void lcd_write(unsigned char rs, unsigned int val) { CS = 0; if (rs) { RS = 1; } else { RS = 0; } RD = 1; WR = 1; P0 = val; P2 = (val >> 8); WR = 0; WR = 1; CS = 1; } void lcd_write_cmd(unsigned int val) { lcd_write(0, val); } void lcd_write_data(unsigned int val) { lcd_write(1, val); } void lcd_set_color(void) { unsigned int i = 0; unsigned int j = 0; unsigned int color[] = { 0xf800, 0x7e0, 0x1f, 0 }; lcd_write_cmd(0x002a); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x00ef); lcd_write_cmd(0x002b); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0001); lcd_write_data(0x003f); lcd_write_cmd(0x002c); for (i = 0; i < 240; i++) { for (j = 0; j < 320; j++) { lcd_write_data(color[i / 80]); } } } void lcd_init(void) { delayms(120); lcd_write_cmd(0x0001); delayms(120); lcd_write_cmd(0x00f0); lcd_write_data(0x005a); lcd_write_data(0x005a); lcd_write_cmd(0x00f3); lcd_write_data(0x0000); lcd_write_cmd(0x00ff); lcd_write_data(0x0030); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0040); lcd_write_cmd(0x0011); delayms(120); lcd_write_cmd(0x00f3); lcd_write_data(0x0001); lcd_write_data(0x0026); lcd_write_data(0x0026); lcd_write_data(0x0007); lcd_write_data(0x0011); lcd_write_data(0x0057); lcd_write_data(0x0057); lcd_write_data(0x002c); lcd_write_cmd(0x00f4); lcd_write_data(0x0060); lcd_write_data(0x0060); lcd_write_data(0x006f); lcd_write_data(0x006f); lcd_write_data(0x0044); lcd_write_cmd(0x00f5); lcd_write_data(0x0012); lcd_write_data(0x0011); lcd_write_data(0x0003); lcd_write_data(0x00f0); lcd_write_data(0x0030); lcd_write_data(0x001f); delayms(10); lcd_write_cmd(0x00f3); lcd_write_data(0x0003); delayms(20); lcd_write_cmd(0x00ff); lcd_write_data(0x0030); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0070); delayms(20); lcd_write_cmd(0x00f3); lcd_write_data(0x000f); lcd_write_cmd(0x00ff); lcd_write_data(0x0030); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0078); delayms(20); lcd_write_cmd(0x00f3); lcd_write_data(0x001f); lcd_write_cmd(0x00ff); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0078); delayms(20); lcd_write_cmd(0x00f3); lcd_write_data(0x001f); delayms(40); lcd_write_cmd(0x00f3); lcd_write_data(0x00ff); lcd_write_data(0x0026); lcd_write_data(0x0026); lcd_write_data(0x0007); lcd_write_data(0x0055); lcd_write_data(0x0057); lcd_write_data(0x0057); lcd_write_data(0x002c); delayms(50); lcd_write_cmd(0x0011); delayms(100); lcd_write_cmd(0x00f2); lcd_write_data(0x0013); lcd_write_data(0x0013); lcd_write_data(0x0001); lcd_write_data(0x0008); lcd_write_data(0x0008); lcd_write_data(0x0008); lcd_write_data(0x0008); lcd_write_data(0x0010); lcd_write_data(0x0000); lcd_write_data(0x0010); lcd_write_data(0x0010); lcd_write_cmd(0x00fd); lcd_write_data(0x0055); lcd_write_cmd(0x0035); lcd_write_data(0x0000); lcd_write_cmd(0x0036); lcd_write_data(0x0048); lcd_write_cmd(0x003a); lcd_write_data(0x0055); lcd_write_cmd(0x00fe); lcd_write_data(0x0016); lcd_write_data(0x0016); lcd_write_data(0x0028); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0006); lcd_write_cmd(0x00f6); lcd_write_data(0x0010); lcd_write_data(0x0080); lcd_write_data(0x0000); lcd_write_data(0x0010); lcd_write_cmd(0x0051); lcd_write_data(0x00ff); lcd_write_cmd(0x0053); lcd_write_data(0x0000); lcd_write_cmd(0x0055); lcd_write_data(0x0000); lcd_write_cmd(0x005e); lcd_write_data(0x0000); lcd_write_cmd(0x00ca); lcd_write_data(0x0080); lcd_write_data(0x0080); lcd_write_data(0x0020); lcd_write_cmd(0x00cb); lcd_write_data(0x0001); lcd_write_cmd(0x00f7); lcd_write_data(0x0092); lcd_write_data(0x001a); lcd_write_data(0x001e); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x001d); lcd_write_data(0x001e); lcd_write_data(0x0026); lcd_write_data(0x001c); lcd_write_data(0x001c); lcd_write_data(0x0024); lcd_write_data(0x001b); lcd_write_data(0x0009); lcd_write_data(0x0011); lcd_write_data(0x0018); lcd_write_cmd(0x00f8); lcd_write_data(0x001a); lcd_write_data(0x0000); lcd_write_data(0x001e); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x0024); lcd_write_data(0x001e); lcd_write_data(0x001f); lcd_write_data(0x0027); lcd_write_data(0x001e); lcd_write_data(0x000a); lcd_write_data(0x0011); lcd_write_data(0x0011); lcd_write_cmd(0x00f9); lcd_write_data(0x0086); lcd_write_data(0x001a); lcd_write_data(0x0010); lcd_write_data(0x0010); lcd_write_data(0x001d); lcd_write_data(0x001b); lcd_write_data(0x001f); lcd_write_data(0x0027); lcd_write_data(0x001b); lcd_write_data(0x001f); lcd_write_data(0x0027); lcd_write_data(0x001e); lcd_write_data(0x000a); lcd_write_data(0x0011); lcd_write_data(0x0018); lcd_write_cmd(0x00fa); lcd_write_data(0x001a); lcd_write_data(0x0000); lcd_write_data(0x001e); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x0024); lcd_write_data(0x001e); lcd_write_data(0x001f); lcd_write_data(0x0027); lcd_write_data(0x001e); lcd_write_data(0x000a); lcd_write_data(0x0011); lcd_write_data(0x0011); lcd_write_cmd(0x00fb); lcd_write_data(0x0080); lcd_write_data(0x001a); lcd_write_data(0x001e); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x001b); lcd_write_data(0x001e); lcd_write_data(0x0026); lcd_write_data(0x0017); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x0014); lcd_write_data(0x0000); lcd_write_data(0x0011); lcd_write_data(0x0018); lcd_write_cmd(0x00fc); lcd_write_data(0x001a); lcd_write_data(0x0000); lcd_write_data(0x001e); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x001a); lcd_write_data(0x001d); lcd_write_data(0x0024); lcd_write_data(0x001e); lcd_write_data(0x001f); lcd_write_data(0x0027); lcd_write_data(0x001e); lcd_write_data(0x000a); lcd_write_data(0x0011); lcd_write_data(0x0011); lcd_write_cmd(0x002a); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x00ef); lcd_write_cmd(0x002b); lcd_write_data(0x0000); lcd_write_data(0x0000); lcd_write_data(0x0001); lcd_write_data(0x003f); lcd_write_cmd(0x0029); lcd_write_cmd(0x002c); } void gpio_init(void) { P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; } void main(void) { gpio_init(); AUXR |= 0x80; RST = 0; delayms(150); RST = 1; delayms(150); lcd_init(); lcd_set_color(); while (1) { P55 = 0; delayms(1000); P55 = 1; delayms(1000); } }
Makefile
all: sdcc main.c packihx main.ihx > main.hex flash: sudo stcgal -p /dev/ttyO2 -P stc15 -o clock_source=external main.hex clean: rm -rf main.ihx main.lst main.mem main.rst main.lk main.map main.rel main.sym main.hex
完成