ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:16.23KB ,
资源ID:7405973      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7405973.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(51实现计算器.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

51实现计算器.docx

1、51实现计算器/* * Easy calculator * * K4:+ K8:- K12:* K16:/ K14:Clear K15:= * * Made by Kingst-刚哥 */#include typedef unsigned char uint8;typedef unsigned int uint16;typedef unsigned long uint32;typedef char int8;typedef int int16;typedef long int32;sbit KeyIn1 = P24;sbit KeyIn2 = P25;sbit KeyIn3 = P26;sbi

2、t KeyIn4 = P27;sbit KeyOut1 = P23;sbit KeyOut2 = P22;sbit KeyOut3 = P21;sbit KeyOut4 = P20;sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;sbit ADDR3 = P13;sbit ENLED = P14;sbit BUZZ = P16;#define FADD 10#define FSUB 11#define FMUL 12#define FDIV 13#define FRES 14#define FEQU 15#define KEY_DELAY

3、300#define BUZ_DELAY 80code uint8 Ledcode13=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x86;uint8 Led_n=0;uint8 Led_buf6;float Tmp1=0, Tmp2=0;int8 C_flag=0;/* * 延时*/void delay(uint16 n) while (n-);/* * 蜂鸣器发声*/void buzzer_sound(void) uint16 i; for (i=0; i 0) buzzer_sound(); return va

4、l;/* * 验证数据有效性*/bit check_num(float f_num) if (f_num = 100000) return 1; return 0;/* * 制作数码管错误标志*/void make_led_error(void) int8 i; for (i=0; i5; i+) Led_bufi = Ledcode10; Led_buf5 = Ledcode12;/* * 制作数码管整数数据*/void make_led_inumber(int32 i_num) bit s_flag=0; int16 sit; int8 i; if (i_num =1; i-, sit/=

5、10) if (i_num = sit) break; Led_bufi = Ledcode10; i_num -= i_num/sit*sit; for (;i=1; i-, sit/=10) Led_bufi = Ledcodei_num/sit; i_num -= i_num/sit*sit; Led_buf0 = Ledcodei_num & 0x7F; if (s_flag) Led_buf5 = Ledcode11; else Led_buf5 = Ledcode10; ET0 = 1;/* * 制作数码管浮点数据*/void make_led_fnumber(float f_nu

6、m) bit s_flag=0; int32 num; int16 sit; int8 i, decimal, dot_sit=0; if (f_num 0; decimal-) if (num % 10 != 0) break; num /= 10; dot_sit = decimal; if (f_num = 10000) dot_sit = 0; else if (f_num = 1000) if (decimal = 1) dot_sit = 1; else if (f_num = 100) if (decimal = 2) dot_sit = 2; else if (f_num =

7、10) if (decimal = 3) dot_sit = 3; for (i=0; i=1; i-, sit/=10) if (num = sit) break; if (i = dot_sit) break; Led_bufi = Ledcode10; num -= num/sit*sit; for (;i=1; i-, sit/=10) Led_bufi = Ledcodenum/sit; num -= num/sit*sit; Led_buf0 = Ledcodenum; Led_bufdot_sit &= 0x7F; if (s_flag) Led_buf5 = Ledcode11

8、; else Led_buf5 = Ledcode10; ET0 = 1;/* * 数码管显示*/void show_num(uint8 *buf) ENLED = 1; switch (Led_n) case 0: ADDR0 = 0; ADDR1 = 0; ADDR2 = 0; P0 = buf0; break; case 1: ADDR0 = 1; ADDR1 = 0; ADDR2 = 0; P0 = buf1; break; case 2: ADDR0 = 0; ADDR1 = 1; ADDR2 = 0; P0 = buf2; break; case 3: ADDR0 = 1; ADD

9、R1 = 1; ADDR2 = 0; P0 = buf3; break; case 4: ADDR0 = 0; ADDR1 = 0; ADDR2 = 1; P0 = buf4; break; case 5: ADDR0 = 1; ADDR1 = 0; ADDR2 = 1; P0 = buf5; break; ENLED = 0; if (Led_n = 5) Led_n = 0; else Led_n+;/* * 计算程序*/void calculate(int8 key_val) float ans; bit err=0; if (key_val = FADD) & (key_val = F

10、DIV) C_flag = key_val; else if (key_val = FEQU) switch (C_flag) case FADD: ans = Tmp1+Tmp2; break; case FSUB: ans = Tmp1-Tmp2; break; case FMUL: ans = Tmp1*Tmp2; break; case FDIV: if (Tmp2 = 0) err = 1; break; else ans = Tmp1/Tmp2; break; if (check_num(ans) err = 1; if (err) make_led_error(); else m

11、ake_led_fnumber(ans); C_flag = 0; Tmp1 = 0; Tmp2 = 0; else if (key_val = FRES) make_led_fnumber(0); C_flag = 0; Tmp1 = 0; Tmp2 = 0; else if (C_flag = 0) ans = Tmp1; ans *= 10; ans += key_val; if (check_num(ans) return; else Tmp1 = ans; make_led_inumber(Tmp1); else ans = Tmp2; ans *= 10; ans += key_v

12、al; if (check_num(ans) return; else Tmp2 = ans; make_led_inumber(Tmp2); main() int8 key_val; ADDR3 = 1; ENLED = 0; make_led_inumber(0); TMOD = 0x01; TH0 = 0xF8; TL0 = 0xCC; TR0 = 1; ET0 = 1; EA = 1; while (1) key_val = scan_key(); if (key_val = -1) continue; calculate(key_val); void time0() interrupt 1 TR0 = 0; TH0 = 0xF8; TL0 = 0xCC; show_num(Led_buf); TR0 = 1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1