<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ī)C編程(十一、電話撥號(hào)模擬液晶顯示)

          51單片機(jī)C編程(十一、電話撥號(hào)模擬液晶顯示)

          作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
          *程序名稱:電話撥號(hào)模擬(液晶顯示)

          *創(chuàng)建人:jumpmysoul
          *完成日期:2009.06.06
          *版本:V1.0
          *功能說明:按下電話鍵盤上的一個(gè)按鍵,在液晶顯示屏上相應(yīng)的顯示出按下的
          按鍵對(duì)應(yīng)的字符,按下DEL鍵,則刪除一個(gè)字符 (不足之處:在刪除所有的字符后
          光標(biāo)不見了,如果繼續(xù)刪除幾次,再輸入的時(shí)候就要多按幾次按鍵)

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

          #include
          #define uchar unsigned char
          #define uint unsigned int
          #define LCDPORT P0
          #define KEYP1
          //#define WEIP2

          sbit DEL=P3^0;
          sbit LCDE=P3^5;
          sbit LCDRW=P3^6;
          sbit LCDRS=P3^7;

          uchar code NUM[12]="0123456789*#";

          uchar addr=0;

          void WriteCMD(uchar);
          void init();
          void WriteData(uchar);
          void Delete();

          void Delay_ms(uint);
          uchar KeyScan();
          void main()
          {
          init();
          while(1)
          {
          if(KeyScan()!=20)//判斷電話按鍵是否按下
          {
          addr++;//地址變量加1
          WriteData(NUM[KeyScan()]);//在液晶上顯示按下的鍵值
          Delay_ms(100);//延時(shí),作用是只顯示一個(gè)字符,如果沒有延時(shí),則會(huì)顯示一串字符
          }

          if(DEL==0)//判斷DEL按鍵是否按下
          {
          Delay_ms(10);
          if(DEL==0)
          while(DEL==0);
          Delay_ms(10);
          while(DEL==0);
          Delete();
          }
          }

          }
          uchar KeyScan()
          {
          uchar temp=20;
          KEY=0xef;//掃描第1列鍵
          switch(KEY)
          {
          case 0xee:temp=1;break;
          case 0xed:temp=4;break;
          case 0xeb:temp=7;break;
          case 0xe7:temp=10;break;
          default:break;
          }
          KEY=0xdf;//掃描第2列鍵
          switch(KEY)
          {
          case 0xde:temp=2;break;
          case 0xdd:temp=5;break;
          case 0xdb:temp=8;break;
          case 0xd7:temp=0;break;
          default:break;
          }
          KEY=0xbf;//掃描第3列鍵
          switch(KEY)
          {
          case 0xbe:temp=3;break;
          case 0xbd:temp=6;break;
          case 0xbb:temp=9;break;
          case 0xb7:temp=11;break;
          default:break;
          }
          return(temp);//返回按鍵鍵值
          }
          void Delay_ms(uint x)
          {
          uint i,j;
          for(i=x;i>0;i--)
          for(j=120;j>0;j--);
          }
          void WriteCMD(uchar Command)
          {
          Delay_ms(10);//先延時(shí)。

          LCDE=1;//然后把LCD改為寫入命令狀態(tài)。
          LCDRS=0;
          LCDRW=0;

          LCDPORT=Command;//再輸出命令。

          LCDE=0;//最后執(zhí)行命令。
          }
          void WriteData(uchar dat)
          {
          Delay_ms(10);//先延時(shí)。

          LCDE=1;//然后把LCD改為寫入數(shù)據(jù)狀態(tài)。
          LCDRS=1;
          LCDRW=0;

          LCDPORT=dat;//再輸出數(shù)據(jù)。

          LCDE=0;//最后顯示數(shù)據(jù)。
          }
          void init()
          {
          LCDRW=0;
          LCDE=0;
          WriteCMD(0x38);
          WriteCMD(0x0f);
          WriteCMD(0x06);
          WriteCMD(0x01);
          WriteCMD(0x80);
          }
          void Delete()
          {
          if( (addr--)>0)
          {
          WriteCMD(0x04);//讀寫一個(gè)字符后地址指針減1,光標(biāo)左移
          WriteData( );
          }
          WriteCMD(0x06);//讀寫一個(gè)字符后地址指針加1,光標(biāo)右移

          }



          評(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); })();