基于单片机简易计算器的设计正文内容摘要:

键盘输入检测模块 LCD显示模块; 算术运算模块 错误处理及提示模块。 4 总体程序框图 系统总体 框图 设计 单片机课程设计 12 开始 初始化参数 初始化 LCD 显示 有键输入。 读取键码 LCD 显示 数字键 清零键 功能键 状态清零 输入数值 数值送显示缓冲 Y N 等待数值输入 结果送显示缓冲 根据上 次功能键和输入的数据计算结果 本次功能键。 等待数值输入 结果送显示缓冲 等待数值输入 结果送显示缓冲 单片机课程设计 13 算数运算程序 设计 开始 运算符是。 加 乘 减 除 除数为 0。 运算结果溢 出。 错误信息送显示缓冲 数值送显示缓冲 Y Y N N 单片机课程设计 14 程序源代 码 ( C 语言 ) include include include //变量声明 static data LONG lvalue。 static data LONG rvalue。 static data CHAR currtoken。 static data CHAR lasttoken。 static data CHAR lastpress。 static xdata CHAR outputbuffer[MAX_DISPLAY_CHAR]。 VOID main (VOID) //初始化变量并且初始化 LCD 驱动 . { lvalue = 0。 rvalue = 0。 currtoken = 39。 =39。 lasttoken = 39。 039。 initialise()。 // 初始化 LCD calc_output(OK)。 calc_evaluate()。 } VOID calc_evaluate() { CHAR data key。 INT data i。 CHAR xdata number[MAX_DISPLAY_CHAR]。 CHAR xdata *bufferptr。 // 使用前清缓冲器 . for (i = 0。 i = MAX_DISPLAY_CHAR。 i++) { number[i] = 39。 39。 } bufferptr = number。 for (。 ) { key = calc_getkey()。 if (calc_testkey(key)) //键盘检测数字写入缓存然后输出到屏幕 LCD. // 限制结果数字的范围或结果为负数 . { if (bufferptr != amp。 number[MAX_DISPLAY_CHAR 2]) { *bufferptr = key。 calc_display(number)。 bufferptr++。 单片机课程设计 15 } } else // 键盘运算符传送到操作函数 . // 如果刚开始或者刚取消则指到 lvalue // 否则指到 rvalue. { //发送到 value. if (lasttoken == 39。 039。 ) { lvalue = calc_asciidec (number)。 } else { rvalue = calc_asciidec (number)。 } //清数字缓存器 . bufferptr = number。 for (i = 0。 i = MAX_DISPLAY_CHAR。 i++) { number[i] = 39。 39。 } //继续运行处理器 . currtoken = key。 if (currtoken == 39。 C39。 ) { calc_opfunctions(currtoken)。 } else { calc_opfunctions(lasttoken)。 } //清除输出缓存为了下个运行程序 . for (i = 0。 i = MAX_DISPLAY_CHAR。 i++) { outputbuffer[i] = 39。 39。 } bufferptr = number。 // 暂时运行等于程序 . if (currtoken != 0x3D) lasttoken = currtoken。 } lastpress = key。 } } VOID calc_opfunctions (CHAR token) // Lvalue 保存着结果 检测结果运行 . { CHAR data result。 switch(token) // 加 . { case 39。 +39。 : if ((currtoken == 39。 =39。 ) || ((lastpress = 0x30) amp。 amp。 单片机课程设计 16 (lastpress =0x39))) { lvalue += rvalue。 result = calc_chkerror(lvalue)。 } else { result = SLEEP。 } break。 // 减 . case 39。 39。 : if ((currtoken == 39。 =39。 ) || ((lastpress = 0x30) amp。 amp。 (lastpress =0x39))) { lvalue = rvalue。 result = calc_chkerror(lvalue)。 } else { result = SLEEP。 } break。 // 乘 . case 39。 *39。 : if ((currtoken == 39。 =39。 ) || ((lastpress = 0x30) amp。 amp。 (lastpress =0x39))) { lvalue *= rvalue。 result = calc_chkerror(lvalue)。 } else { result = SLEEP。 } break。 // 除 . case 39。 /39。 : if ((currtoken == 39。 =39。 ) || ((lastpress = 0x30) amp。 amp。 (lastpress =0x39))) { if (rvalue) { lvalue /= rvalue。 result = calc_chkerror(lvalue)。 } else { result = ERROR。 } } else { result = SLEEP。 } break。 // 清 . case 39。 C39。 : lvalue = 0。 rvalue = 0。 currtoken = 39。 039。 lasttoken = 39。 039。 result = OK。 break。 default : result = SLEEP。 } 单片机课程设计 17 calc_output(result)。 } /************************************************************************ ***** 实用路径 ***** ****。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。