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

📄 yejing12864.txt

📁 用C8051F020做的一个船进水检测系统
💻 TXT
字号:
#include <absacc.h>
#include <reg51.h>
#include <math.h>
#include "display_drv.h"
#include "font.h"
#include "font2.h"

#include <absacc.h>


#define DWPort0 XBYTE[0x8002] 
#define DRPort0 XBYTE[0x8003]
#define IWPort0 XBYTE[0x8000]
#define IRPort0 XBYTE[0x8001]
#define DWPort1 XBYTE[0x9002] 
#define DRPort1 XBYTE[0x9003]
#define IWPort1 XBYTE[0x9000]
#define IRPort1 XBYTE[0x9001]

unsigned int data Dispointer;

sbit lcd_cs0=P2^2;
sbit lcd_cs1=P2^1;
//sbit lcd_res=P1^5;
sbit lcd_rw=P3^6;
sbit lcd_EN=P2^3;
sbit lcd_DC=P2^0;

//void main(void){
//	unsigned char k;
//	display_on();
//	cls();
//	display_top(0);
//Set_Display_Add(0);
//for(k=128;k<255;k++)
//{
//putchar(k);
//}
//putchar(255);
//	display_on();
//    cls();
//	display_top(0);
//	Set_Display_Add(0);
//while(1){

//}
//}

void display_init(void)
{
	display_on();
	display_top(0);
	cls();
	//lcd_res=1;
}

void lcddelay()
{
unsigned char k;
for(k=0;k<10;k++);;
}

void printf(unsigned char code *screen)
{
  while (*screen != '\0')
  {
    putchar(*screen++);
  }
}

bit naga=0;
#if font_select
void putchar(unsigned char a){
	unsigned char *p;
	if(a=='\n'){
	Set_Display_Add((Dispointer&0x380)+0x80);
	}
	else
	{
	p=font5x7+(a*5);
	if(!naga){
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	}
	else
	{
	Display(~(*p));
	p++;
	Display(~(*p));
	p++;
	Display(~(*p));
	p++;
	Display(~(*p));
	p++;
	Display(~(*p));
	}
	}
}
#else
void putchar(unsigned char a){
	unsigned char *p;
	if(a=='\n'){
	Set_Display_Add((Dispointer&0x380)+0x80);
	}
	else
	{
	p=Character8x8+(a*8);
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	p++;
	Display(*p);
	}
}
#endif
void putchinese(unsigned char a[],unsigned int ad)
{
	char i;	
	unsigned char *p;
	p=a;
	Set_Display_Add(ad);
	for(i=0;i<16;i++)
	{Display(*p);
	p++;}
	Set_Display_Add(ad+128);
	for(i=0;i<16;i++)
	{Display(*p);
	p++;}	
}
/*
void DisplayArray(Uchar s[]){
	unsigned char *p;
	unsigned int add;
	p=s;
	Set_Display_Add(0);
	for(add=0;add<1024;add++){
		Display(*p);
		p++;
	}
}*/
#if array_display
void DisplayArray(unsigned char s[]){
	unsigned char *p;
	unsigned char k,j;
	p=s;
	for(k=0;k<8;k++){
	SetCommand(0xb8+k,0);
	SetCommand(0x40,0);
	for(j=0;j<64;j++)
		{SetCommand(0x40+j,0);	
		WriteData(*p,0);
		p++;
		}
	SetCommand(0xb8+k,1);
	SetCommand(0x40,1);
	for(j=0;j<64;j++)
		{SetCommand(0x40+j,1);	
		WriteData(*p,1);
		p++;
		}
	}

}
#endif

void YXAxle(unsigned char y,unsigned char x)
	{	
	int i;
	for(i=0;i<128;i++)
	{
	Set_Display_Add(128*y+i);
	Display(0x80);
	}
	for(i=0;i<8;i++)
	{
	Set_Display_Add(x+128*i);
	Display(0xff);}
	}

static bit bdata flag;
void Display(unsigned char dat){
	if((Dispointer&0x3f)==0){
		flag=((Dispointer&0x40)==0x40);
		SetCommand(0xb8+((Dispointer&0x380)>>7),flag);
		SetCommand(0x40+(Dispointer&0x3f),flag);
	}
	WriteData(dat,flag);
	Dispointer++;    //此处Dispointer有可能越界,但只是用了低10位,正好利用越界让低10位以模1024循环,Dispointer只要取低10位即可,不用写限制语句
}



