找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12936|回复: 50
打印 上一主题 下一主题
收起左侧

牛人制作的单片机科学型计算器,功能太强大 大家一起欣赏

  [复制链接]
跳转到指定楼层
楼主
以下是计算器功能演示视频地址:
https://www.bilibili.com/video/B ... 3625234719827099345

制作出来的实物图如下:


以下是部分单片机程序代码:
完整代码在附件中

#include "STC12C5A60S2.h"
#include "alg_caculate.h"
#include "UART.h"
#include "alg_linearlist.h"
#include "keyboard_input.h"
#include "lcd_12864.h"
#include "mode.h"
#include "solve_equation.h"
#include "function_pic.h"
#include "eeprom_rw.h"
#include "pwm.h"
#include "time.h"

#include <stdio.h>
#include <stdlib.h>

#define uchar unsigned char
#define uint unsigned int

uchar num0;                 //输入的键值
int         count1;       //翻页计数


void main()
{
        PWM_init();
        t0_init();
        t1_init();
        lcd_init();
        lcd_clear_pic();
        while(1)
        {
        
        
        mode_select();
        
        }


}

全部资料51hei下载地址:
计算器正式版Ver1.0.0.7z (545.05 KB, 下载次数: 339)

评分

参与人数 2黑币 +80 收起 理由
大胆1 + 30 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏53 分享淘帖 顶7 踩
回复

使用道具 举报

沙发
ID:163090 发表于 2020-4-3 17:48 | 只看该作者
计算器主控芯片为STC12C5A60S2,显示器为12864液晶。额外的外设有EEPROM、DS1302、矩阵键盘,为科学计算器提供存储、时钟、输入功能。 在等号被按下前,允许输入完整的表达式。因此在软件上需要做到语法识别、优先级顺序、括号嵌套等功能。 计算器拥有普通计算(表达式与函数识别、计算)、计算结果存储/回看、复数计算、矩阵运算、函数图形、解方程、统计、最小二乘法求回归直线、一阶常微分方程、单位,进制转换、定积分、求导等功能。 有节电模式,5分钟不输入自动关机,液晶屏亮度5级可调。
回复

使用道具 举报

板凳
ID:163090 发表于 2020-4-3 17:48 | 只看该作者
计算器主控芯片为STC12C5A60S2,显示器为12864液晶。额外的外设有EEPROM、DS1302、矩阵键盘,为科学计算器提供存储、时钟、输入功能。
在等号被按下前,允许输入完整的表达式。因此在软件上需要做到语法识别、优先级顺序、括号嵌套等功能。
计算器拥有普通计算(表达式与函数识别、计算)、计算结果存储/回看、复数计算、矩阵运算、函数图形、解方程、统计、最小二乘法求回归直线、一阶常微分方程、单位,进制转换、定积分、求导等功能。
有节电模式,5分钟不输入自动关机,液晶屏亮度5级可调。
回复

使用道具 举报

地板
ID:163090 发表于 2020-4-3 18:03 | 只看该作者
没有电路图,系统按键部分电路需要自己根据按键模块程序来进行分析反推 硬件电路应该如何连接。矩阵按键有8行5列,一共是40个按键,按照程序的意思好像是电路图如下图所示:






以下是按键输入部分电路程序:

#include "STC12C5A60S2.h"
#include <intrins.h>
#include "keyboard_device.h"
#include "lcd_12864.h"
#include "eeprom_rw.h"
#include "mode.h"
#include "pwm.h"
#define uchar unsigned char
#define uint unsigned int
       

uchar shift=0;//shift键
void keyboard_cursor_flash(void);

extern bit gb_flag;
extern uchar flash_count;
extern uchar count;
extern uchar hang;

extern uint time_out;

