新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > LCD簡易計算器

        LCD簡易計算器

        作者: 時間:2016-11-21 來源:網絡 收藏
        #include
        #define uchar unsigned char
        #define uint unsigned int
        sbit rs=P2^6;
        sbit rw=P2^5;
        sbit en=P2^7;
        sbit k1=P3^0;
        sbit k2=P3^1;
        sbit k3=P3^2;
        sbit k4=P3^3;
        sbit k5=P3^4;
        sbit k6=P3^5;
        sbit k7=P3^6;
        sbit k8=P3^7;
        uchar t,k;
        uint a,b,c;
        uchar code table[]={+,-,*,/};
        void delayms(int z)
        {
        int x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }
        void write_com(uchar com)
        {
        rs=0;
        rw=0;
        en=0;
        P0=com;
        delayms(10);
        en=1;
        delayms(10);
        en=0;
        delayms(2);
        }
        void write_dat(uchar dat)
        {
        rs=1;
        rw=0;
        en=0;
        P0=dat;
        delayms(10);
        en=1;
        delayms(10);
        en=0;
        delayms(2);
        }
        void write_zfc(uchar *ch)
        {
        while(*ch!=0)
        write_dat(*ch++);
        }
        void init_1602()
        {
        write_com(0x38);
        delayms(5);
        write_com(0x0c);
        delayms(5);
        write_com(0x04);
        delayms(5);
        write_com(0x01);
        delayms(5);
        write_com(0x80+1);
        delayms(5);
        write_zfc("input =");
        delayms(5);
        write_com(0x80+0x40+2);
        delayms(5);
        write_zfc("output ");
        delayms(5);
        }
        void keyscan()
        {
        uchar bai,shi,ge;
        if(k1==0)
        {
        delayms(5);
        while(!k1);
        if(t==0)
        {
        write_com(0x80+8);
        delayms(5);
        write_com(0x0f);
        delayms(5);
        }
        if(t==1)
        {
        write_com(0x80+9);
        delayms(5);
        write_com(0x0f);
        delayms(5);
        }
        if(t==2)
        {
        write_com(0x80+11);
        delayms(5);
        write_com(0x0f);
        delayms(5);
        }
        t++;
        if(t>2)
        t=0;
        }
        if(k2==0)
        {
        delayms(5);
        while(!k2);
        write_com(0x0c);
        t=0;
        switch(k)
        {
        case 1:c=a+b;break;
        case 2:c=a-b;break;
        case 3:c=a*b;break;
        default :c=a/b;break;
        }
        bai=c/100;
        shi=(c-bai*100)/10;
        ge=c;
        write_com(0x80+0x40+9);
        delayms(5);
        write_dat(0x30+bai);
        delayms(5);
        write_com(0x80+0x40+10);
        delayms(5);
        write_dat(0x30+shi);
        delayms(5);
        write_com(0x80+0x40+11);
        delayms(5);
        write_dat(0x30+ge);
        delayms(5);
        }
        if(k3==0)
        {
        delayms(5);
        while(!k3);
        switch(t)
        {
        case 1:a++;
        shi=a/10;
        ge=a;
        write_com(0x80+7);
        delayms(5);
        write_dat(0x30+shi);
        delayms(5);
        write_com(0x80+8);
        delayms(5);
        write_dat(0x30+ge);
        delayms(5);
        write_com(0x80+8);
        break;
        case 2:
        write_com(0x80+9);
        delayms(5);
        write_dat(table[k]);
        write_com(0x80+9);
        k++;
        if(k>3)
        k=0;
        break;
        default :b++;
        shi=b/10;
        ge=b;
        write_com(0x80+10);
        delayms(5);
        write_dat(0x30+shi);
        delayms(5);
        write_com(0x80+11);
        delayms(5);
        write_dat(0x30+ge);
        delayms(5);
        write_com(0x80+11);
        break;
        }
        }
        if(k4==0)
        {
        delayms(5);
        while(!k4);
        switch(t)
        {
        case 1:a--;
        shi=a/10;
        ge=a;
        write_com(0x80+7);
        delayms(5);
        write_dat(0x30+shi);
        delayms(5);
        write_com(0x80+8);
        delayms(5);
        write_dat(0x30+ge);
        delayms(5);
        write_com(0x80+8);
        break;
        case 2:
        write_com(0x80+9);
        delayms(5);
        write_dat(table[k]);
        write_com(0x80+9);
        k++;
        if(k>3)
        k=0;
        break;
        default :b--;
        shi=b/10;
        ge=b;
        write_com(0x80+10);
        delayms(5);
        write_dat(0x30+shi);
        delayms(5);
        write_com(0x80+11);
        delayms(5);
        write_dat(0x30+ge);
        delayms(5);
        write_com(0x80+11);
        break;
        }
        }
        }
        void main()
        {
        init_1602();
        while(1)
        {
        keyscan();
        }
        }



        關鍵詞: LCD簡易計算

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 普洱| 潞城市| 通化市| 望都县| 江津市| 通渭县| 开封县| 同心县| 壶关县| 连城县| 都昌县| 淅川县| 灵川县| 海阳市| 龙泉市| 南城县| 乌兰浩特市| 清远市| 鄢陵县| 铜陵市| 晋州市| 大姚县| 文登市| 南开区| 邻水| 巨野县| 平定县| 筠连县| 佛学| 金乡县| 宜兰县| 云和县| 宜阳县| 自治县| 阿瓦提县| 乌兰浩特市| 广水市| 桐柏县| 增城市| 广州市| 章丘市|