12864模块ST7565R串口画点画线测试程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ቤተ መጻሕፍቲ ባይዱ
新建文本文档 (2).txt for(z=0;z<5;z++) { DispByte(page,col+z,ASCII_5X8_12864[dat+z]); } } //---------------------------------------------------------void DispStr(Uchar page,Uchar col,Uchar *_char) //指定位 置写5*8字符串 { while(*_char!='\0') { DispChar(page,col,*_char++); col+=5; } } //---------------------------------------------------------void DispHZ(Uchar page,Uchar col,Uchar *charr) //指定位置写 16*16汉字 { Uint z,cc; for(cc=0;cc<2;cc++) { for(z=0;z<16;z++) { DispByte(page,col+z,*charr++); } page++; } } //---------------------------------------------------------//------------------1~64 com, 1~128seg---------------------//-----浮点运算和除法会降低显示速度,此处避开浮点和乘除法------void DrawLines(Uint Hx1,Uint Hy1,Uint Hx2,Uint Hy2) //指定2个坐标点 画线 { Uint temp; Uchar inc,dx,dy; if(Hx2>=Hx1) else dx=Hx2-Hx1; dx=Hx1-Hx2; //x轴方向增量
新建文本文档 (2).txt for(i=0;i<8;i++) { SDA=Wdata&0x80; SCK=0; SCK=1; Wdata<<=1; } CSS=1; } //---------------------------------------------------------void Init_lcd(void) { RES=1; Delay(200); RES=0; Delay(200); Delay(500); Delay(200); RES=1; Delay(200); WriteData(0xe2,0); WriteData(0xC8,0); WriteData(0xa0,0); WriteData(0xa2,0); WriteData(0xa6,0); WriteData(0xa4,0); WriteData(0x2c,0); WriteData(0x2e,0); WriteData(0x2f,0); ON,booster ON Delay(100); WriteData(0x25,0); set WriteData(0x81,0); WriteData(0x21,0); WriteData(0x60,0); WriteData(0xaf,0); //Set EV //EV electronic volume set //Start line address //display on
//voltage follow ON, regulator
//V0 voltage regulator internal resistor
} //---------------------------------------------------------void ClearALL() //清 屏 { Uchar x,y; for(y=0;y<9;y++) { WriteData(y|0xb0,0); WriteData(0x10,0); WriteData(0x00,0); for(x=0;x<132;x++) 第 2 页
新建文本文档 (2).txt { WriteData(0,1); } } } //---------------------------------------------------------//------------------1~64 com, 1~128seg---------------------//-------------注:左上角为原点,坐标为第0行,第1列----------void DispDots(Uchar Hx,Uchar Hy,Uchar flag) //指定位置显示一个点,显示标志 flag,1:显示,0:不显 { Uchar Redata=0,Tedata=0,Rpage; Redata=(1<<((Hy-1)%8)); Rpage=PageTable[(Hy-1)/8]; Tedata=DotRAM[Rpage][Hx-1]; if(flag==0) { Tedata&=~Redata; } if(flag==1) { Tedata|=Redata; } WriteData(Rpage|0xb0,0); WriteData((Hx>>4)|0x10,0); WriteData(Hx&0x0f,0); WriteData(Tedata,1); DotRAM[Rpage][Hx-1]=Tedata; } //---------------------------------------------------------void DispByte(Uchar page,Uchar col,Uchar _data) //指定位置显示一个字节 { Uchar e; for(e=0;e<8;e++) { if((_data<<e)&0x80) DispDots(col,page*8+(8-e),1); else DispDots(col,page*8+(8-e),0); } } //---------------------------------------------------------void DispChar(Uchar page,Uchar col,Uchar cchar) 置写5*8单个字符 { Uint z,dat; dat=(cchar-0x20)*5; 第 3 页 //指定位
新建文本文档 (2).txt } if(Hy1>Hy2) inc=0; else inc=1; } else { if(Hy1>Hy2) //起点大于终点时,坐标互换 { temp=Hx2; Hx2=Hx1; Hx1=temp; temp=Hy2; Hy2=Hy1; Hy1=temp; } if(Hx1>Hx2) inc=0; else inc=1; } if(dx==0) { do { //垂直线
DispDots(Hx1,Hy1,1); Hy1++; }while(Hy2>=Hy1); return; } if(dy==0) { do { //水平线
DispDots(Hx1,Hy1,1); Hx1++; }while(Hx2>=Hx1); return; } //bresenham算法画线 if(dx>=dy) { temp=(dy<<1)-dx; while(Hx1!=Hx2) { DispDots(Hx1,Hy1,1); Hx1++; if(temp>0) { if(inc==1) Hy1++; else Hy1--; temp+=(dy<<1)-(dx<<1); } else { temp+=(dy<<1); } } 第 5 页
新建文本文档 (2).txt /****************************************************** ** model: 12864 ** Controller: ST7565R ** VDD: 3.3V ** Logic: ** seg1 ... seg128 ** com32 -|-------|** | | ** com31 -|-------|** notes: page--com32~com63,com0~com31 ** col--sge1~seg128 ******************************************************************** Ver : V1.0 Final date: 2016/06 ********************************************************************/ #include <reg52.h> #include <intrins.h> #include "ASCII_5X8_12864.h" #define #define #define #define sbit sbit sbit sbit sbit CSS RES RSS SCK SDA Uchar unsigned char Uint unsigned int DispXpixel 32 DispYpixel 16 = = = = = P3^5; P3^4; P3^3; P1^6; P1^7;
//初始化
//command reset //COM63---COM0 //ADC set S0--S131 //1/64 duty,a2=1/9 bias,a3=1/7bias //Normal display (or reverse display) //Entire display disable
新建文本文档 (2).txt DispDots(Hx1,Hy1,1); } else { temp=(dy<<1)-dx; while(Hy1!=Hy2) { DispDots(Hx1,Hy1,1); Hy1++; if(temp>0) { if(inc==1) Hx1++; else Hx1--; temp+=(dx<<1)-(dy<<1); } else { temp+=(dx<<1); } } DispDots(Hx1,Hy1,1); } } //---------------------------------------------------------void main(void) { Init_lcd(); ClearALL(); while(1) { DispStr(0,1,"DADI"); M_Delay(800); ClearALL(); DispHZ(0,1,ASCII_16X16_HZ); M_Delay(800); ClearALL(); DrawLines(1,1,32,1); DrawLines(1,1,1,16); DrawLines(1,16,32,16); DrawLines(32,1,32,16); DrawLines(1,1,32,16); DrawLines(1,16,32,1); M_Delay(800); M_Delay(800); M_Delay(800); } }
if(Hy2>=Hy1) dy=Hy2-Hy1; //y轴方向增量 else dy=Hy1-Hy2; if(dx>=dy) //线段角度小于等于45度 { if(Hx1>Hx2) //起点大于终点时,坐标互换 { temp=Hx2; Hx2=Hx1; Hx1=temp; temp=Hy2; Hy2=Hy1; Hy1=temp; 第 4 页
//d6 //d7
/*-----因89C52内存较小,此处定义64个字节的缓存,------------正常情况下应该定义为128*4个字节,才够存放整屏的数据,----------主要是方式方法,不必纠结显示不完整。-----------*/ unsigned char DotRAM[DispYpixel/8][DispXpixel]; Uchar code PageTable[]={0,1,2,3,4,5,6,7}; //---------------------------------------------------------void Delay(Uint times) //延时 { while(times--); } //---------------------------------------------------------void M_Delay(Uint NOs) //延时 { while(NOs) { Delay(200); NOs--; } } //---------------------------------------------------------void WriteData(Uchar Wdata, bit di) //写数据和写命令 { Uchar i; CSS=0; RSS=di; 第 1 页
相关文档
最新文档