久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 牛人制作的單片機科學型計算器,功能太強大 大家一起欣賞 [打印本頁]

作者: 單片機菜鳥丿    時間: 2020-4-3 17:46
標題: 牛人制作的單片機科學型計算器,功能太強大 大家一起欣賞
以下是計算器功能演示視頻地址:
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, 下載次數: 345)

作者: 單片機菜鳥丿    時間: 2020-4-3 17:48
計算器主控芯片為STC12C5A60S2,顯示器為12864液晶。額外的外設有EEPROM、DS1302、矩陣鍵盤,為科學計算器提供存儲、時鐘、輸入功能。 在等號被按下前,允許輸入完整的表達式。因此在軟件上需要做到語法識別、優先級順序、括號嵌套等功能。 計算器擁有普通計算(表達式與函數識別、計算)、計算結果存儲/回看、復數計算、矩陣運算、函數圖形、解方程、統計、最小二乘法求回歸直線、一階常微分方程、單位,進制轉換、定積分、求導等功能。 有節電模式,5分鐘不輸入自動關機,液晶屏亮度5級可調。
作者: 單片機菜鳥丿    時間: 2020-4-3 17:48
計算器主控芯片為STC12C5A60S2,顯示器為12864液晶。額外的外設有EEPROM、DS1302、矩陣鍵盤,為科學計算器提供存儲、時鐘、輸入功能。
在等號被按下前,允許輸入完整的表達式。因此在軟件上需要做到語法識別、優先級順序、括號嵌套等功能。
計算器擁有普通計算(表達式與函數識別、計算)、計算結果存儲/回看、復數計算、矩陣運算、函數圖形、解方程、統計、最小二乘法求回歸直線、一階常微分方程、單位,進制轉換、定積分、求導等功能。
有節電模式,5分鐘不輸入自動關機,液晶屏亮度5級可調。
作者: 單片機菜鳥丿    時間: 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, 下載次數: 195)

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

作者: liu5678    時間: 2020-4-3 20:29
厲害了,這些不僅僅是一個傳統意義上的科學計算器了。他是專業級別的計算器了。同學有一塊專業級別可以解自控方程的要120大洋的。
作者: 單片機菜鳥丿    時間: 2020-4-5 17:06
liu5678 發表于 2020-4-3 20:29
厲害了,這些不僅僅是一個傳統意義上的科學計算器了。他是專業級別的計算器了。同學有一塊專業級別可以解自 ...

哥們有沒興趣做一個給大家分享一下呢
作者: HWL0541    時間: 2020-4-7 08:06
51也做得這么強大。樓主厲害
作者: yuche2018    時間: 2020-4-7 13:04
太牛了 學習到了
作者: 磨盤街    時間: 2020-4-8 15:35
一個字,牛!
兩個字,特牛!
三個字,犇!
作者: csgtli    時間: 2020-4-12 14:16
這人真的是太牛了
作者: zxopenljx    時間: 2020-4-14 14:29
感謝樓主分享,學習一下。
作者: hulilanyua    時間: 2020-4-14 22:57
這人真的是太牛了,感覺太難了
作者: szkalwa    時間: 2020-4-15 15:47
好難,只有吃透51才能做出來 ,向大佬看齊,努力學習中。。。
作者: 13473156912    時間: 2020-10-17 09:35
啥也不說了!謝謝樓主分享!
作者: hhdsdy    時間: 2020-10-17 10:10
那個按鍵帽有地方買的嗎?
作者: xyzdh    時間: 2021-3-20 16:58
這個做得太強大了,樓主厲害
作者: tanggula    時間: 2021-3-20 19:05
注意到了鍵帽。。哈哈
作者: yygdzjs    時間: 2021-3-20 19:09
非常不錯, 多級LCD顯示菜單.
程序結構清晰. 值得大家學習. 謝謝!
作者: barret.zhang    時間: 2021-3-20 19:29
感謝樓主分享,學習一下。
作者: 2732803160    時間: 2021-5-3 11:34
想問一下,判斷運算符優先級的代碼應該怎么寫呀
作者: sanshui129    時間: 2021-7-21 20:11
膜拜一下,有機會挑戰一下自己也搞一個。
作者: SURUBU1976    時間: 2021-7-31 18:04
很好的學習分享實例51.對于按鍵的處理如果優化才是好產品
作者: SURUBU1976    時間: 2021-7-31 18:17
功能強大。只是DS1302走時誤差大了些。
作者: wxmlx    時間: 2021-8-10 17:33
。因此在軟件上需要做到語法識別、優先級順序、括號嵌套等功能。 計算器擁有普通計算(表達式與函數識別、計算)、計算結果存儲/回看、復數計算、矩陣運算、函數圖形、解方程、統計、最小二乘法求回歸直線、一階常微分方程、單位,進制轉換、定積分、求導等功能。 有節電模式,5分鐘不輸入自動關機,液晶屏亮度5級可調。
作者: wxmlx    時間: 2021-8-10 17:34
一個字,牛!
兩個字,特牛!
三個字,犇!
作者: wxmlx    時間: 2021-10-9 21:12
好難,只有吃透51才能做出來 ,向大佬看齊,努力學習中。。。
作者: 18020055    時間: 2021-10-10 06:56
都是大神
作者: 伍兆磊    時間: 2021-10-10 23:13
真提我女朋友歷害,很有用,謝謝樓主
作者: bbk2000    時間: 2021-10-11 07:48
厲害,厲害,大佬級人物。
作者: jjwangxu2008    時間: 2021-10-11 08:13
按鍵帽,在哪里買的?
作者: hy1589766    時間: 2021-10-24 23:16
有原理圖嗎
作者: xywf    時間: 2021-11-6 17:55
論壇有你更精彩,謝謝!
作者: u呼叫呼叫    時間: 2022-1-29 20:33
大佬就是大牛啊
作者: cooleaf    時間: 2022-1-30 10:17
這個設計真是太牛掰了!動手能力也很牛掰!
作者: SURUBU1976    時間: 2022-3-18 10:40
單片機菜鳥丿 發表于 2020-4-5 17:06
哥們有沒興趣做一個給大家分享一下呢

