新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于PIC16F877A單片機設計的萬年歷程序

        基于PIC16F877A單片機設計的萬年歷程序

        作者: 時間:2012-11-27 來源:網絡 收藏

        /*-------------------------------------------------------*/
        //顯示一個16X32的字符
        void Show16X32(unsigned char line,unsigned char column,const unsigned char *pt)
        {
        unsigned char i,column_temp1,column_temp2,column_temp3;
        column_temp1=column;
        column_temp2=column;
        column_temp3=column;
        SlectScreen(1); //選通左屏
        SetColumn(column); //設置起始列
        SetLine(line); //設置行
        for(i=0;i=64) //如果列>=64,則選通右屏
        {
        SlectScreen(2);
        column=column%64; //設置右屏起始列
        SetColumn(column);
        SetLine(line);
        }
        WriteData(*pt); //寫數據
        *pt++;
        column++;
        }
        SlectScreen(1);
        SetLine(line+1);
        column=column_temp1;
        SetColumn(column);
        for(i=0;i=64)
        {
        SlectScreen(2);
        column=column%64;
        SetColumn(column);
        SetLine(line+1);
        }
        WriteData(*pt);
        *pt++;
        column++;
        }
        SlectScreen(1);
        SetLine(line+2);
        column=column_temp2;
        SetColumn(column);
        for(i=0;i=64)
        {
        SlectScreen(2);
        column=column%64;
        SetColumn(column);
        SetLine(line+2);
        }
        WriteData(*pt);
        *pt++;
        column++;
        }
        SlectScreen(1);
        SetLine(line+3);
        column=column_temp3;
        SetColumn(column);
        for(i=0;i=64)
        {
        SlectScreen(2);
        column=column%64;
        SetColumn(column);
        SetLine(line+3);
        }
        WriteData(*pt);
        *pt++;
        column++;
        }
        }
        /*-------------------------------------------------------*/
        //LCD初始化子程序
        void LCDinit()
        {
        ADCON1=0x06;
        TRISA=0x00;
        TRISB=0x00;
        PORTB=0x00;
        SetOnOff(1);
        }
        /*----------------------------------------------------------*/
        //調用LCD顯示子程序
        void ChangeToLCD(uch line,uch column,uch data)
        {
        int D_ge,D_shi;

        D_ge=data%10; //取個位
        D_shi=data%100/10; //取十位

        switch(D_ge)
        {
        case 0:{Show8X16(line,column+8,s0);break;}
        case 1:{Show8X16(line,column+8,s1);break;}
        case 2:{Show8X16(line,column+8,s2);break;}
        case 3:{Show8X16(line,column+8,s3);break;}
        case 4:{Show8X16(line,column+8,s4);break;}
        case 5:{Show8X16(line,column+8,s5);break;}
        case 6:{Show8X16(line,column+8,s6);break;}
        case 7:{Show8X16(line,column+8,s7);break;}
        case 8:{Show8X16(line,column+8,s8);break;}
        case 9:{Show8X16(line,column+8,s9);break;}
        }
        switch(D_shi)
        {
        case 0:{Show8X16(line,column,s0);break;}
        case 1:{Show8X16(line,column,s1);break;}
        case 2:{Show8X16(line,column,s2);break;}
        case 3:{Show8X16(line,column,s3);break;}
        case 4:{Show8X16(line,column,s4);break;}
        case 5:{Show8X16(line,column,s5);break;}
        case 6:{Show8X16(line,column,s6);break;}
        case 7:{Show8X16(line,column,s7);break;}
        case 8:{Show8X16(line,column,s8);break;}
        case 9:{Show8X16(line,column,s9);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        void ChangeToLCD2(uch line,uch column,uch data)//帶上劃線
        {
        int D_ge,D_shi;
        D_ge=data%10; //取個位
        D_shi=data%100/10; //取十位

        switch(D_ge)
        {
        case 0:{Show8X16_2(line,column+8,s0);break;}
        case 1:{Show8X16_2(line,column+8,s1);break;}
        case 2:{Show8X16_2(line,column+8,s2);break;}
        case 3:{Show8X16_2(line,column+8,s3);break;}
        case 4:{Show8X16_2(line,column+8,s4);break;}
        case 5:{Show8X16_2(line,column+8,s5);break;}
        case 6:{Show8X16_2(line,column+8,s6);break;}
        case 7:{Show8X16_2(line,column+8,s7);break;}
        case 8:{Show8X16_2(line,column+8,s8);break;}
        case 9:{Show8X16_2(line,column+8,s9);break;}
        }
        switch(D_shi)
        {
        case 0:{Show8X16_2(line,column,s0);break;}
        case 1:{Show8X16_2(line,column,s1);break;}
        case 2:{Show8X16_2(line,column,s2);break;}
        case 3:{Show8X16_2(line,column,s3);break;}
        case 4:{Show8X16_2(line,column,s4);break;}
        case 5:{Show8X16_2(line,column,s5);break;}
        case 6:{Show8X16_2(line,column,s6);break;}
        case 7:{Show8X16_2(line,column,s7);break;}
        case 8:{Show8X16_2(line,column,s8);break;}
        case 9:{Show8X16_2(line,column,s9);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        void ChangeToLCD3(uch line,uch column,uch data)//帶下劃線
        {
        int D_ge,D_shi;

        D_ge=data%10; //取個位
        D_shi=data%100/10; //取十位

        switch(D_ge)
        {
        case 0:{Show16X32(line,column+16,ss0);break;}
        case 1:{Show16X32(line,column+16,ss1);break;}
        case 2:{Show16X32(line,column+16,ss2);break;}
        case 3:{Show16X32(line,column+16,ss3);break;}
        case 4:{Show16X32(line,column+16,ss4);break;}
        case 5:{Show16X32(line,column+16,ss5);break;}
        case 6:{Show16X32(line,column+16,ss6);break;}
        case 7:{Show16X32(line,column+16,ss7);break;}
        case 8:{Show16X32(line,column+16,ss8);break;}
        case 9:{Show16X32(line,column+16,ss9);break;}
        }
        switch(D_shi)
        {
        case 0:{Show16X32(line,column,ss0);break;}
        case 1:{Show16X32(line,column,ss1);break;}
        case 2:{Show16X32(line,column,ss2);break;}
        case 3:{Show16X32(line,column,ss3);break;}
        case 4:{Show16X32(line,column,ss4);break;}
        case 5:{Show16X32(line,column,ss5);break;}
        case 6:{Show16X32(line,column,ss6);break;}
        case 7:{Show16X32(line,column,ss7);break;}
        case 8:{Show16X32(line,column,ss8);break;}
        case 9:{Show16X32(line,column,ss9);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        void ChangeToLCD4(uch line,uch column,uch data)//星期轉換
        {
        switch(data)
        {
        case 1:{Show16X16_3(line,column,ri);break;}
        case 2:{Show16X16_3(line,column,yi);break;}
        case 3:{Show16X16_3(line,column,er);break;}
        case 4:{Show16X16_3(line,column,san);break;}
        case 5:{Show16X16_3(line,column,si);break;}
        case 6:{Show16X16_3(line,column,wu);break;}
        case 7:{Show16X16_3(line,column,liu);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        void ChangeToLCD5(uch line,uch column,uch data)//生肖轉換
        {
        data=data%12;
        switch(data)
        {
        case 0:{Show16X16_3(line,column,llong);break;}
        case 1:{Show16X16_3(line,column,she);break;}
        case 2:{Show16X16_3(line,column,ma);break;}
        case 3:{Show16X16_3(line,column,yang);break;}
        case 4:{Show16X16_3(line,column,hou);break;}
        case 5:{Show16X16_3(line,column,ji);break;}
        case 6:{Show16X16_3(line,column,gou);break;}
        case 7:{Show16X16_3(line,column,zhu);break;}
        case 8:{Show16X16_3(line,column,shu);break;}
        case 9:{Show16X16_3(line,column,niu);break;}
        case 10:{Show16X16_3(line,column,hu);break;}
        case 11:{Show16X16_3(line,column,tu);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        void ChangeToLCD6(uch line,uch column,uch data)//陰歷月轉換
        {
        data=data%12;
        switch(data)
        {
        case 0:{Show16X16_2(line,column,zheng);break;}
        case 1:{Show16X16_2(line,column,er);break;}
        case 2:{Show16X16_2(line,column,san);break;}
        case 3:{Show16X16_2(line,column,si);break;}
        case 4:{Show16X16_2(line,column,wu);break;}
        case 5:{Show16X16_2(line,column,liu);break;}
        case 6:{Show16X16_2(line,column,qqi);break;}
        case 7:{Show16X16_2(line,column,ba);break;}
        case 8:{Show16X16_2(line,column,jiu);break;}
        case 9:{Show16X16_2(line,column,shi);break;}
        case 10:{Show16X16_2(line,column,shiyi);break;}
        case 11:{Show16X16_2(line,column,la);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        void ChangeToLCD7(uch line,uch column,uch data)//陰歷日
        {
        data=data%12;
        switch(data)
        {
        case 0:{Show16X16_2(line,column,yi);break;}
        case 1:{Show16X16_2(line,column,er);break;}
        case 2:{Show16X16_2(line,column,san);break;}
        case 3:{Show16X16_2(line,column,si);break;}
        case 4:{Show16X16_2(line,column,wu);break;}
        case 5:{Show16X16_2(line,column,liu);break;}
        case 6:{Show16X16_2(line,column,qqi);break;}
        case 7:{Show16X16_2(line,column,ba);break;}
        case 8:{Show16X16_2(line,column,jiu);break;}
        case 9:{Show16X16_2(line,column,shi);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        void ChangeToLCD8(uch line,uch column,uch data)//陰歷日十位
        {
        data=data%3;
        switch(data)
        {
        case 0:{Show16X16_2(line,column,chu);break;}
        case 1:{Show16X16_2(line,column,er);break;}
        case 2:{Show16X16_2(line,column,san);break;}
        }
        }
        /*-----------------------------------------------------------------*/
        程序結束

        三,總結
        到現在為止,我對液晶的操作已經基本掌握了,并可以熟練應用.但是本程序中陽歷轉陰歷的程序還是不對,我想不出更好的轉換辦法,希望大家能提供方法完善.由于篇幅原因,沒有將陽歷轉陰歷的程序,和液晶字庫的程序附載上面,


        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 和静县| 瑞丽市| 昌乐县| 德惠市| 西平县| 淳化县| 霞浦县| 建始县| 嘉荫县| 吉隆县| 佛教| 丹寨县| 平远县| 马尔康县| 鹿邑县| 南漳县| 慈溪市| 寿阳县| 定西市| 沛县| 辛集市| 大化| 马山县| 广德县| 正镶白旗| 工布江达县| 镇原县| 长垣县| 南和县| 营山县| 平顶山市| 泾川县| 修文县| 门源| 上栗县| 广水市| 驻马店市| 黄龙县| 黄骅市| 隆尧县| 新平|