新聞中心

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

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

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


        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 石屏县| 岳西县| 井冈山市| 防城港市| 辽阳市| 拉萨市| 开原市| 惠水县| 冀州市| 广德县| 甘德县| 石台县| 铜山县| 清流县| 阿拉善盟| 蒙自县| 昌吉市| 海晏县| 汉阴县| 牟定县| 府谷县| 耒阳市| 姚安县| 和龙市| 桐乡市| 阿克苏市| 万山特区| 苍南县| 宁南县| 开化县| 广南县| 库伦旗| 濮阳县| 肃宁县| 泗阳县| 墨竹工卡县| 司法| 华坪县| 邵阳市| 宣武区| 拜泉县|