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

📄 pg240128.c

📁 how to use display Powertip PG 240x128 with drive T6963
💻 C
字号:
/* Rizeni disple PG240x128 s digitalnim touch screenem
	Displej je namapovan do pameti procesoru 8051 a zobrazena data jsou ulozena do externi pameti EPROM.

Graficky panel Verze 1.0


T_xx - rizeni digitalniho touch panelu

*/

#include <AT89x051.H>
#include <absacc.h>  // knihovna pro externi primou adresaci prikaz XBYTE

sbit CD = P3^4;
sbit RESET = P3^5;

#define CITAC_H = 0x0e8;
#define CITAC_L = 0;

sbit T_R1 = P3^0;
sbit T_R2 = P3^1;
sbit T_R3 = P3^2;
sbit T_R4 = P3^3;
sbit T_R5 = P3^4;
sbit T_C1 = P1^0;
sbit T_C2 = P1^1;
sbit T_C3 = P1^2;
sbit T_C4 = P1^3;
sbit T_C5 = P1^4;
sbit T_C6 = P1^5;
sbit T_C7 = P1^6;
sbit T_C8 = P1^7;
sbit T_C9 = P3^6;
sbit T_C10 = P3^7;

unsigned char Delicka;
unsigned char Status;
bit Zobr_hod;
unsigned char Dotyk;

// write_d write data to LCD
void write_d(unsigned char Data) {
	CD = 1;
	do {
		Status = XBYTE [0xFFFF];        // wait for STA1 = 0
		}
	while ((Status & 0x03) == 0);
	CD = 0;
	XBYTE [0xFFFF] = Data;
	}

// write_c - write command to LCD
void write_c(unsigned char Data) {
	CD = 1;
	do {
  		Status = XBYTE [0xFFFF];        // wait for STA0 = 0
		}
	while ((Status & 0x03) == 0);
	XBYTE [0xFFFF] = Data;
	}

// write_auto - auto write data to LCD

void write_auto(unsigned char Data) {
	CD = 1;
	do {
		Status = XBYTE [0xFFFF]; 
		}
	while ((Status & 0x08) == 0);       // wait for STA3 = 0
	CD = 0;
	XBYTE [0xFFFF] = Data;
	}

unsigned char Hod;
unsigned char Min;
unsigned char Sec;

void hodiny(void){
	if (Sec == 60){
		Sec = 0;
		Min++;}
	if (Min == 60){
		Min = 0;
		Hod++;}
 	if (Hod == 24) Hod = 0;	
	}

void zobr_hodiny() {
	unsigned char Zobr;
	write_d(111); write_d(0); write_c(0x24);
	write_c(0xB0);
	Zobr = Hod / 10;
	write_auto(Zobr + 0x10);
	Zobr = Hod % 10;
	write_auto(Zobr + 0x10);
	write_auto(':' - 0x20);
	Zobr = Min / 10;
	write_auto(Zobr + 0x10);
	Zobr = Min % 10;
	write_auto(Zobr + 0x10);
	write_auto(':' - 0x20);
	Zobr = Sec / 10;
	write_auto(Zobr + 0x10);
	Zobr = Sec % 10;
	write_auto(Zobr + 0x10);
	write_c(0xB2);	
	}


void touch(void){
	int i;
	ET0 = 0;
	P1 = 0xFF;
	T_R1 = 1;
	T_R2 = 1;
	T_R3 = 0;
	T_R4 = 0;
	T_R5 = 0;
	
	for (i=0;i<100;i++);
	if (!T_C1) Dotyk = 1;
	if (!T_C2) Dotyk = 2;
	if (!T_C3) Dotyk = 3;
	if (!T_C4) Dotyk = 4;
	if (!T_C5) Dotyk = 5;
	if (!T_C6) Dotyk = 6;
	if (!T_C7) Dotyk = 7;
	if (!T_C8) Dotyk = 8;
	if (!T_C9) Dotyk = 9;
	if (!T_C10) Dotyk = 10;
	P1 = 0xFF;
	P3 = 0xFF;
	ET0 = 1;
	}

void casovac(void) interrupt 3 {
	TH1 = 0x0e6;
	Delicka--;
	if (Delicka==0) {
		Sec++;
		Delicka = 200;
		hodiny();
		if (Zobr_hod) zobr_hodiny();
		}
	}

void cleargrf_ram(void) {
  int i;
  write_c(0x0b0);                                 // Data Auto Write Set
  for(i = 0; i < 0xf00; i++) write_auto(0x00);
  write_c(0x0b2);                                 // Auto Reset
}

