单片机加减法C语言,如何利用51单片机实现加减法计算
开发工具:keil
仿真工具:proteus
代码如下:
头文件:inc_all.h
1 #ifndef INC_ALL_H_
2 #define INC_ALL_H_
3
4 volatile unsigned char keyValue;
5 volaTIle unsigned char sign;
6 volaTIle long int opr1;
7 volaTIle long int opr2;
8 volaTIle long int SysValue=0;
9 volatile int keyCounter;
10 volatile int cnt50ms=0;
11 volatile bit StartFlag;
12
13 void Init_Timer0();
14 void Init_Timer1();
15 void delayms(int t);
16 unsigned char KeyScan(void);
17 void showNumber(long int num);
18 void keyAnalyzing(unsigned char keyval);
19
20 #endif
源文件如下:main.c
1 #include
2 #include “inc_all.h”
3 //=======================================================
4 // 数码管显示译码,共阴极
5 // 0,1,2,3,4,5,6,7,8,9,灭,‘E’,‘-’
6 //=======================================================
7 unsigned char code table[]={0x3F,0x06,0x5b,0x4F,0x66,
8 0x6d,0x7d,0x07,0x7F,0x6F,
9 0x00/* trun off */,
10 0x79/* Error */,
11 0x40/* - */};
12 //========================================================
13 // 定时器0初始化函数,定时50毫秒
14 // 用键盘上的“START”键启动计数
15 // 用键盘上的“SUS”键暂停计数
16 //========================================================
17 void Init_Timer0()
18 {
19 TMOD |= 0x01;
20 TH0 = 0x3C;
21 TL0 = 0xB0;
22 TR0 = 0;
23 ET0 = 1;
24 }
25 //=========================================================
26 // 定时器1初始化函数
27 // 定时23毫秒,用于显示
28 // 初始化后计时启动
29 //=========================================================
30 void Init_Timer1()
31 {
32 TMOD |= 0x10;
33 TH1 = 0xA6;
34 TL1 = 0x28;
35 TR1 = 1;
36 ET1 = 1;
37 }
38 //=========================================================
39 // 延时函数
40 //=========================================================
41 void delayms(int t)
42 {
43 int i,j;
44 for(i=t;i》0;i--)
45 for(j=25;j》0;j--)
46 ;
47 }
48 //=========================================================
49 // 四位数码管显示函数
50 // 能自动灭零,自动识别正负号
51 // 数值超出显示范围时显示错误“E---”
52 //=========================================================
53 void showNumber(long int num)
54 {
55 unsigned char q,s,b,g;
56 if(num》=0)
57 {
58 q = num/1000;
59 b = num/100%10;
60 s = num/10%10;
61 g = num%10;
62 if(num《10)
63 {
64 q = 10;
65 b = 10;
66 s = 10;
67 }
68 else if(num《100)
69 {
70 q = 10;
71 b = 10;
72 }
73 else if(num《1000)
74 q = 10;
75 else if(num》9999)
76 {
77 q = 11; //show error
78 b = 12;
79 s = 12;
80 g = 12;
81 }
82 }
83 else
84 {
85 if(num》-1000)
86 {
87 q = 12;
88 b = (0-num)/100;
89 s = (0-num)/10%10;
90 g = (0-num)%10;
91 }
92 else
93 {
94 q = 11; //show error
95 b = 12;
96 s = 12;
97 g = 12;
98 }
99 }
100 P0 = 0x00;
101 P0 = table[q];
102 P2 = 0xFE;
103 delayms(10);
104 P0 = 0x00;
105 P0 = table[b];
106 P2 = 0xFD;
107 delayms(10);
108 P0 = 0x00;
109 P0 = table[s];
110 P2 = 0xFB;
111 delayms(10);
112 P0 = 0x00;
113 P0 = table[g];
114 P2 = 0xF7;
115 delayms(10);
116 }
117 //=========================================================
118 // 键盘扫描函数
119 // 返回按键情况,扫描结果
120 //=========================================================
121 unsigned char KeyScan(void)
122 {
123 unsigned char temp=0xF0;
124 P1 = temp;
125 temp = P1;
126 if(temp!=0xF0)
127 {
128 delayms(5); //去抖动
129 temp = P1;
130 if(temp!=0xF0)
131 {
132 int t=0x01,i;
133 for(i=0;i《4;i++)
134 {
135 P1 = ~(t《
136 temp = P1;
137 switch(temp) //按行扫描
138 {
139 case 0xee: return ‘1’;
140 case 0xde: return ‘2’;
141 case 0xbe: return ‘3’;
142 case 0x7e: return ‘+’; //加号
143
144 case 0xed: return ‘4’;
145 case 0xdd: return ‘5’;
146 case 0xbd: return ‘6’;
147 case 0x7d: return ‘-’; //减号
148
149 case 0xeb: return ‘7’;
150 case 0xdb: return ‘8’;
151 case 0xbb: return ‘9’;
152 case 0x7b: return ‘r’; //复位
153
154 case 0xe7: return ‘0’;
155 case 0xd7: return ‘s’; //启动
156 case 0xb7: return ‘t’; //暂停
157 case 0x77: return ‘=’; //等于
158 default: ;
159 }
160 }
161 }
162 }
163 return ‘0’;
164 }
165 //======================
单片机加减法C语言,如何利用51单片机实现加减法计算相关推荐
- c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc
-- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...
- 51单片机点阵c语言程序,使用51单片机点亮我们的点阵灯
通过前面我们都知道点亮我们的不管是点阵,数码管,还是LED灯,不仅要熟悉我们的代码还要会看我们的原理图和真值表,所以我们如果真的要写代码倒是其次的,首先我们得学会看我们的原理图和真值表,但是认识那个我 ...
- 单片机 rs232 c语言,完全手册 51单片机C语言开发详解系列之第8章 串口通讯实战—RS232...
完全手册 51单片机C语言开发详解系列 技术凝聚实力 专业创新出版 第8章 串口通讯实战-RS232接口电路与软件设计 本章主要通过实际的例子讲解AT89S51单片机的RS232串行通讯接口设计. 随 ...
- 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]
/***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...
- 51单片机的c语言外部扩展,51单片机资源扩展:扩展片外RAM
上一文中扩展了单片机的程序存储器,4KB存储空间提升到64KB.其实,4K的代码空间还凑合,但是51自带的256B数据存储空间使用起来还真紧张,其中留给用户的连128B都不到,所以不得不扩展片外RAM ...
- 51单片机生成C语言矩形波,基于51单片机产生占空比和频率可调的方波信号发生器(附全部代码)...
本帖最后由 suqianfu 于 2020-4-11 22:29 编辑 大佬,我添加了一点注释,不知道理解得对不对 #include ...
- 51单片机微波炉c语言程序,基于51单片机的微波炉控制C源程序.doc
#include #define GET_KEY P1 #define GET_LED P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned ...
- 51单片机用c语言倒计时程序,51单片机实现100以内倒计时,求大佬指点。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #define uchar unsigned char #define uint unsigned ...
- 51单片机频率计c语言程序,基于51单片机的频率计程序
这个是电路原理图 *********************************************** **************入门级频率计设计****************** ** ...
- 单片机红外接收c语言代码,基于51单片机+0038红外发射与接收C程序
#define uchar unsigned char #define uint unsigned int sbit key1=P3^3; sbit key2=P3^4; sbit key3=P3^5 ...
最新文章
- recovery的init.rc中挂载system
- h5 bootstrap 小程序模板_一道面试题小程序与H5的区别
- 64位进程和32位进程通信问题,接收端收不到 SendMessage发送的消息
- 用智能墨水打造超灵敏传感器 “写”到哪里感知就到哪里...
- Go基础-Mac中Go环境的安装以及实现第一个go程序hello world
- HDU2147 kiki's game
- java 自学网站推荐
- 智慧养老整体解决方案
- 怎么开通企业邮箱客户端授权密码功能?
- 网上看到的!!很值得欣赏~~(没耐…
- 如何做一份适用的定向地图
- php 递归遍历文件夹,php递归遍历目录_PHP教程
- 远程命令/代码执行漏洞(RCE)总结
- 《超越平凡的平面设计: 版式设计原理与应用》—怎样运用对比确定字体风格...
- Word处理控件Aspose.Words功能演示:在 Python 中比较两个 Word 文档
- QQ头像变灰算法[图] 1
- Java中数组的学习与使用
- nltk之查找同义词、反义词、指代关系
- 移动光猫GM219-s多LAN端口的网络开放
- 融合与发展:数据科学研究院RONG研究员首次工作汇报会圆满结束
热门文章
- 软件测试培训三个月骗局,三个月能学会吗?可以做测试工作吗?
- jquery实现向服务器发送get请求下载excel文件
- myScript调研,电子手写板使用,纯干货
- 阿里云CDN回源host理解
- 服务器ssd硬盘格式化,ssd固态硬盘格式化教程
- 批量替换 Word 文档前几页
- python标准差不用numpy_Python numpy标准差
- 折线图-面积图-K线图
- window 脚本文件.bat获取最高权限拷贝文件及c++调用.bat文件示例
- 如何自制拼音卡片(用WORD或者EXCEL制作)