微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用矩阵键盘和1602制作一个简易计算器,下面是我写的程序,大神帮我加个算法。。

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

时间:10-02 整理:3721RD 点击:
#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元感谢费。





我有一个超级计算器,是以前的设计题目,除了加减乘除外,还有平方 开方,求根,求指数,进制转换(算法你可以改善)等等,4.4矩阵键盘二次键盘二次功能都用完了,可以连算,有保存,等等,,,有仿真图,源程序。

我有程序用矩阵键盘和1602制作一个简易计算

你把每一次扫描的值记录下来,然后用switch语句进行加减乘除的运算

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top