uchar code welcome_pic[]={
        /*--  调入了一幅图像:boeing.bmp  --*/
        /*--  宽度x高度=128x64  --*/
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x07,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x7E,0x1F,0xC7,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0xFC,0x0F,0xE1,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x01,0xFC,0x07,0xE0,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x0F,0xE0,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF9,0x9F,0xE0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF9,0xFF,0xFF,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF9,0xFF,0xFF,0xBF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF9,0x1F,0xE0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x0F,0xF0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF8,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF8,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF8,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF8,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF8,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xF8,0x07,0xF0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xFC,0x07,0xE0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xFE,0x0F,0xC0,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x03,0xFF,0xFF,0x80,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

/* ========= 延时20ms11.0592MHz ========= */
void delay_20m(void)                //消抖用延时
{
        unsigned char i, j, k;

        i = 1;
        j = 216;
        k = 35;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

/* ========= 延时2s11.0592MHz ========= */
void delay_2s(void)                        //退出刷屏用延时
{
        unsigned char i, j, k;

        i = 64;
        j = 9;
        k = 179;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

/* ========= 键盘扫描 ========= */
uchar keyboard(void)
{       
        uchar code keyboard_Scan[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};        //键盘扫描库
                                                                                                //11111110,11111101,11111011,11110111,11101111,11011111,10111111,01111111
        uchar i, j, pc, flag = 0;
        uchar XScan=0;
        uchar in = 0;
        uchar test;
        while(in == 0)
        {
#ifdef KEY_X_IS_HIGH
                KEY_X &= 0x07;                        //清空高5位         0000 0111
                XScan = 0x80;                        //                         1000 0000
        //        XScan = 0x08;
#endif
//        #ifdef KEY_X_IS_LOW
//                        KEY_X &= 0xe0;                        //清空低5位         1110 0000
//                        XScan = 0x01;                        //                         0000 0001
//        #endif
                for(i=0;i<5;i++)
                {
                        KEY_X &=0x07;

                        test = XScan;
                        test = ~test;

                        KEY_X = test & 0xf8 ;
                        KEY_X = KEY_X | test;           //KEY_X接高八位

                        KEY_Y = 0xff;                                //置高
                        if(0xff != (pc = KEY_Y))        //假如说有按键按下
                        {
                                if(0xff != (pc = KEY_Y))        //假如说有按键按下
                                {
                                        delay_20m();
                                        for(j=0;j<8;j++)
                                        {                                                        //将扫描值与扫描按键值比较
                                                if( pc == keyboard_Scan[j] )
                                                {
                                                        in = j * 5 + i +1;
                                                        flag = 1;
                                                }
       
                                                if(flag == 1)
                                                {
                                                        while( KEY_Y == keyboard_Scan[j] );                //松手检测
                                                        delay_20m();
                                                        break;
                                                }
                                               
                                        }
                                }
                                if(flag == 1)
                                        break;
                        }
                        XScan >>= 1;                                //左移一位
                }
               
                keyboard_cursor_flash();
               
        }
        time_out = 0;                                //清空计时
        return in;
}

uchar keyboard_wake(void)
{       
        uchar i, pc, flag = 0;
        uchar XScan=0;
        uchar in = 0;
        uchar test;
       
#ifdef KEY_X_IS_HIGH
                KEY_X &= 0x07;                        //清空高5位         0000 0111
                XScan = 0x80;                        //                         1000 0000
        //        XScan = 0x08;
#endif
//        #ifdef KEY_X_IS_LOW
//                        KEY_X &= 0xe0;                        //清空低5位         1110 0000
//                        XScan = 0x01;                        //                         0000 0001
//        #endif
                for(i=0;i<5;i++)
                {
                        KEY_X &=0x07;

                        test = XScan;
                        test = ~test;

                        KEY_X = test & 0xf8 ;
                        KEY_X = KEY_X | test;           //KEY_X接高八位

                        KEY_Y = 0xff;                                //置高
                        if(0xff != (pc = KEY_Y))        //假如说有按键按下
                        {
                                return 1;
                        }
                        XScan >>= 1;                                //左移一位
                }
                return 0;               
}

/* ========= 光标闪烁 ========= */
void keyboard_cursor_flash(void)
{

        if(flash_count>=10)
                {
                        if(gb_flag==0)
                        {
                                lcd_yline(8*(count-1),16*hang+0,16*hang+15,1);
                                gb_flag=1;
                                }
                        else
                        {       
                                lcd_yline(8*(count-1),16*hang+0,16*hang+15,0);
                                gb_flag=0;
                                }
                        flash_count=0;
                }
        //键盘空闲监控
        if(byte_read(ADD_TIMEOUT, 0)<time_out/5600)
        {
                time_out = 0;
                mode_sleep();
        }
}

uchar keyboard_output()
{
        uchar result = keyboard();
        uchar num0=0xff;               
        switch( result )
        {
                case 1:
                        shift=~shift;

                        num0 = 0 ;
                        break;
                case 4:
                        //上翻
                        num0 = 3 ;       
                        break;
                case 6:
                        num0 = '(';
                        break;
                case 7:
                        num0 = ')';
                        break;
                case 8:
                        //地址左移一位
                        num0 = 5 ;
                        break;
                case 9:
                        //下翻
                        num0 = 6 ;
                        break;
                case 10:
                        //地址右移一位
                        num0 = 7 ;
                        break;
                case 17:
                //hyp?
                        num0 = 14 ;
                        break;
                //数字键
                case 36:
                        num0='0';
                        break;

                case 31:
                        //lcd_write_str("1");
                        num0 = '1';
                        break;
                case 32:
                        //lcd_write_str("2");
                        num0 = '2';
                        break;
                case 33:
                        //lcd_write_str("3");
                        num0 = '3';
                        break;
                       
                case 26:
                        num0='4';
                        break;
                case 27:
                        num0='5';
                        break;
                case 28:
                        num0='6';
                        break;
                case 21:
                        num0='7';
                        break;
                case 22:
                        num0='8';
                        break;
                case 23:
                        num0='9';
                        break;
                case 37:
                        num0='.';
                        break;
                //+-x/=
                case 29:
                        num0='*';
                        break;
                case 30:
                        num0='/';
                        break;
                case 34:
                        num0='+';
                        break;
                case 35:
                        num0='-';
                        break;
                case 40:
                        num0='=';
                //等于?
                        break;
               
                case 24:
                //删掉上一位,指针指向上一位?
                        num0 = 18 ;
                        break;
                case 25:
                //删掉整个字符串,指针指向该行起点?
                        num0 = 19 ;
                        break;       
                case 38:
                //ans?
                        num0 = 20 ;       
                        break;
                case 39:
                //copy?
                        num0 = 21 ;
                        break;
        }

        if(shift==0)
        {               
                switch(result)
                {
                        case 2:
                                //返回菜单?
                                num0 = 1;
                                break;
                        case 3:
                                num0 = 2;
                                break;
                        case 5:
                                //清屏,打开背光
                                num0 = 4;
                                break;
                        case 11:
                                //lcd_write_str("abs(");
                                num0 = 8;  //绝对值
                                break;
                        case 12:
                                //lcd_write_str("^2");
                                num0 = 9;  //平方
                                break;
                        case 13:
                                //lcd_write_str("^(");
                                num0 = '^';  //方
                                break;       
                        case 14:
                                //lcd_write_str("^(-1)");
                                num0 = 11;  //倒数
                                break;
                        case 15:
                                //lcd_write_str("exp(");
                                num0 = 12;
                                break;
                        case 16:
                                //lcd_write_str("10^(");
                                num0 = 13;
                                break;
                        case 18:                               
                                //lcd_write_str("sin(");
                                num0 = 15;
                                break;
                        case 19:
                                //lcd_write_str("cos(");
                                num0 = 16;
                                break;
                        case 20:
                                //lcd_write_str("tan(");
                                num0 = 17;
                                break;
       
                       
//                case 31:
//                        num0='1';
//                        break;
//                case 32:
//                        num0='2';
//                        break;
//                case 33:
//                        num0='3';
//                        break;                       
                       
                       
                }
               
        }
        else
        {
                switch(result)
                {
                        case 2:
                                //返回设置?
                                num0 = 23;
                                break;
                        case 3:
                                num0 = 'e';
                                break;
                        case 5:
                                //清屏,关闭背光
                                //lcd_clear();
                                //关闭背光?
                                num0 = 24;
                                break;
                        case 11:
                                num0 = 'i';
                                break;
                        case 12:
                                //lcd_write_str("^(1/2)");
                                num0 = 25;
                                break;
                        case 13:
                                //lcd_write_str("^(1/");
                                num0 = 26;
                                break;       
                        case 14:
                                //lcd_write_str("!");
                                num0 = '!';
                                break;
                        case 15:
                                //lcd_write_str("ln(");
                                num0 = 27;
                                break;
                        case 16:
                                //lcd_write_str("log(");
                                num0 = 28;
                                break;
                        case 18:
                                //lcd_write_str("asin(");
                                num0 = 29;
                                break;
                        case 19:
                                //lcd_write_str("acos(");
                                num0 = 30;
                                break;
                        case 20:
                                //lcd_write_str("atan(");
                                num0 = 31;
                                break;
                        case 31:
                                //lcd_write_str("x");
                                num0 = 'x';
                                break;
                        case 32:
                                //lcd_write_str("y");
                                num0 = 'y';
                                break;
                        case 33:
                                //lcd_write_str("z");
                                num0 = 'z';
                                break;
                        case 37:
                                num0 = 32;
                                break;
                }
        }
        if(result != 1)
                shift=0;
               
        if(shift == 0)
                bl_bright_change(byte_read(ADD_BRIGHT, 0));        //还原亮度设定
        else
                bl_bright_change(byte_read(ADD_SHIFTSIGN, 0));        //shift亮度设定       

        /////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////
        if(num0==24)                              //on和off
        {
                TR0=0;
                lcd_clear();
                lcd_write_pic(0, 0, welcome_pic, 128, 64);                /*波音会徽*/

                lcd_set_pos(1, 4);
                lcd_write_str("计算器");                /*计算器*/
       
                lcd_set_pos(2, 4);
                lcd_write_str("开心波音");                /*开心波音*/
       
                delay_2s();
                lcd_clear();
                lcd_clear_pic();                /*清屏*/
                bl_bright_change(0);        //关灯
                while(num0!=4)
                        num0 = keyboard_output();            
                        bl_bright_change(byte_read(ADD_BRIGHT, 0));        //还原亮度设定
               
                reset();                        //复位
        }
        /////////////////////////////////////////////////////////////////////////
        else if(num0==23)                              //set
        {
                byte_write(ADD_PROG_STATUS, SET ,0);                //写入设置
                reset();                        //复位
        }
                               
        ////////////////////////////////////////////////////////////////////////
        else if(num0==1)                              //mode
        {
                byte_write(ADD_PROG_STATUS, MODE ,0);                //写入菜单
                reset();                        //复位
        }
        /////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////
        return num0;
}

void about()
{
                TR0=0;
                lcd_clear();
                lcd_write_pic(0, 0, welcome_pic, 128, 64);                /*波音会徽*/

                lcd_set_pos(1, 4);
                lcd_write_str("计算器");                /*计算器*/
       
                lcd_set_pos(2, 4);
                lcd_write_str("开心波音");                /*开心波音*/
                while(keyboard_wake());
}


bandicam 2020-04-03 18-02-18-834.jpg (214.95 KB, 下载次数: 172)

bandicam 2020-04-03 18-02-18-834.jpg

评分

参与人数 1黑币 +5 收起 理由
rsx9583 + 5 很给力!

查看全部评分

回复

使用道具 举报

5#
ID:352458 发表于 2020-4-3 20:29 | 只看该作者
厉害了,这些不仅仅是一个传统意义上的科学计算器了。他是专业级别的计算器了。同学有一块专业级别可以解自控方程的要120大洋的。
回复

使用道具 举报

6#
ID:163090 发表于 2020-4-5 17:06 来自手机 | 只看该作者
liu5678 发表于 2020-4-3 20:29
厉害了,这些不仅仅是一个传统意义上的科学计算器了。他是专业级别的计算器了。同学有一块专业级别可以解自 ...

哥们有没兴趣做一个给大家分享一下呢
回复

使用道具 举报

7#
ID:91165 发表于 2020-4-7 08:06 | 只看该作者
51也做得这么强大。楼主厉害
回复

使用道具 举报

8#
ID:281879 发表于 2020-4-7 13:04 | 只看该作者
太牛了 学习到了
回复

使用道具 举报

9#
ID:458705 发表于 2020-4-8 15:35 | 只看该作者
一个字,牛!
两个字,特牛!
三个字,犇!
回复

使用道具 举报

10#
ID:87631 发表于 2020-4-12 14:16 | 只看该作者
这人真的是太牛了
回复

使用道具 举报

11#
ID:704585 发表于 2020-4-14 14:29 | 只看该作者
感谢楼主分享,学习一下。
回复

使用道具 举报

12#
ID:413383 发表于 2020-4-14 22:57 | 只看该作者
这人真的是太牛了,感觉太难了
回复

使用道具 举报

13#
ID:17204 发表于 2020-4-15 15:47 | 只看该作者
好难,只有吃透51才能做出来 ,向大佬看齐,努力学习中。。。
回复

使用道具 举报

14#
ID:701252 发表于 2020-10-17 09:35 | 只看该作者
啥也不说了!谢谢楼主分享!
回复

使用道具 举报

15#
ID:88256 发表于 2020-10-17 10:10 | 只看该作者
那个按键帽有地方买的吗?
回复

使用道具 举报

16#
ID:557411 发表于 2021-3-20 16:58 | 只看该作者
这个做得太强大了,楼主厉害
回复

使用道具 举报

17#
ID:894410 发表于 2021-3-20 19:05 | 只看该作者
注意到了键帽。。哈哈
回复

使用道具 举报

18#
ID:59830 发表于 2021-3-20 19:09 | 只看该作者
非常不错, 多级LCD显示菜单.
程序结构清晰. 值得大家学习. 谢谢!
回复

使用道具 举报

19#
ID:358564 发表于 2021-3-20 19:29 | 只看该作者
感谢楼主分享,学习一下。
回复

使用道具 举报

20#
ID:891775 发表于 2021-5-3 11:34 来自手机 | 只看该作者
想问一下,判断运算符优先级的代码应该怎么写呀
回复

使用道具 举报

21#
ID:838718 发表于 2021-7-21 20:11 | 只看该作者
膜拜一下,有机会挑战一下自己也搞一个。
回复

使用道具 举报

22#
ID:507641 发表于 2021-7-31 18:04 | 只看该作者
很好的学习分享实例51.对于按键的处理如果优化才是好产品
回复

使用道具 举报

23#
ID:507641 发表于 2021-7-31 18:17 | 只看该作者
功能强大。只是DS1302走时误差大了些。
回复

使用道具 举报

24#
ID:137590 发表于 2021-8-10 17:33 | 只看该作者
。因此在软件上需要做到语法识别、优先级顺序、括号嵌套等功能。 计算器拥有普通计算(表达式与函数识别、计算)、计算结果存储/回看、复数计算、矩阵运算、函数图形、解方程、统计、最小二乘法求回归直线、一阶常微分方程、单位,进制转换、定积分、求导等功能。 有节电模式,5分钟不输入自动关机,液晶屏亮度5级可调。
回复

使用道具 举报

25#
ID:137590 发表于 2021-8-10 17:34 | 只看该作者
一个字,牛!
两个字,特牛!
三个字,犇!
回复

使用道具 举报

26#
ID:137590 发表于 2021-10-9 21:12 | 只看该作者
好难,只有吃透51才能做出来 ,向大佬看齐,努力学习中。。。
回复

使用道具 举报

27#
ID:970860 发表于 2021-10-10 06:56 来自手机 | 只看该作者
都是大神
回复

使用道具 举报

28#
ID:648615 发表于 2021-10-10 23:13 | 只看该作者
真提我女朋友历害,很有用,谢谢楼主
回复

使用道具 举报

29#
ID:62246 发表于 2021-10-11 07:48 | 只看该作者
厉害,厉害,大佬级人物。
回复

使用道具 举报

30#
ID:86450 发表于 2021-10-11 08:13 | 只看该作者
按键帽,在哪里买的?
回复

使用道具 举报

31#
ID:304725 发表于 2021-10-24 23:16 | 只看该作者
有原理图吗
回复

使用道具 举报

32#
ID:974131 发表于 2021-11-6 17:55 | 只看该作者
论坛有你更精彩,谢谢!
回复

使用道具 举报

33#
ID:1003827 发表于 2022-1-29 20:33 | 只看该作者
大佬就是大牛啊
回复

使用道具 举报

34#
ID:430492 发表于 2022-1-30 10:17 | 只看该作者
这个设计真是太牛掰了!动手能力也很牛掰!
回复

使用道具 举报

35#
ID:507641 发表于 2022-3-18 10:40 | 只看该作者
单片机菜鸟丿 发表于 2020-4-5 17:06
哥们有没兴趣做一个给大家分享一下呢

大伽分享吧
回复

使用道具 举报

36#
ID:22218 发表于 2022-3-19 04:27 | 只看该作者
2732803160 发表于 2021-5-3 11:34
想问一下,判断运算符优先级的代码应该怎么写呀

这个我想可以按C语言内置的功能
回复

使用道具 举报

37#
ID:195496 发表于 2022-5-8 07:34 | 只看该作者
真是大神级的人物
回复

使用道具 举报

38#
ID:1042173 发表于 2022-9-2 00:36 | 只看该作者
楼主是乍作出实物来的???有电路图吗??光有程序也不行呀——起好多弯路的——
回复

使用道具 举报

39#
ID:74784 发表于 2022-9-3 13:34 | 只看该作者
曾经见到过高人用51单片机
做的彩色屏俄罗斯方块游戏。
回复

使用道具 举报

40#
ID:961114 发表于 2022-9-15 10:26 | 只看该作者
大神辛苦了,帮用  屠龙刀三-STC32G12K128核心功能实验板去改 或 开天斧三-STC8H8K64U核心功能实验板去改 !  STC将提供赞助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表