unsigned char GetDisplay(){
	if((Dispointer&0x3f)==0){
		flag=((Dispointer&0x40)==0x40);
		SetCommand(0xb8+((Dispointer&0x380)>>7),flag);
		SetCommand(0x40+(Dispointer&0x3f),flag);
	}
	
	Dispointer++;    //此处Dispointer有可能越界,但只是用了低10位,正好利用越界让低10位以模1024循环,Dispointer只要取低10位即可,不用写限制语句
	return	ReadData(flag);
}


void Set_Display_Add(unsigned int add){
		flag=((add&0x40)==0x40);
		SetCommand(0xb8+((add&0x380)>>7),flag);
		SetCommand(0x40+(add&0x3f),flag);
		Dispointer=add;
}


void SetCommand(unsigned char Command,bit CS)
{
	EA=0;
	if(CS==0)
	{
	lcd_cs1=1;
	lcd_cs0=0;
	}
	else
	{
	lcd_cs1=0;
	lcd_cs0=1;
	}
	lcd_DC=0;
	P0=Command;
	lcd_rw=0;
	lcd_EN=0;
	lcd_EN=1;
	lcd_EN=0;
	lcd_cs1=1;
	lcd_cs0=1;
	lcddelay();
	EA=1;
}

void WriteData(unsigned char Data,bit CS){
	EA=0;
	if(CS==0)
	{
	lcd_cs1=1;
	lcd_cs0=0;
	}
	else
	{
	lcd_cs1=0;
	lcd_cs0=1;
	}
	lcd_DC=1;
	P0=Data;
	lcd_rw=0;
	lcd_EN=0;
	lcd_EN=1;
	lcd_EN=0;
	lcd_cs1=1;
	lcd_cs0=1;
	lcddelay();
	EA=1;
}


void cls(void){
unsigned char data k,j;
	for(k=0;k<8;k++){
		SetCommand(0xb8+k,1);
		SetCommand(0x40,1);
		for(j=0;j<64;j++){
			WriteData(0x0,1);
		}
		SetCommand(0xb8+k,0);
		SetCommand(0x40,0);
		for(j=0;j<64;j++){
			WriteData(0x0,0);
		}
	}
Set_Display_Add(0);
}

#if char_send

void SendChar(unsigned char m)
{
	switch (m>>4)
	{
		case 0x00: putchar('0');
					break;
		case 0x01: putchar('1');
					break;
		case 0x02: putchar('2');
					break;
		case 0x03: putchar('3');
					break;
		case 0x04: putchar('4');
					break;
		case 0x05: putchar('5');
					break;
		case 0x06: putchar('6');
					break;
		case 0x07: putchar('7');
					break;
		case 0x08: putchar('8');
					break;
		case 0x09: putchar('9');
					break;
		case 0x0a: putchar('A');
					break;
		case 0x0b: putchar('B');
					break;
		case 0x0c: putchar('C');
					break;
		case 0x0d: putchar('D');
					break;
		case 0x0e: putchar('E');
					break;
		case 0x0f: putchar('F');
					break;
		default:break;
	}
	switch (m&0x0f)
	{
		case 0x00: putchar('0');
					break;
		case 0x01: putchar('1');
					break;
		case 0x02: putchar('2');
					break;
		case 0x03: putchar('3');
					break;
		case 0x04: putchar('4');
					break;
		case 0x05: putchar('5');
					break;
		case 0x06: putchar('6');
					break;
		case 0x07: putchar('7');
					break;
		case 0x08: putchar('8');
					break;
		case 0x09: putchar('9');
					break;
		case 0x0a: putchar('A');
					break;
		case 0x0b: putchar('B');
					break;
		case 0x0c: putchar('C');
					break;
		case 0x0d: putchar('D');
					break;
		case 0x0e: putchar('E');
					break;
		case 0x0f: putchar('F');
					break;
		default:break;
	}
}

#endif

#if int_send
void SendInt(unsigned int m){
SendChar(((unsigned char *)&m)[0]);
SendChar(((unsigned char *)&m)[1]);
}
#endif


#if long_send
void SendLong(unsigned long m){
SendChar(((unsigned char *)&m)[0]);
SendChar(((unsigned char *)&m)[1]);
SendChar(((unsigned char *)&m)[2]);
SendChar(((unsigned char *)&m)[3]);
}

#endif

unsigned char ReadData(bit CS){
	if (CS==0){
	while((IRPort1&0x80)==0x80);
		return DRPort1;
	}
	else{
	while((IRPort0&0x80)==0x80);
		return DRPort0;
	}
}

unsigned char HEX2BCD(unsigned char k)
{
return ((k/10)<<4)+B;
}

⌨️ 快捷键说明

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