qq_56989412 2021-08-02 09:55 采纳率: 0%
浏览 69

关于51单片机的计算器程序设计

关于51单片机IAP58S4的计算器程序设计,我调试的程序一直有错。可以发一下有关于这个项目的程序例子吗?

  • 写回答

1条回答 默认 最新

  • qq_24953415 2023-02-12 07:50
    关注
    
    # include <reg52.h>
    # include <IAP58S4.h>
    
    # define SegData P1 //显示单元段码缓冲寄存器
    # define Control P2 //控制缓冲寄存器
    
    unsigned int Flow;  //用于计算的变量
    
    //计算器程序
    void Calcu()
    {
        unsigned char flag; //标志位
        unsigned char key;  //按键判断
    
        begin:flag = 0;
        Flow = 0;
        while(1)
        {
            key = Key_Scan();
            switch(key)
            {
                case '+': //用户按下“+”按键
                    {
                        if(flag == 0)
                        {
                            flag = 1;
                        }
                        else if (flag == 1)
                        {
                            while(1)
                            {
                                key = Key_Scan();
                                if('=' == key)
                                {
                                    //进行加法
                                    Flow += Flow;
                                     ShowDot_Data(Flow); //显示结果
                                     //清零重新计算
                                     Flow = 0;
                                     goto begin;
                                }
                                else if('+' == key)
                                {
                                    //进行加法
                                    Flow += Flow;
                                    goto filp;
                                }
                                else if('-' == key)
                                {
                                    //进行减法
                                    Flow -= Flow;
                                    goto filp;
                                }
                                else
                                {
                                    //输入数据
                                    Flow = 10 * Flow + Digit_Scan(key);
                                    ShowDot_Data(Flow); //显示结果
                                }
                            }
                        
                            filp:ShowDot_Data(Flow);    //显示结果
                            Flow = 0;
                            goto begin;
                        }
                        break;
                    }
        
                case '-': //用户按下“-”按键
                    {
                        if(flag == 0)
                        {
                            flag = 2;
                        }
                        else if(flag == 2)
                        {
                            while(1)
                            {
                                key = Key_Scan();
                                if('=' == key)
                                {
                                    //进行减法
                                    Flow -= Flow;
                                     ShowDot_Data(Flow); //显示结果
                                     //清零重新计算
                                     Flow = 0;
                                     goto begin;
                                }
                                else if('+' == key)
                                {
                                    //进行加法
                                    Flow += Flow;
                                    goto filp;
                                }
                                else if('-' == key)
                                {
                                    //进行减法
                                    Flow -= Flow;
                                    goto filp;
                                }
                                else
                                {
                                    //输入数据
                                    Flow = 10 * Flow + Digit_Scan(key);
                                    ShowDot_Data(Flow); //显示结果
                                }
                            }
                        
                            filp:ShowDot_Data(Flow);    //显示结果
                            Flow = 0;
                            goto begin;
                        }
                        break;
                    }
                case '=':
                    {
                        //显示结果并使按键失效
                        ShowDot_Data(Flow); 
                        goto begin;
                        break;
                    }
                default:
                    {
                        //不为符号则进行数字输入累加
                        Flow = 10 * Flow + Digit_Scan(key);
                        ShowDot_Data(Flow); //显示结果
                        break;
                    }
            }
        }
    }
    
    void main()
    {
        Calcu();
    }
        
    //按键扫描程序
    unsigned char Key_Scan()
    {
        while(1)
        {
            if(P0 == 0xF0) continue; // 当按键没有按下时,P0等于0xF0
            
            delay(2); // 延时2毫秒,软件延时函数
            if(P0 == 0xF0) break;
            P2 = 0x0F; // 先取低四位 high-->low
                
            switch(P0)
            {
                case 0xF6:return '+'; // 按键的键值,自定义
                case 0xEE:return '-'; // 按键的键值,自定义
                case 0xDE:return '*'; // 按键的键值,自定义
                case 0xBE:return '/'; // 按键的键值,自定义
                case 0x7E:return '='; // 按键的键值,自定义
                case 0xF7:return '1';
                case 0xEF:return '2';
                
    
    评论

报告相同问题?

问题事件

  • 创建了问题 8月2日