delays(1); Enable=0; }
/*-------------------写数据到LCD----------------------------*/ void write_data(unsigned char Dispdata) { Di=1; RW=0; Lcd_Bus=Dispdata; delays(1); Enable=1; delays(1); Enable=0; }
/*--------------------------清除内存------------------------------*/
void Clr_Scr(void) { unsigned char j,k; Mcs=1; Scs=1;
write_com(Page_Add+0); write_com(Col_Add+0); for(k=0;k<8;k++) { write_com(Page_Add+k); for(j=0;j<64;j++) write_data(0x00); } }
/*--------------------------指定位置显示字符8*16和汉字16*16-----------------------*/ void ShowString(unsigned char pag,unsigned char col, uchar *ptr) { uchar i,j=0,k=0,l=0; uchar c1,c2; uchar dat; uchar hang,lie; uchar ulen=0; lie=col;//列值送给lie
hang=pag;//页值送给hang
while(ptr[ulen]!=0) ulen++;//用ulen记录有效字符的个数
while(j
31
}
if((col+8)>127) {Mcs=1;Scs=0;pag=pag+2;col=col+8;lie=col-128;col=col-128;} if(c1<=128) { write_com(Page_Add+pag); write_com(Col_Add+lie); // for(i=0;i<8;i++) { dat=ASCII816[(c1-0x20)*16+i]; write_data(dat); } write_com(Page_Add+pag+1); write_com(Col_Add+lie); // for(i=8;i<16;i++) { dat=ASCII816[(c1-0x20)*16+i]; write_data(dat); } j=j+1; col=col+8; } else { for(k=0;k 32 } /*--------------------------指定位置显示单个字符-----------------------*/ void ShowChar816(uchar pag,uchar col,uchar ch) { uchar i; uchar dat; uchar lie; lie=col; if(ch<128) { if(col<64) {Mcs=1;Scs=0;lie=col;} if(col<128&&col>63) {Mcs=0;Scs=1;lie=col-64;} if(col>127) {Mcs=1;Scs=0;pag=pag+2;lie=col-128;col=col-128;} if((col+8)>127) {Mcs=1;Scs=0;pag=pag+2;col=col+8;lie=col-128;col=col-128;} write_com(Page_Add+pag); write_com(Col_Add+lie); // for(i=0;i<8;i++) { dat=ASCII816[(ch-0x20)*16+i]; write_data(dat); } write_com(Page_Add+pag+1); write_com(Col_Add+lie); // for(i=8;i<16;i++) { dat=ASCII816[(ch-0x20)*16+i]; write_data(dat); } } } /*--------------------------指定位置显示数据-----------------------*/ void ShowData(uchar lin,uchar column,uint dat) { //uint StartAddr; uchar QIAN,BAI,SHI,GE; QIAN=dat/1000; QIAN=QIAN+0x30; dat=dat00; BAI=dat/100; BAI=BAI+0x30; dat=dat0; SHI=dat/10; SHI=SHI+0x30; GE=dat; GE=GE+0x30; ShowChar816(lin,column,QIAN); ShowChar816(lin,column+8,BAI); ShowChar816(lin,column+16,SHI); 33 ShowChar816(lin,column+24,GE); } /*-------------------------------初始化LCD屏---------------------------*/ void init_lcd(void) { P2=0x40; delays(100); P0=0x00; delays(100); P2=0x80; Mcs=1;Scs=1;delays(100); write_com(Disp_Off); write_com(Page_Add+0); write_com(Start_Line+0); write_com(Col_Add+0); write_com(Disp_On); } /************************************************************/ void delay10us(uint us) //delay 10us { while(us--); } /***************************************************************************/ void main(void) { P3=0xff; init_lcd(); Clr_Scr(); TMOD=0x12; //定时器0工作在方式2,定时器1工作在方式1 TH0=0xee; TL0=0xee; TH1=0; TL1=0; IT0=1; //产生40kHz方波 //用于计时 //跳沿触发 EA=1; ET0=1; ET1=1; while(1) { if(Send_flag) { Sq=1; TR1=1; // TR0=1; // delay10us(5); TR0=0; Send_flag=0; 34 EX0=1; } while(Receive && (!Overtime_flag)); if(!Receive) { TR1=0; Time = TH1; Time <<= 8; Time = Time | TL1; Len=Time*170/1000; //mm ShowData(0,0,Len); TH1=0; TL1=0; Send_flag=1; Receive=1; } else { Overtime_flag=0; TR1=0; TH1=0; TL1=0; Send_flag=1; //ShowData(0,0,5000); } /* */ } } /****************************************************/ void INT0_ISR() interrupt 0 { Receive=0; } void Timer0_ISR() interrupt 1 { Sq=~Sq; } void Timer1_ISR() interrupt 3 { Overtime_flag=1; } 35 附录三 元件清单 36 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库超声波传感器测距离(7)在线全文阅读。
相关推荐: