欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    数码管之简单加减法计算器项目总结.docx

    • 资源ID:16297986       资源大小:399.77KB        全文页数:25页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数码管之简单加减法计算器项目总结.docx

    1、数码管之简单加减法计算器项目总结数码管之简单加减法计算器-项目总结总结人:徐冉1.项目使用到的硬件板载资源1)单片机STC89C52RC作为系统的处理器2)6位共阳极数码管作为计算器的数字显示器件3)LCD1602液晶显示一些提示信息如计算时的符号(正/负)4)4*4矩阵按键作为计算器的数字输入设备5)8个贴片LED小灯,用于走马灯效果作为修饰6)用到了单片机的内部资源定时器T02.项目的基本功能通过程序的烧录,将工程中的hex文件烧录到Kingst-51开发板上。现象如下:初始时1)最右边的数码管上显示0,其余数码管不显示。2)五个LED小灯像小火车一样循环跑着。3)LCD1602液晶的左上

    2、角显示Symbol:字样,用于显示符号。正数不显示,负数时将显示-。进行简单的加减法运算当用户使用按键输入相应的数字时,会在数码管上显示。数字值将进行进位累加方式实现。数字键(k13 k1 k3 k5 k7 k9 k11 0 9),k4加法功能键,k12减法功能键,k14 ESC清零键,k4和k12是双功能键,即k4既是加法键也是计算键,k12既是减法键也是计算键。达到一键两用的效果。注意:用户在进行加法计算时可以随意计算,但在计算减法时第一步需要进行一次加法,然后才能进行减法运算。当计算结果是负数时会在数码管上显示相应的数值的绝对值,而在LCD1602液晶上显示-。在计算期间LED小灯会一直

    3、循环流动。这个计算器可以实现连加连减,计算十分方便,但没有处理小数。当计算完成时,或输入错误时可按k14进行清零操作。3.项目的创新点首先该项目使用了LED的跑马灯效果进行了装饰,为了程序的简单且直观性程序使用了LCD1602进行运算时符号的显示。程序在计算上使用了一键两用的功能设计,这样设计方便快捷。4.项目的设计流程NY5.项目的不足之处本项目只考虑了简单的加法和减法运算,且只是整数运算,而未能考虑到小数运算。乘除法亦没有考虑到。在进行减法运算时都必须进行一次加法运算才可以运算正常。6.项目需要改进的地方可对本项目进行全面的扩展,使其既能进行加减乘除运算,又能处理小数和负数的功能。符号显示

    4、直接使用数码管显示即可。将计算功能键单独进行处理,做成真正的计算器。7.项目的硬件电路连接图8.项目的源代码/* * * file mytype.h * author qlp * date 2014年6月18日 * version V1.2.3 * brief 自定义类型头文件 * */#ifndef _MYTYPE_H_H#define _MYTYPE_H_Htypedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;#endif /_MYTYPE_H_H/* * * file Lc

    5、d1602.c * author qlp * date 2014年6月18日 * version V1.2.3 * brief LCD1602液晶底层驱动 * */ #include /LCD1602_IOsbit LCD1602_RS = P10;sbit LCD1602_RW = P11;sbit LCD1602_EN = P15;/74HC138sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;bit tmpADDR0 = 0;bit tmpADDR1 = 0;/地址选

    6、择缓冲区#define LCD1602_DB P0/*暂停LED扫描*/void LEDRefreshPause() ENLED = 1;/关闭LED使能 tmpADDR0 = ADDR0;/因为LED和LCD同时使用了P10和P11引脚,所以要暂时保存ADDR0和ADDR1的数据即LED扫描地址值 tmpADDR1 = ADDR1; P0 = 0xFF; /数码管+LED小灯去抖动/*继续扫描LED*/void ContinueRefreshLED() ADDR0 = tmpADDR0; ADDR1 = tmpADDR1;/恢复原来LED扫描的地址选择值 ENLED = 0;/选择LED P

    7、0 = 0xFF; /数码管和LED去抖/* 液晶忙碌等待 */void LCD1602Wait() unsigned char sta; LCD1602_DB = 0xFF;/总线拉高,检测液晶状态字 LCD1602_RS = 0; LCD1602_RW = 1; do LCD1602_EN = 1; sta = LCD1602_DB; LCD1602_EN = 0;/避免液晶输出数据 while (sta & 0x80);/状态字最高位STA7 = 0空闲,1忙碌/* 液晶写命令 */void LCD1602WriteCmd(unsigned char cmd) LEDRefreshPau

    8、se(); /暂停LED数码管刷新 LCD1602Wait(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_EN = 0; LCD1602_DB = cmd; LCD1602_EN = 1; LCD1602_EN = 0; ContinueRefreshLED();/继续LED数码管刷新/* 液晶写数据 */void LCD1602WriteData(unsigned char dat) LEDRefreshPause(); /暂停LED数码管刷新 LCD1602Wait(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1602

    9、_EN = 0; LCD1602_DB = dat; LCD1602_EN = 1; LCD1602_EN = 0; ContinueRefreshLED();/继续LED数码管刷新/* 液晶初始化 */void InitalLCD1602() LCD1602WriteCmd(0x38); LCD1602WriteCmd(0x0C); LCD1602WriteCmd(0x06); LCD1602WriteCmd(0x01);/清屏/* 写数据到液晶上,字符串str,坐标(x, y),地址addr */void LcdShowStr(unsigned char x, unsigned char

    10、y, unsigned char * str) unsigned char addr; if (y = 0) addr = 0x00 + x; else addr = 0x40 + x; LCD1602WriteCmd(addr | 0x80); while (*str != 0) LCD1602WriteData(*str+); /* * * file main.c * author qlp * date 2014年6月18日 * version V1.2.3 * brief 简易加减法 可实现连加连减 * note 单片机STC89C52RC MCU 晶振 11.0592MHZ * */#

    11、include #include #include mytype.h/74HC138sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;/时钟晶振和系统时钟#define XTAL 11059200UL /11.0592MHZ#define SYS_XTAL XTAL/12 /系统时钟,为晶振的12分频/按键输入输出sbit KEY_IN_1 = P24;sbit KEY_IN_2 = P25;sbit KEY_IN_3 = P26;sbit KEY_IN_4 = P27;sb

    12、it KEY_OUT_1 = P23;sbit KEY_OUT_2 = P22;sbit KEY_OUT_3 = P21;sbit KEY_OUT_4 = P20;bit flag = 0;/0 : add 1 : sub/按键状态枚举typedef enum KEY_DOWN = 0, KEY_UP = 1 ekey;/数据输入口#define DISP_DB P0static volatile uint8 keySta44 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; /按键当前值/*矩阵按键到PC标准键盘键码映射表*/uint8 c

    13、ode keyCodeMap44 = 0x01, 0x02, 0x03, 0x0A, /数字键1-3 向上键UP 0x04, 0x05, 0x06, 0x0D, /数字键4-6 向左键Left 0x07, 0x08, 0x09, 0x0C, /数字键7-9 向下键DOWN 0x00, 0x0E, 0x0F, 0x0B /数字键0 ESC键 回车键 向右键Right ; uint8 code LedTable = 0xC0, /0 0xF9, /1 0xA4, /2 0xB0, /3 0x99, /4 0x92, /5 0x82, /6 0xF8, /7 0x80, /8 0x90, /9 0x

    14、BF /- ;/* 定义跑马灯数组 */unsigned char code LedTable2 = 0xE0, / 11100000 0xC1, / 11000001 0x83, / 10000011 0x07, / 00000111 0x0E, / 00001110 0x1C, / 00011100 0x38, / 00111000 0x70 / 11100000 ;uint8 LedBuff7 = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF;/数码管显示缓冲区 uint8 thr0, tlr0; /定义用于加法计算的变量signed long res

    15、ult = 0;/结果signed long addNum = 0;/加数void KeyHandle();void KeyAction(uint8 keycode);void KeyScan(); void showNum(uint32 num);void ConfigHC138();void ConfigTimer0(uint16 xms);extern void InitalLCD1602();extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char * str);void main() InitalLC

    16、D1602(); ConfigHC138(); ConfigTimer0(1); LcdShowStr(0, 0, Symbol: );/符号 while (1) KeyHandle(); /* * brief : Led小灯扫描 * param : 无 * retval : 无 */void LED_Scan( void ) static unsigned char j = 0; P0 = 0xFF; /* 消隐 */ LedBuff6 = LedTable2j+; /* 送入要求的数据到LED显示数据口 */ j &= 0x07; /* 到8归零 */* * brief 定时器T0配置 *

    17、 param xms * retval 无 */void ConfigHC138() ADDR3 = 1; ENLED = 0; LedBuff0 = LedTable0;/* * brief 定时器T0配置 * param xms * retval 无 */void ConfigTimer0(uint16 xms) uint16 tmp; tmp = 65536-xms*SYS_XTAL/1000; thr0 = (uint8)(tmp 8); tlr0 = (uint8)(tmp & 0x00FF); TMOD &= 0xF0; TMOD |= 0x01; TH0 = thr0; TL0

    18、= tlr0; TR0 = 1; EA = 1; ET0 = 1;/* * brief 按键驱动函数 (根据按下的按键的键码执行相应的动作) * param 无 * retval 无 */void KeyHandle() static uint8 backup44 = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ; /按键备份值 uint8 i = 0, j = 0; for (i = 0; i 4; i+) for (j = 0; j = 0) LcdShowStr(9, 0, );/清除 else if (keycode = 0x01) &

    19、 (keycode = 0) showNum(result); else result = -result; LcdShowStr(9, 0, -); showNum(result); result = 0; else if (keycode = 0x0E) /ESC键 result = 0; addNum = 0;/清零 showNum(addNum); LcdShowStr(9, 0, );/清除 else if (keycode = 0x0F) /回车键 addNum = 0; showNum(result); /* * brief 数据分解,只显示有效位 * param 待分解的数据

    20、uint32 num * retval 无 */void showNum(uint32 num) uint8 buff6;/中间缓冲区 signed char i = 0; for (i = 0; i = 1; i-) /从最高位开始检测无效位,遇0就赋值0xFF if (buffi = 0) LedBuffi = 0xFF;/不显示 else break;/遇到第一个有效位就退出 /将有效位数字存入缓冲区 for (; i = 0; i-) LedBuffi = LedTablebuffi; /* * brief 按键检测 * param 无 * retval 无 */void KeySca

    21、n() static uint8 keybuff44 = 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ; /按键检测值缓冲区 static uint8 keyout = 0;/行索引 uint8 i = 0; keybuffkeyout0 = (keybuffkeyout0 1) | KEY_IN_1;/检测第keyout行的第0个按键的值 keybuffkeyout1 = (keybuffkeyout1 1) | KEY_IN_2; keybuff

    22、keyout2 = (keybuffkeyout2 1) | KEY_IN_3; keybuffkeyout3 = (keybuffkeyout3 1) | KEY_IN_4; /更新消抖后的按键值 for (i = 0; i = 4) keyout = 0; switch (keyout) case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3

    23、= 1; KEY_OUT_4 = 0; break; default : break; /只有一行被选中 /* * brief LED数码管刷新 * param 无 * retval 无 */void refresh() static uint8 j = 0; DISP_DB = 0xFF;/消隐 switch (j) case 0: ADDR2 = 0; ADDR1 = 0; ADDR0 = 0; break; case 1: ADDR2 = 0; ADDR1 = 0; ADDR0 = 1; break; case 2: ADDR2 = 0; ADDR1 = 1; ADDR0 = 0; break; case 3: ADDR2 = 0; AD


    注意事项

    本文(数码管之简单加减法计算器项目总结.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开