用矩阵键盘和1602制作一个简易计算器,下面是我写的程序,大神帮我加个算法。。

2019-07-15 16:28发布

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden = P2^7;
sbit lcdrs = P2^6;
sbit lcdrw = P2^5;
void display();
void delay(uchar z);
void writedata(uchar dat);
void writecom(uchar com);
void init();


void main()
{
        init();
        while(1)
        {
                display();
        }
}


void display()
{
        uchar temp;
        P1 = 0x7f;
        temp = P1;
        temp = temp & 0x0f;
        if(temp != 0x0f)
        {
                delay(30);
                temp = P1;
                temp = temp & 0x0f;
                if(temp != 0x0f)
                {
                        switch (temp)
                        {
                                case 0x07:writedata('/');
                                break;
                                case 0x0b:writedata('*');
                                break;
                                case 0x0d:writedata('-');
                                break;
                                case 0x0e:writedata('+');
                                break;
                        }
                }
                        while(temp != 0x0f)
                        {
                                temp = P1;
                                temp = temp & 0x0f;
                         }
        }

        P1 = 0xbf;
        temp = P1;
        temp = temp & 0x0f;
        if(temp != 0x0f)
        {
                delay(30);
                temp = P1;
                temp = temp & 0x0f;
                if(temp != 0x0f)
                {
                        switch (temp)
                        {
                                case 0x07:writedata('=');
                                break;
                                case 0x0b:writedata('3');
                                break;
                                case 0x0d:writedata('6');
                                break;
                                case 0x0e:writedata('9');
                                break;
                        }
                }
                        while(temp != 0x0f)
                        {
                                temp = P1;
                                temp = temp & 0x0f;
                         }
        }

        P1 = 0xdf;
        temp = P1;
        temp = temp & 0x0f;
        if(temp != 0x0f)
        {
                delay(30);
                temp = P1;
                temp = temp & 0x0f;
                if(temp != 0x0f)
                {
                        switch (temp)
                        {
                                case 0x07:writedata('0');
                                break;
                                case 0x0b:writedata('2');
                                break;
                                case 0x0d:writedata('5');
                                break;
                                case 0x0e:writedata('8');
                                break;
                        }
                }
                        while(temp != 0x0f)
                        {
                                temp = P1;
                                temp = temp & 0x0f;
                         }
        }

        P1 = 0xef;
        temp = P1;
        temp = temp & 0x0f;
        if(temp != 0x0f)
        {
                delay(30);
                temp = P1;
                temp = temp & 0x0f;
                if(temp != 0x0f)
                {
                        switch (temp)
                        {
                                case 0x07:writedata('.');
                                break;
                                case 0x0b:writedata('1');
                                break;
                                case 0x0d:writedata('4');
                                break;
                                case 0x0e:writedata('7');
                                break;
                        }
                }
                        while(temp != 0x0f)
                        {
                                temp = P1;
                                temp = temp & 0x0f;
                         }
        }
}


void init()
{
        writecom(0x38);
        writecom(0x0f);
        writecom(0x06);
        writecom(0x01);
        writecom(0x80);
}


void writecom(uchar com)
{
        lcden = 0;
        lcdrs = 0;
        lcdrw = 0;
        P0 = com;
        delay(5);
        lcden = 1;
        delay(5);
        lcden = 0;
}


void writedata(uchar dat)
{
        lcden = 0;
        lcdrs = 1;
        lcdrw = 0;
        P0 = dat;
        delay(5);
        lcden = 1;
        delay(5);
        lcden = 0;
}


void delay(uchar z)
{
        uchar a, b;
        for(a = z; a > 0; a--)
        for(b = 110; b > 0; b--);
}

QQ594011024      完成了可以加我QQ,本人保证支付支付宝30元感谢费。。
QQ图片20150720105305.png
QQ图片20150728204105.png
QQ图片20150728204202.png
QQ图片20150728204230.png

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
杨鑫斌
1楼-- · 2019-07-15 20:08
我有一个超级计算器,是以前的设计题目,除了加减乘除外,还有平方 开方,求根,求指数,进制转换(算法你可以改善)等等,4.4矩阵键盘二次键盘二次功能都用完了,可以连算,有保存,等等,,,有仿真图,源程序。
杨鑫斌
2楼-- · 2019-07-16 00:00
我有程序用矩阵键盘和1602制作一个简易计算
薛大少
3楼-- · 2019-07-16 03:46
你把每一次扫描的值记录下来,然后用switch语句进行加减乘除的运算
重度发烧友患者
4楼-- · 2019-07-16 07:21
 精彩回答 2  元偷偷看……
chanke
5楼-- · 2019-07-16 08:18
杨鑫斌 发表于 2015-7-29 11:27
我有一个超级计算器,是以前的设计题目,除了加减乘除外,还有平方 开方,求根,求指数,进制转换(算法你可以改善)等等,4.4矩阵键盘二次键盘二次功能都用完了,可以连算,有保存,等等,,,有仿真图,源程序。

我需要,谢谢

一周热门 更多>