sbitLCD_RS=P3^4;//定義IO口,具體1602的讀控制線sbitLCD_RW=P3^3;//定義IO口,具體1602的寫控制線sbitLCD_EN=P2^0;//定義IO口,具體1602的使能控制線sbitLight=P3^7;//定義IO口,具體1602的背光控制線(0:開通,1關(guān)閉)sbitD0=P1^0;//定義IO口,P1.0數(shù)據(jù)口1602LCD的D0口sbitD1=P1^1;//定義IO口,P1.1數(shù)據(jù)口1602LCD的D1口sbitD2=P1^2;//定義IO口,P1.2數(shù)據(jù)口1602LCD的D2口sbitD3=P1^3;//定義IO口,P1.3數(shù)據(jù)口1602LCD的D3口sbitD4=P1^4;//定義IO口,P1.4數(shù)據(jù)口1602LCD的D4口sbitD5=P1^5;//定義IO口,P1.5數(shù)據(jù)口1602LCD的D5口sbitD6=P1^6;//定義IO口,P1.6數(shù)據(jù)口1602LCD的D6口sbitD7=P2^1;//定義IO口,P2.1數(shù)據(jù)口1602LCD的D7口sbitB_0=B^0;//定義變量B的位,方便位操作sbitB_1=B^1;sbitB_2=B^2;sbitB_3=B^3;sbitB_4=B^4;sbitB_5=B^5;sbitB_6=B^6;sbitB_7=B^7;
voidmain(void){P1M0=0x00;P1M1=0x00;//配置P1口為準(zhǔn)雙向口P2M0=0x00;P2M1=0x00;//配置P2口為準(zhǔn)雙向口P3M0=0x00;P3M1=0x80;//配置P3.7口為強(qiáng)推挽輸出(控制背光),其它IO口默認(rèn)為準(zhǔn)雙向口(詳細(xì)配置見STC12C56XXAD數(shù)據(jù)手冊(cè))Light=0;//開1602LCD的背光lcd_init();//LCD初始化lcd_write_char(0,0,'A');//在坐標(biāo)(0,0)處寫入Alcd_write_char(1,0,'B');//在坐標(biāo)(1,0)處寫入Blcd_write_char(2,0,'C');//在坐標(biāo)(2,0)處寫入Clcd_write_char(3,0,'D');//在坐標(biāo)(3,0)處寫入Dlcd_write_char(4,0,'E');//在坐標(biāo)(4,0)處寫入Elcd_write_char(5,0,'F');//在坐標(biāo)(5,0)處寫入Flcd_write_char(6,0,'G');//在坐標(biāo)(6,0)處寫入Glcd_write_char(7,0,'H');//在坐標(biāo)(7,0)處寫入Hlcd_write_char(8,0,'I');//在坐標(biāo)(8,0)處寫入Ilcd_write_char(9,0,'J');//在坐標(biāo)(9,0)處寫入Jlcd_write_char(10,0,'K');//在坐標(biāo)(10,0)處寫入Klcd_write_char(11,0,'L');//在坐標(biāo)(11,0)處寫入Llcd_write_char(12,0,'M');//在坐標(biāo)(12,0)處寫入Mlcd_write_char(13,0,'N');//在坐標(biāo)(13,0)處寫入Nlcd_write_char(14,0,'O');//在坐標(biāo)(14,0)處寫入Olcd_write_char(15,0,'P');//在坐標(biāo)(15,0)處寫入Plcd_write_char(0,1,'Q');//在坐標(biāo)(0,1)處寫入Qlcd_write_char(1,1,'R');//在坐標(biāo)(1,1)處寫入Rlcd_write_char(2,1,'S');//在坐標(biāo)(2,1)處寫入Slcd_write_char(3,1,'T');//在坐標(biāo)(3,1)處寫入Tlcd_write_char(4,1,'U');//在坐標(biāo)(4,1)處寫入U(xiǎn)lcd_write_char(5,1,'V');//在坐標(biāo)(5,1)處寫入Vlcd_write_char(6,1,'W');//在坐標(biāo)(6,1)處寫入Wlcd_write_char(7,1,'X');//在坐標(biāo)(7,1)處寫入Xlcd_write_char(8,1,'Y');//在坐標(biāo)(8,1)處寫入Ylcd_write_char(9,1,'Z');//在坐標(biāo)(9,1)處寫入Zwhile(1)//進(jìn)入程序主循環(huán){}}voiddelay1(intms)//延時(shí)子函數(shù),用于模擬時(shí)序中高低電平的保持時(shí)間,非精確的定時(shí){unsignedchary;while(ms--){for(y=0;y<100;y++){_nop_();_nop_();_nop_();_nop_();}}}//================================*///1602檢測判忙函數(shù)*///================================*/bitlcd_busy()//讀寫判斷數(shù)據(jù)的D7讀寫位,用于判斷1602是否忙{bitresult;D7=1;//數(shù)據(jù)口D7置1,為讀狀態(tài)做準(zhǔn)備LCD_RS=0;//選擇指令寄存LCD_RW=1;//選擇讀控制線LCD_EN=1;//開使能控制線delayNOP();//時(shí)序延時(shí)result=D7;//讀D7的電平LCD_EN=0;//關(guān)使能return(result);//返回值1:忙,0可以執(zhí)行操作}//===============================*///1602寫命令函數(shù)*///===============================*/voidlcd_wcmd(ucharcmd){while(lcd_busy());//判斷等待LCD_RS=0;//選擇指令寄存LCD_RW=0;//選擇寫LCD_EN=0;//開使能控制線_nop_();//時(shí)序延時(shí)_nop_();//時(shí)序延時(shí)B=cmd;//把命令字送入BD0=B_0;//把cmd的0位寫入D0D1=B_1;//把cmd的1位寫入D1D2=B_2;//把cmd的2位寫入D2D3=B_3;//把cmd的3位寫入D3D4=B_4;//把cmd的4位寫入D4D5=B_5;//把cmd的5位寫入D5D6=B_6;//把cmd的6位寫入D6D7=B_7;//把cmd的7位寫入D7delayNOP();//時(shí)序延時(shí)LCD_EN=1;//使能控制線delayNOP();//時(shí)序延時(shí)LCD_EN=0;//關(guān)閉使能控制線}//===========================*///1602寫數(shù)據(jù)函數(shù)*///===========================*/voidlcd_wdat(uchardat){while(lcd_busy());//判斷等待LCD_RS=1;//選擇數(shù)據(jù)寄存器LCD_RW=0;//選擇寫LCD_EN=0;//使能控制線B=dat;//把databuf送入BD0=B_0;//把dat的0位寫入D0D1=B_1;//把dat的1位寫入D1D2=B_2;//把dat的2位寫入D2D3=B_3;//把dat的3位寫入D3D4=B_4;//把dat的4位寫入D4D5=B_5;//把dat的5位寫入D5D6=B_6;//把dat的6位寫入D6D7=B_7;//把dat的7位寫入D7delayNOP();//時(shí)序延時(shí)LCD_EN=1;//開使能控制線delayNOP();//時(shí)序延時(shí)LCD_EN=0;//關(guān)使能控制線}//=========================*///1602LCD初始化*///=========================*/voidlcd_init(){delay1(15);//時(shí)序延時(shí)lcd_wcmd(0x38);//16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)delay1(5);//時(shí)序延時(shí)lcd_wcmd(0x38);delay1(5);//時(shí)序延時(shí)lcd_wcmd(0x38);delay1(5);//時(shí)序延時(shí)lcd_wcmd(0x0c);//顯示開,關(guān)光標(biāo)delay1(5);lcd_wcmd(0x06);//移動(dòng)光標(biāo)delay1(5);lcd_wcmd(0x01);//清除LCD的顯示內(nèi)容delay1(5);}//====================*///設(shè)置顯示地址*///===================*/voidlcd_write_address(unsignedcharx,unsignedchary){x&=0x0f;//列地址限制在0-15y&=0x01;//行地址限制在0-1if(y==0x00)lcd_wcmd(x|0x80);else//需要自行查看1602寫地址的指令格式lcd_wcmd((x+0x40)|0x80);//第二行的列地址寫入}//========================*///指定地址寫入函數(shù)*///=====================*/voidlcd_write_char(unsignedcharx,unsignedchary,unsignedcharbuf){lcd_write_address(x,y);//寫入地址lcd_wdat(buf);//寫入顯示數(shù)據(jù)}