色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          經(jīng)常去查些技術(shù)性的文章,很多人都以博客的形式寫出來,說是利人利己。我覺得有道理。
          回頭又想到,自己申請(qǐng)的新浪微博也好些年了,確很少發(fā)博文,今天就發(fā)第一篇技術(shù)博客吧。
          希望能養(yǎng)成這個(gè)習(xí)慣。。
          好了,今天晚上花了我兩個(gè)小時(shí),就為了寫一個(gè)簡單的函數(shù),可能不足40行。但確實(shí)遇到了點(diǎn)問題,最后還是解決了。
          函數(shù)的作用就是用12864液晶顯示器,來顯示任意位數(shù)的數(shù)字。為什么要寫這個(gè)函數(shù)呢?因?yàn)槲以谑褂?strong>12864的過程中經(jīng)常用到一些接口函數(shù),十分的方便。比如write_char();write_string();寫字符和寫字符串函數(shù)。
          但是要寫一個(gè)數(shù)字,卻沒法了,我可以一位數(shù)一位數(shù)拆開來用顯示字符函數(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語言里
          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。
          值得一提的是,我遇到的問題,不知道其他人有沒有遇到。
          用pow函數(shù)時(shí),由于庫函數(shù)定義的都是double型的,在取余數(shù)是會(huì)報(bào)錯(cuò)。我先加了強(qiáng)制類型轉(zhuǎn)換。發(fā)現(xiàn)不行,顯示很多數(shù)都出錯(cuò)。經(jīng)過仿真調(diào)試,覺得問題就出現(xiàn)在pow函數(shù)這里。
          于是,我自己寫pow函數(shù),數(shù)據(jù)類型都用整型的,這樣就免去數(shù)據(jù)類型轉(zhuǎn)換時(shí)候的數(shù)據(jù)丟失了。
          這樣改了以后就可以了。ok
          寫上我寫的pow函數(shù)把,,很簡單的。
          u32 pow(uchar a,uchar b)
          {
          u32 result=1;// 初始化為 1
          for(;b>0;b--)
          {
          result*=a;
          }
          return result;
          }
          過兩天寫一個(gè)計(jì)算器程序。。。


          評(píng)論


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

          關(guān)閉