<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)1602液晶程序

          51單片機(jī)1602液晶程序

          作者: 時(shí)間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          #include

          #define Lcd_Data P0
          sbit RS=P2^0;
          sbit RW=P2^1;
          sbit E=P2^2;
          sbit Busy=P0^7;
          sbit k1=P1^0;
          sbit k2=P1^1;
          sbit k3=P1^2;
          sbit k4=P1^3;
          sbit buzzer=P3^7;
          unsigned int hour,min,second,day,month,year; ////////定義的幾個(gè)時(shí)間
          unsigned char code Time[] = {"Time: "};////用于顯示
          unsigned char code num[] = {"0123456789ABCDEF"};/////////////用于液晶顯示
          unsigned char code haha[]={"^_^"};
          unsigned char code middle[]={":"};
          unsigned int numberflag;
          unsigned int number;
          unsigned code heart[]={0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f,
          0x18,0x1E,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
          0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,
          0x10,0x18,0x1c,0x1E,0x1E,0x1E,0x1E,0x1E,
          0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00,
          0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01,
          0x1f,0x1f,0x1f,0x1f,0x1f,0x1c,0x18,0x00,
          0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00};//心圖案
          unsigned int t0_1S;//定義0.1S變量
          unsigned char keyvalue;//定義鍵值
          void delay(unsigned int time)/////////////////////////////////////////////延時(shí)程序
          {
          while(time--);
          }
          void Delay_1ms(unsigned char t)///////////////////////////精確延時(shí)子程序,延時(shí) 1MS*t S
          {
          unsigned char a;
          while(--t != 0)
          {
          for(a = 0; a < 125; a++);
          }
          }
          ////////////////////////////////////////////////
          ///////////////////////////////////////////////////
          //////////////////////////////////////////////////液晶的程序
          void Read_Busy(void)
          {
          do{ Lcd_Data=0xff;
          RS=0;
          RW=1;
          E=0;
          delay(2);
          E=1;}while(Busy);
          }
          void Write_Comn(unsigned char comn)
          {
          Lcd_Data=comn;
          RS=0;
          RW=0;
          E=0;
          Read_Busy();
          E=1;
          }
          void Write_Data(unsigned char Lcddata)
          {
          Lcd_Data=Lcddata;
          RS=1;
          RW=0;
          E=0;
          Read_Busy();
          E=1;

          本文引用地址:http://www.ex-cimer.com/article/201611/318331.htm

          }
          void init()
          {
          Write_Comn(0x01);///清顯示
          delay(50);
          Write_Comn(0x02);//光標(biāo)位于左上方
          Write_Comn(0x38);//5*8點(diǎn)陣 8位2行
          Write_Comn(0x06);// 文字不動(dòng),光標(biāo)右移
          Write_Comn(0x0f);///光標(biāo)閃爍
          }
          ////////////////////////////////////////////////////
          //////////////////////////////////////////////
          ////////////////////////////////////////////////////
          ///////////////////////////////////////////以上為lcd的程序;
          /////////////////////////////////////////以下為鍵盤掃描的程序
          void KEY4X4_scan(void)
          {
          keyvalue=0x00;//無按鍵時(shí)返回Ox00
          P1=0xFE;//掃描第1行
          delay(1);
          if((P1&0xF0)!=0xF0)
          keyvalue=(P1>>4)|0x10;//返回鍵值
          P1=0xFD;//掃描第2行
          delay(1);
          if((P1&0xF0)!=0xF0)
          keyvalue=(P1>>4)|0x20;//返回鍵值
          P1=0xFB;//掃描第3行
          delay(1);
          if((P1&0xF0)!=0xF0)
          keyvalue=(P1>>4)|0x30;//返回鍵值
          P1=0xF7;//掃描第4行
          delay(1);
          if((P1&0xF0)!=0xF0)
          keyvalue=(P1>>4)|0x40;//返回鍵值
          //return keyvalue;
          }
          //////////////////////////////////////////////////
          /////////////////////////////////////////////////
          ///////////////////////////////////////////////秒表程序
          void seconddisplay(void)//顯示時(shí)間
          {
          unsigned char aa = 0, bb = 0, cc = 0, dd = 0,ee = 0;//定義時(shí)間各個(gè)位
          if(t0_1S>60000)t0_1S=0;
          aa=t0_1S/10000;
          bb=t0_1S%10000/1000;
          cc=t0_1S%1000/100;
          dd=t0_1S%100/10;
          ee=t0_1S%10;
          Write_Comn(0xc9);
          Write_Data(num[aa]);
          Write_Data(num[bb]);
          Write_Data(num[cc]);
          Write_Data( num[dd] );
          Write_Data(.);
          Write_Data(num[ee]);
          Write_Data(S);

          }

          /////////////////////////////////////////////////////////////秒表
          void mysecond()
          { unsigned int i;
          init();//初始化液晶
          Write_Comn(0x01);//清顯示
          k1=1;k2=1;
          t0_1S=0;
          Write_Comn(0x80);

          for(i=0;i<16;i++)
          {
          Write_Data( Time[i] );//顯示time字樣
          }
          run:
          seconddisplay();
          if(k1==0)
          {
          while(1)
          {
          Delay_1ms(100);//延時(shí)0.1S
          t0_1S++;
          seconddisplay();
          if(k2==0)
          {
          while(1)
          {
          if(k1==0)break;
          if(k3==0){t0_1S=0;
          goto over;
          }
          }
          }
          }
          }
          goto run;
          over:
          t0_1S=0;

          }
          ///////////////////////////////////////////////////////////////////////////
          ///////////////////////////////////////////////////////////////////////////
          //////////////////////////////////////////////////////////////////////
          void showheart()
          {
          unsigned int i; // char m=0;
          init();
          Write_Comn(0x40); //設(shè)定CGRAM地址
          for(i=0;i<64;i++) //將心型代碼寫入CGRAM中
          {
          Write_Data(heart[i]);
          }
          Write_Comn(0x85); //設(shè)定上排的顯示位置
          for(i=0;i<4;i++) //顯示心型圖案的上半部分
          {
          Write_Data(i);
          }
          Write_Comn(0xc5); //將顯示坐標(biāo)轉(zhuǎn)移到下排和上排相對(duì)應(yīng)的地方
          for(i=4;i<8;i++) //顯示心型圖案的下半部分
          {
          Write_Data(i);
          }


          }
          //////////////////////////////////////////////////////////////////////
          /////////////////////////////////////////////////
          /////////////////////////////////////////////
          ////////////////////////////////////////////////
          ///////////////////////////////////定時(shí)器中斷的初始化
          void init_int()
          {
          TMOD=0x01;
          TH0=(65536-50000)/256;
          TL0=(65536-50000)%256;
          ET0=1;
          TR0=1;
          EA=1;
          }
          void edit(unsigned int t)////////////////////////////對(duì)月,天 時(shí) 分 秒的計(jì)算
          {
          unsigned int a,b;
          a=t/10;
          b=t%10;
          Write_Data(num[a]);
          Write_Data(num[b]);
          }
          void showmiddle(unsigned int x)///////////////////////////////顯示冒號(hào)的函數(shù)
          { Write_Comn(x);
          Write_Data(middle[0]);
          }
          void showhaha(unsigned int x)//////////////////////////////////顯示笑臉的函數(shù)
          {unsigned int i;
          Write_Comn(x);
          for(i=0;i<3;i++)
          Write_Data(haha[i]);
          }
          void showtime()
          {unsigned int a,b,c,d;


          a=year/1000;
          b=(year%1000)/100;
          c=((year%1000)%100)/10;
          d=year%1000%100%10;
          init();
          showhaha(0x80); /////////////////////////////////顯示笑臉
          Write_Comn(0x80+3);
          Write_Data(num[a]);
          Write_Data(num[b]);
          Write_Data(num[c]);
          Write_Data(num[d]);

          showmiddle(0x80+7); ////////////////////////////顯示冒號(hào)
          Write_Comn(0x80+8);
          edit(month);

          showmiddle(0x80+10); ////////////////////////////顯示冒號(hào)
          Write_Comn(0x80+11);
          edit(day);
          showhaha(0x80+13);///////////////////////////////////////顯示笑臉
          showhaha(0xc0+1); //////////////////////////////////////顯示笑臉
          Write_Comn(0xc0+4);
          edit(hour);

          showmiddle(0xc0+6); ////////////////////////////顯示冒號(hào)
          Write_Comn(0xc0+7);
          edit(min);

          showmiddle(0xc0+9); /////////////////////////////////顯示冒號(hào)
          Write_Comn(0xc0+10);
          edit(second);
          showhaha(0xc0+12);////////////////////////////////顯示笑臉
          }
          //////////////////////////////////
          /////////////////////////////////////
          ///////////////////////////////鍵盤上顯示數(shù)字的小函數(shù)
          void shownumber()
          {
          numberflag=0;
          Write_Comn(0x80+number-1);
          Write_Data(num[number]);
          }



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();