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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)12864液晶顯示數(shù)字函數(shù)

          基于51單片機(jī)12864液晶顯示數(shù)字函數(shù)

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
          經(jīng)常去查些技術(shù)性的文章,很多人都以博客的形式寫出來(lái),說(shuō)是利人利己。我覺(jué)得有道理。
          回頭又想到,自己申請(qǐng)的新浪微博也好些年了,確很少發(fā)博文,今天就發(fā)第一篇技術(shù)博客吧。
          希望能養(yǎng)成這個(gè)習(xí)慣。。
          好了,今天晚上花了我兩個(gè)小時(shí),就為了寫一個(gè)簡(jiǎn)單的函數(shù),可能不足40行。但確實(shí)遇到了點(diǎn)問(wèn)題,最后還是解決了。
          函數(shù)的作用就是用12864液晶顯示器,來(lái)顯示任意位數(shù)的數(shù)字。為什么要寫這個(gè)函數(shù)呢?因?yàn)槲以谑褂?strong>12864的過(guò)程中經(jīng)常用到一些接口函數(shù),十分的方便。比如write_char();write_string();寫字符和寫字符串函數(shù)。
          但是要寫一個(gè)數(shù)字,卻沒(méi)法了,我可以一位數(shù)一位數(shù)拆開來(lái)用顯示字符函數(shù)。但是這樣很麻煩,最要命的一點(diǎn)是,由于12864的地址是2個(gè)字節(jié)單位的(這里有些不專業(yè)了),可能是為了寫漢字,數(shù)字不能緊緊靠在一起,中間會(huì)空一格字節(jié),很是浪費(fèi)啊。于是就有了這個(gè)寫數(shù)字函數(shù)。
          void write_num(uchar x,uchar y,unsigned long int num)
          {
          uchar i=10;
          switch (y)
          {
          case 0: Lcd_WriteCmd(0x80+x);break;
          case 1: Lcd_WriteCmd(0x90+x);break;
          case 2: Lcd_WriteCmd(0x88+x);break;
          case 3: Lcd_WriteCmd(0x98+x);break;
          default: ;
          }
          while(i>=1)
          {
          if((uchar)(num/pow(10,i-1))!=0)
          break;
          i--;
          }
          while(i)
          {
          Lcd_WriteData(num/(u32)(pow(10,i-1))+0);
          num=num%(u32)(pow(10,i-1));
          i--;
          }
          }
          首先肯定不是任意位數(shù)了,畢竟顯示屏就那么大,顯示位數(shù)肯定有限。我們注意到C語(yǔ)言里
          unsigned long int型是很大的了,是32位,4個(gè)字節(jié),最大是4294967295..
          這里是十個(gè)位數(shù),所以我們的參數(shù)是u32類型,另XY參數(shù)就是在12864上顯示的坐標(biāo)位置。
          這個(gè)函數(shù)值是先確定要寫入的坐標(biāo),然后確定數(shù)的位數(shù),然后從高位開始一位一位寫入。
          定義一個(gè)變量i;初始化位10。
          值得一提的是,我遇到的問(wèn)題,不知道其他人有沒(méi)有遇到。
          用pow函數(shù)時(shí),由于庫(kù)函數(shù)定義的都是double型的,在取余數(shù)是會(huì)報(bào)錯(cuò)。我先加了強(qiáng)制類型轉(zhuǎn)換。發(fā)現(xiàn)不行,顯示很多數(shù)都出錯(cuò)。經(jīng)過(guò)仿真調(diào)試,覺(jué)得問(wèn)題就出現(xiàn)在pow函數(shù)這里。
          于是,我自己寫pow函數(shù),數(shù)據(jù)類型都用整型的,這樣就免去數(shù)據(jù)類型轉(zhuǎn)換時(shí)候的數(shù)據(jù)丟失了。
          這樣改了以后就可以了。ok
          寫上我寫的pow函數(shù)把,,很簡(jiǎn)單的。
          u32 pow(uchar a,uchar b)
          {
          u32 result=1;// 初始化為 1
          for(;b>0;b--)
          {
          result*=a;
          }
          return result;
          }
          過(guò)兩天寫一個(gè)計(jì)算器程序。。。


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