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

📄 display.c

📁 本程序功能: DDS文件夹内的程序
💻 C
字号:
#include <absacc.h>
#include <reg51.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=P1^4;
sbit lcd_cs1=P1^3;
sbit lcd_res=P1^5;
sbit lcd_rw=P3^6;
sbit lcd_EN=P1^2;
sbit lcd_DC=P3^7;

/*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 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++)
		{	
		WriteData(*p,0);
		p++;
		}
	SetCommand(0xb8+k,1);
	SetCommand(0x40,1);
	for(j=0;j<64;j++)
		{	
		WriteData(*p,1);
		p++;
		}
	}

}
#endif


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 GetNot(unsigned int start,unsigned int end){
unsigned char data dis;
	while(start<=end){
	Set_Display_Add(start);
		dis=ReadData(flag);
		dis=GetDisplay();
	Set_Display_Add(start);
		Display(~dis);
	   start++;
	}
}

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;
	}
}

⌨️ 快捷键说明

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