开发工具: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 //======================
青岛人工智能创新应用展示中心正式开放 云天励飞全力打造AI产业
速度飞起!PCIe4.0固态硬盘aigo国民好物P7000适合你么?
5G+超高清沉浸式体验正式亮相MWC19上海展
电动牙刷哪个牌子好,2020声波电动牙刷排行榜
苹果回应转嫁iPhone成本指控:韩国不应干涉市场行为
如何利用51单片机实现加减法计算
一文详解NE555方波信号发生器
电动汽车以什么样的充电方式才是最合适的
【演讲预告】双碳下物联网新生态之Wi-SUN专题
空中客车正在与巴黎大众运输公司合作研发一种垂直起降的飞行车辆
2018全球显示屏与led市场怎么样?看看数据就知道了
超星未来基于自研Al芯片的NM10
关于安科瑞Acrel-3000WEB电能管理系统东岳盐业应用
恩智浦发布多标准可编程系统芯片系列解决方案
东旭光电发展高端装备及技术服务业务,获8000万设备订单
华为荣耀Note9什么时候上市?最新消息:秒杀华为P10,荣耀最强机荣耀Note9麒麟970+全面屏
可编程逻辑器件怎样来实现灵活的电源管理
波音B737-800型飞机在北京大兴国际机场完成了第二阶段试飞试验
日本13家企业建立虚拟偶像标准VRM联盟
拆解特斯拉HW4.0的毫米波雷达主板