void cleartxt_ram(void){
	unsigned int i;
	write_c(0xB0);
	write_d(0); write_d(0); write_c(0x24);
	for (i=0;i < 480;i++) write_auto(' ' - 0x20);
	write_c(0xB2);
	}
void init_dis(void) {
	write_d(0); write_d(2); write_c(0x42);			//Graphic Home address
	write_d(0x1e); write_d(0); write_c(0x43);		// bytes per line
	write_d(0x00); write_d(0x00); write_c(0x40);	// text home address
	write_d(0x1e); write_d(0); write_c(0x41);		// bytes per line
	write_c(0x81);                              	// mode set CGram, "GR or Tx"
	write_d(0x2); write_d(0); write_c(0x22);		// Offset registr
	write_c(0x9C); 
	write_d(0); write_d(0); write_c(0x24);      		// Address Pointer = home positoin
	cleartxt_ram();
	write_d(0); write_d(2); write_c(0x24);      		// Address Pointer = home positoin
	cleargrf_ram();
}


void datum(void){
	write_d(46); write_d(0); write_c(0x24);
	write_c(0xB0);
	write_auto('2' - 0x20);
	write_auto('2' - 0x20);
	write_auto('.' - 0x20);
	write_auto('0' - 0x20);
	write_auto('9' - 0x20);
	write_auto('.' - 0x20);
	write_auto('2' - 0x20);
	write_auto('0' - 0x20);
	write_auto('0' - 0x20);
	write_auto('1' - 0x20);
	write_c(0xB2);
}

void obr1(void) {
	unsigned int i;
	unsigned char Data;
/*		write_d(0x91); write_d(0x01); write_c(0x24);
		write_c(0xB0);
		write_auto('D' - 0x20);
		write_auto('o' - 0x20);
		write_auto('t' - 0x20);
		write_auto('k' - 0x20);
		write_auto('n' - 0x20);
		write_auto('i' - 0x20);
		write_auto('s' - 0x20);
		write_auto('e' - 0x20);
		write_c(0xB2);*/
		write_d(0); write_d(2); write_c(0x24);
		write_c(0xB0);                            // Data Auto Write Set
		for (i=0;i < 3840;i++) {
			Data = XBYTE [i];
			write_auto(Data);
			}
		write_c(0xB2);	
		}

void obr2(void) {
	unsigned int i;
	unsigned char Data;
		init_dis();
		datum();
/*		write_d(0x9b); write_d(0x01); write_c(0x24);
		write_c(0xB0);
		write_auto('V' - 0x20);
		write_auto('y' - 0x20);
		write_auto('d' - 0x20);
		write_auto('e' - 0x20);
		write_auto('j' - 0x20);
		write_c(0xB2);*/
		write_d(0); write_d(2); write_c(0x24);
		write_c(0xB0);                            // Data Auto Write Set
		for (i=0;i < 3840;i++) {
			Data = XBYTE [i + 0xF00];
			write_auto(Data);
			}
		write_c(0xB2);
		Zobr_hod = 1;
		}

void obr3(void) {
	unsigned int i;
	unsigned char Data;
		init_dis();
		write_d(0); write_d(2); write_c(0x24);
		write_c(0xB0);                            // Data Auto Write Set
		for (i=0;i < 3840;i++) {
			Data = XBYTE [i + 0x1E00];
			write_auto(Data);
			}
		write_c(0xB2);
		}

void main(void){
	unsigned char Sec_old;
	bit Dotek;
	RESET = 0;
	Delicka = 200;
	TH1 = 0xE6;
	TL1 = 0;
	TMOD = (TMOD & 0x0F) | 0x10;  /* Set Mode (8-bit timer with reload) */				
	ET1 = 1;                      /* Enable Timer 1 Interrupts */
	EA = 1;                     	
   	TR1 = 1;
	Zobr_hod = 0;
  	RESET = 1;
	while (1) {
		Dotek = 1;
		Dotyk = 0;
		init_dis();
		obr1();
		Sec_old = Sec;
		while (Sec_old == Sec);
		while (Dotek) {	
			touch();
			if ((Dotyk > 3) & (Dotyk < 8)) Dotek = 0;
			}
		obr2();
		Sec_old = Sec;
		while (Sec_old == Sec);
		Dotek = 1;
		Dotyk = 0;
		while (Dotek) {	
			touch();
			if (Dotyk > 7) Dotek = 0;
			}
		Zobr_hod = 0;
		obr3();
		Sec_old = Sec;
		while (Sec_old == Sec);
		Dotek = 1;
		Dotyk = 0;
		while (Dotek) {	
			touch();
			if (Dotyk > 0) Dotek = 0;
			}
		}				
}

⌨️ 快捷键说明

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