关于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';解决 无用评论 打赏 举报