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

📄 ps2._c

📁 AVRkaifashili.rar
💻 _C
字号:
#include <io8535v.h>
#include <macros.h>
#include "Encode.h"
#define uchar unsigned char
#define uint unsigned int

uchar Row=0;
uchar Column=0;
uchar R_flag=0;//记录当前行列位置及换行标志;
uchar Int_Number;//中断计数器;
uchar Key_Value; //键盘编码值;
uchar Key_Up;    //键盘被释放标志;
uchar Byte_Flag; //键盘编码接收完成标志;

//sbit KEY_CLK=PD^3  
//sbit KEY_DATA=PD^2;//Interrupt

//sbit DI=PB^0;  
void Set_DI(uchar i)
{if(i==1) PORTB=PORTB|0x01;
 else     PORTB=PORTB&0xfe;}
 
//sbit RW=PB^1;
void Set_RW(uchar i)
{if(i==1) PORTB=PORTB|0x02;
 else     PORTB=PORTB&0xfd;}
 
//sbit ENABLE=PB^2;
void Set_EN(uchar i)
{if(i==1) PORTB=PORTB|0x04;
 else     PORTB=PORTB&0xfb;}

//sbit CS1=PB^3;
void Set_CS1(uchar i)
{if(i==1) PORTB=PORTB|0x08;
 else     PORTB=PORTB&0xf7;}

//sbit CS2=PC^6;
void Set_CS2(uchar i)
{if(i==1) PORTC=PORTC|0x40;
 else     PORTC=PORTC&0xbf;}

//sbit RST=PC^7;
void Set_RST(uchar i)
{if(i==1) PORTC=PORTC|0x80;
 else     PORTC=PORTC&0x7f;}

//延时//
void Delay(uint i)
{uint j;
 for(;i!=0;i--) 
 	for(j=5000;j!=0;j--) {;}
}

void nop(uchar i)
{for(;i!=0;i--) 
    NOP();
}


// 显示开关控制命令,i=0开显示,i=1关显示//
void DisplayOnOff(uchar i)
{uchar j;
 Set_RW(0);// RW=0;
 Set_DI(0);//DI=0;
 Set_EN(0);//ENABLE=0;
 PORTA=62+i;//P0=0x3e+i;
 nop(10);//_nop_();
 Set_EN(1);//ENABLE=1;
 nop(10);//_nop_();
 nop(10);//_nop_();
 Set_EN(0);//ENABLE=0;
// Delay(1);
}

//设置显示起始行,i=0~63//
void SetStartLine(uchar i)
{Set_RW(0);//RW=0;
 Set_DI(0);//DI=0;
 Set_EN(0);//ENABLE=0;
 PORTA=0xc0+i;//P0=0xc0+i;
 nop(10);//_nop_();
 Set_EN(1);//ENABLE=1;
 nop(10);//_nop_();
 nop(10);//_nop_();
 Set_EN(0);//ENABLE=0;
// Delay(1);
}

//设置页(行)地址,i=0~7//
void SetX(uchar i)
{Set_RW(0);//RW=0;
 Set_DI(0);//DI=0;
 Set_EN(0);//ENABLE=0;
 PORTA=0xb8+i;//P0=0xb8+i;
 nop(10);//_nop_();
 Set_EN(1);//ENABLE=1;
 nop(100);// _nop_();
 nop(100);//_nop_();
 Set_EN(0);//ENABLE=0;
// Delay(1);
}

//设置Y(列)地址,i=0~127//
void SetY(uchar i)
{Set_RW(0);//RW=0;
 Set_DI(0);//DI=0;
 Set_EN(0);//ENABLE=0;
 PORTA=0x40+i;// P0=0x40+i;
 nop(10);//_nop_();
 Set_EN(1);//ENABLE=1;
 nop(10);//_nop_();
 nop(10);// _nop_();
 Set_EN(0);//ENABLE=0;
 //Delay(1);
}

//读状态//
//返回值:DB7,DB6,DB5,DB4,DB3,DB2,DB1,DB0
//返回值:BF,0,ON/OFF,RST,0,0,0,0
/*ucharReadStatus(void)
{uchardata i;
 RW=1;
 DI=0;
 ENABLE=1;
 i=P0;
 return i;
}*/

//写显示数据,i为送DDRAM的数据
void WriteByte(uchar i)
{Set_RW(0);//RW=0;
 Set_DI(1);//DI=1;
 Set_EN(0);//ENABLE=0;
 PORTA=i;//P0=i;
 nop(10);//_nop_();
 Set_EN(1);//ENABLE=1;
 nop(10);//_nop_();
 nop(10);//_nop_();
 Set_EN(0);//ENABLE=0;
 //Delay(1);
}

//读显示数据处理
/*ucharReadData(void)
{uchar i;
 RW=1;
 DI=0;
 ENABLE=1;
 i=P0;
 return i;
}*/

//LCD复位//
void Reset(void)
{Set_RST(0);//RST=0;
 Delay(1);
 Set_RST(1);//RST=1;
 //Delay(1);
}


void ClearScreen(uchar k)
{uchar i,j;
 Set_CS1(1);//CS1=1;
 Set_CS2(1);//CS2=1;
 for(i=k;i<8;i+=1)
 	{SetX(i);
	 for(j=0;j<64;j++)
		WriteByte(0x00);
	 }
}
 
//LCD初始化//
void InitLCD(void)
{Reset();
 Delay(0);
 ClearScreen(0);
 DisplayOnOff(1);
 SetStartLine(0);
 }

void WriteWord(uchar const *disp,uchar x,uchar y,uchar cs)
{uchar i;
 if(cs==1) {Set_CS1(1);Set_CS2(0);}
 else      {Set_CS1(0);Set_CS2(1);}
 SetX(x);
 SetY(y);
 for(i=0;i<16;i++)
     {WriteByte(*disp);
	   disp++;}
  SetX(x+1);
  SetY(y);
  for(i=0;i<16;i++)
 	{WriteByte(*disp);
	 disp++;}
}


void WriteCharacter(const uchar *disp,uchar x,uchar y,uchar cs)
{uchar i;
 if(cs==0) {Set_CS1(1);Set_CS2(0);}//CS1=1选中右屏幕;
 else      {Set_CS1(0);Set_CS2(1);}//CS2=1选中左屏幕;
 SetX(x);
 SetY(y);
 for(i=0;i<8;i++)
     {WriteByte(*disp);
	   disp++;}
  SetX(x+1);
  SetY(y);
  for(i=0;i<8;i++)
 	{WriteByte(*disp);
	 disp++;}
}

void Write_Character(uchar i)
{uchar shift1;
 uchar const *p;
 switch(i)
  {case 0:p=X0;break;
   case 1:p=X1;break;
   case 2:p=X2;break;
   case 3:p=X3;break;
   case 4:p=X4;break;
   case 5:p=X5;break;
   case 6:p=X6;break;
   case 7:p=X7;break;
   case 8:p=X8;break;
   default:p=X9;break;}   
 
 if(R_flag==1) //若是写右边的屏幕; 
 	{if(Column==56) 
	   {shift1=1;//若是到了最后一个字节,则写完后要换行
        WriteCharacter(p,Row,Column,!R_flag);
		R_flag=0;//回到左边屏幕第0列;
		Column=0;
		if(shift1==1) 
		{Row+=2;shift1=0;}
		if (Row>7) Row=0;
		}
	  else 
	   {WriteCharacter(p,Row,Column,!R_flag);
        Column=Column+8;} 
	 }
 else
   {if(Column==56) //写完后需要换右边的屏幕

⌨️ 快捷键说明

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