Ps2._c
上传用户:rbltsz
上传日期:2007-09-19
资源大小:2509k
文件大小:7k
- #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) //写完后需要换右边的屏幕