(完整word版)单片机简易计算器课程设计.doc

上传人:夏** 文档编号:557975285 上传时间:2024-01-02 格式:DOC 页数:20 大小:117.51KB
返回 下载 相关 举报
(完整word版)单片机简易计算器课程设计.doc_第1页
第1页 / 共20页
(完整word版)单片机简易计算器课程设计.doc_第2页
第2页 / 共20页
(完整word版)单片机简易计算器课程设计.doc_第3页
第3页 / 共20页
(完整word版)单片机简易计算器课程设计.doc_第4页
第4页 / 共20页
(完整word版)单片机简易计算器课程设计.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《(完整word版)单片机简易计算器课程设计.doc》由会员分享,可在线阅读,更多相关《(完整word版)单片机简易计算器课程设计.doc(20页珍藏版)》请在金锄头文库上搜索。

1、课 程 设 计题 目 名 称 简易计算器设计 课 程 名 称 单片机原理及应用 学 生 姓 名 班 级 学 号 2018年 6 月20日6目录一 设计目的2二 总体设计及功能介绍2三 硬件仿真图3四 主程序流程图4五 程序源代码4六 课程设计体会17一 设计目的本设计是基于51系列单片机来进行的简单数字计算器设计,可以完成计算器的键盘输入,进行加、减、乘、除六位整数数范围内的基本四则运算,并在LED上显示相应的结果。软件方面使用C语言编程,并用PROTUES仿真。二 总体设计及功能介绍 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机,实现对计算器的设计。具体设计及功能如下: 由于

2、要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LED显示数据和结果; 另外键盘包括数字键(09)、符号键(+、-、)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算键盘; 执行过程:开机显示零,等待键入数值,当键入数字,通过LED显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。三 硬件仿真图 硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。四 主程序流程图 程序的主要

3、思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图五 程序源代码#include #include #include /* isdigit()函数 */#include /* atoi()函数 */#define uchar unsigned char#define uint unsigned intuchar operand19, operand29; /* 操作数 */uchar operator; /* 操作符 */void delay(uint);uchar k

4、eyscan();void disp(void);void buf(uint value);uint compute(uint va1,uint va2,uchar optor);uchar code table = 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xff; /* 字符码表 */uchar dbuf8 = 10,10,10,10,10,10,10,10; /* 显示缓存 */* 延时函数 */ void delay(uint z)uint x,y;for(x=z;x0;x-) for(y=110;y0;y-);/* 键盘扫

5、描程序 将按键转化为字符并作为输出 $,#分别表示清零键和没有键按下 */uchar keyscan() uchar skey; /* 按键值标记变量 */* 扫描键盘第1行 */ P1 = 0xfe; while(P1 & 0xf0) != 0xf0) /* 有按键按下 */ delay(3); /* 去抖动延时 */ while(P1 & 0xf0) != 0xf0) /* 仍有键按下 */ switch(P1) /* 识别按键并赋值 */ case 0xee: skey = 7; break; case 0xde: skey = 8; break; case 0xbe: skey = 9

6、; break; case 0x7e: skey = /; break; default: skey = #; while(P1 & 0xf0) != 0xf0) /* 等待按键松开 */ ; /* 扫描键盘第2行 */ P1 = 0xfd; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0) switch(P1) case 0xed: skey = 4; break; case 0xdd: skey = 5; break; case 0xbd: skey = 6; break; case 0x7d: skey = *;

7、break; default: skey = #; while(P1 & 0xf0) != 0xf0) ; /* 扫描键盘第3行 */ P1 = 0xfb; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0) switch(P1) case 0xeb: skey = 1; break; case 0xdb: skey = 2; break; case 0xbb: skey = 3; break; case 0x7b: skey = -; break; default: skey = #; while(P1 & 0xf0)

8、!= 0xf0) ; /* 扫描键盘第4行 */ P1 = 0xf7; while(P1 & 0xf0) != 0xf0) delay(3); while(P1 & 0xf0) != 0xf0) switch(P1) case 0xe7: skey = $; break; case 0xd7: skey = 0; break; case 0xb7: skey = =; break; case 0x77: skey = +; break; default: skey = #; while(P1 & 0xf0) != 0xf0) ; return skey;void main() uint val

9、ue1, value2, value; /* 数值1,数值2,结果 */ uchar ckey, cut1 = 0, cut2 = 0; /* ckey键盘输入字符 */ uchar operator; /* 运算符 */ uchar i, bool = 0;init: /* goto语句定位标签 */ buf(0); /* 初始化 */ disp(); value = 0; cut1 = cut2 = 0; bool = 0; for(i = 0;i 9;i+) operand1i = 0; operand2i = 0; /* 初始化 */ while(1) ckey = keyscan(); /* 读取键盘 */ if(ckey != #)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 项目/工程管理

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号