大伽分享吧
作者: chinomango    時間: 2022-3-19 04:27
2732803160 發表于 2021-5-3 11:34
想問一下,判斷運算符優先級的代碼應該怎么寫呀

這個我想可以按C語言內置的功能
作者: 大漠落日    時間: 2022-5-8 07:34
真是大神級的人物
作者: QQQQ987    時間: 2022-9-2 00:36
樓主是乍作出實物來的???有電路圖嗎??光有程序也不行呀——起好多彎路的——
作者: lxa0    時間: 2022-9-3 13:34
曾經見到過高人用51單片機
做的彩色屏俄羅斯方塊游戲。
作者: STC莊偉    時間: 2022-9-15 10:26
大神辛苦了,幫用  屠龍刀三-STC32G12K128核心功能實驗板去改 或 開天斧三-STC8H8K64U核心功能實驗板去改 !  STC將提供贊助

作者: HSCCSH    時間: 2022-10-11 17:57

真是大神級的人物
作者: 神話A小王子    時間: 2022-10-11 19:07
HSCCSH 發表于 2022-10-11 17:57
真是大神級的人物

最新版stc32G版本的,帶OLED12864實現的已經接近尾聲了。甚至可以支持usb-cdc虛擬串口,用虛擬的OLED和鍵盤實現哦,可以多多關注哈哈
作者: kz0018    時間: 2022-10-12 23:18
用程序反推電路圖太難以成功,無電路圖即便程序編的再好,也不好仿制。
作者: 神話A小王子    時間: 2022-10-13 10:02
kz0018 發表于 2022-10-12 23:18
用程序反推電路圖太難以成功,無電路圖即便程序編的再好,也不好仿制。

這個還是很簡單的,DS1302的模塊一共三根線,AD24C的模塊 兩根線這些程序都能直接找到連接IO,然后按鍵5+8個IO程序也寫的很明白,12864也就那么幾根,51的MCU有程序的話,反推引腳是最方便的,畢竟我已經仿出來了,唯一可惜的就是原作里bug不少
作者: Longan.Wang    時間: 2022-11-8 11:12
確實牛叉!
一個字,牛!
兩個字,特牛!
三個字,犇!
作者: yechunlei    時間: 2022-11-21 08:52
神話A小王子 發表于 2022-10-13 10:02
這個還是很簡單的,DS1302的模塊一共三根線,AD24C的模塊 兩根線這些程序都能直接找到連接IO,然后按鍵5+ ...

你有沒有做出來了
作者: wj200903    時間: 2023-11-8 16:32
你好,大俠,這個計算器能不能再加一個TXT文本閱讀的功能

作者: joyb    時間: 2023-11-9 17:50
正在學習ks0108繪圖功能,這個程序太牛
作者: hjh800512    時間: 2023-11-9 19:00
厲害,膜拜大佬,幫頂。
作者: hjh800512    時間: 2023-11-10 11:22
其實,這種數學類的“計算機”難度要比平常的項目開發難度大,所以,我就又來了,再來膜拜下樓主。
作者: eseeker    時間: 2023-11-15 21:34
這個確實牛逼了,太復雜了




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 黄色网毛片 | 国产高清在线 | 亚洲精品欧美 | 色网站在线免费观看 | 在线欧美亚洲 | 一区二区福利视频 | 日本三级日产三级国产三级 | 国产精品视频偷伦精品视频 | 日韩一区二区三区在线 | 人人爽人人爽 | heyzo在线 | 日韩福利电影 | 黑人精品欧美一区二区蜜桃 | 狠狠干影院 | 日韩一区二区三区四区五区 | 国产精品久久国产精品 | 久久久久久国产 | 天堂色| 亚洲成人中文字幕 | 日韩一区二区在线视频 | 久久精品久久久久久 | 97超碰在线免费 | 国产精品久久久久久久久久99 | 国产福利在线 | 亚洲精品美女在线观看 | 久久久日韩精品一区二区三区 | 99看片网| 黄色片在线 | 自拍偷拍第一页 | 99精品网| a级大片免费观看 | 久久精品国产一区 | 亚洲精品9999 | 久久久www成人免费无遮挡大片 | 亚洲一区二区三区在线免费观看 | 日韩中文在线观看 | 中文字幕久久久 | 欧美日韩在线国产 | 久久草在线视频 | 色天天综合 | 中文字幕在线观看一区二区 |