基于单片机简易计算器的设计正文内容摘要:
键盘输入检测模块 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)。 } /************************************************************************ ***** 实用路径 ***** ****。基于单片机简易计算器的设计正文
相关推荐
) 基本输入输出端口 3,输出端:至显示模块 74164 数据线。 14) 基本输入输出端口 4,输出端:显示模块 74164 时钟线。 15) 基 本输入输出端口 5,输出端:显示模块的数码管片选线。 3. 元器件选用 1) PIC16F818 简介: 基于上述需求与大量筛选,本例中使用 PIC16F818单片机作为核心的控制元件。 PIC16F818 是一片带 A/D
CSG4110012020 5 对 WHS 质量控制点,监理检查采用现场复核方式,因特殊原因不能及时到场的,施工项目部应提供录像、数码照片和施工记录作为检查复核依据。 公司鼓励各单位对 WHS 质量控制点拍摄数码照片 并存档。 工程质量 WHS 控制点 工程 WHS 控制点专业分布 本标准共设置质量控制点 312 个,包括 W 点 166 个、 H 点 90 个、 S点 56 个。 其中:
表 H009 41 阀外水冷系统设备安装 W045 表 W045 42 阀内水冷系统 设备安装 W046 表 W046 43 直流接地极馈电棒 H010 表 H010 土建 工程质量控制点 序号 质量控制点 控制方式及编号 WHS 表格编号 1 定位放线 W047 表 W047 2 土方开挖 H011 表 H011 表 H0112 3 土方回填 H012 表 H012
另外一般在三端稳压器的输入输出端接一个二极管,用来防止输入端短路时 ,输出端存储的电荷通过稳压器 ,而损坏器件。 图 23 电源电路原理图 显示器 DRIVER 根据需要显示当前时间、用户设置的闹钟时间 或用户通过键盘输入的新时间,同时判断当前时间是否已到 了闹钟时间,实际上是一个多路选择比较器。 多路选择器是数据选择器的别称。 在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做
池组中各单体电池的最高充电电压也有差别,因此采用这种方法不可能非常准确地判断电池己足充电。 电压负增量 (- △ V):由于电池电压的负增量与电池组的绝对电压无关,而且不受环境温度和充电速率等因素影响,因此可以比较准确地判断电池己充足电。 这种控制方法的缺点是: ① 从多次快速充电实验中发现,电池充足电之前,也有可能出现局部电压下降的情况,使电池在未充足电时,由于检测到了负增量而停止快充; ②
: 开始 检测端口值 判断端口值 执行左拐函数 执行右拐函数 左拐 右拐 : 第二版程序,我们采用芯片 L298N,实现了小车的后退和变速功能。 小车的变速有一个独立按键来控制。 另外,我们又加了一个光电开关来检测小车正前方的情况。 如果前方有障碍物的话,小车会避开障碍物后再沿壁行驶。 T0溢出中断,检测端口反馈值是多少 , 前方是否有障碍物 , 每次左转或右转都记录一次,如果连续左转或右转超过