天天看點

1602液晶靜态顯示

#include<reg52.h> //包含頭檔案,一般情況不需要改動,頭檔案包含特殊功能寄存器的定義

#include<stdio.h> //标準輸入輸出

#include<intrins.h>

#define uchar unsigned char

#define uint  unsigned int

sbit rs = p2^4; //pin4

sbit rw = p2^5; //pin5

sbit e  = p2^6; //pin6

#define data  p0//資料端口

char data table1[]=" www.tlxmcu.com ";

char data table2[]="lcm1602 test ok!";

/******************************************************************/

/*                    函數聲明                                    */

/*                    微秒延時函數                                */

void delayus(unsigned char us)//delay us

{

 unsigned char uscnt;

 uscnt=us>>1;        /*12mhz頻率*/

 while(--uscnt);

}

/*                    毫秒函數聲明                                */

void delayms(unsigned char ms)

 while(--ms)

   {

     delayus(250);

delayus(250);

   }

/*                   寫入指令函數                                 */

void writecommand(unsigned char c)

 delayms(5);//操作前短暫延時,保證信号穩定

 e=0;

 rs=0;

 rw=0;

 _nop_();

 e=1;

 data=c;

/*                   寫入資料函數                                 */

void writedata(unsigned char c)

 delayms(5);  //操作前短暫延時,保證信号穩定

 rs=1;

/*                   初始化函數                                   */

void initlcd()

 delayms(15);

 writecommand(0x38); //display mode

 writecommand(0x06); //顯示光标移動位置

 writecommand(0x0c); //顯示開及光标設定

 writecommand(0x01); //顯示清屏

/*                   主函數                                       */

void main(void)

uchar j;

initlcd();         //初始化lcd

delayms(15);       //延時保證信号穩定

   writecommand(0x80);

for(j=0;j<16;j++)//顯示第一行

writedata(table1[j]);

   writecommand(0x80+0x40);  

for(j=0;j<16;j++) //顯示第二行

writedata(table2[j]);

  while(1);