📄 k1-k4-shuma-c51.lst
字号:
C51 COMPILER V7.08 K1_K4_SHUMA_C51 12/20/2006 16:40:03 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE K1_K4_SHUMA_C51
OBJECT MODULE PLACED IN K1-K4-SHUMA-C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE K1-K4-SHUMA-C51.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME500单片机开发系统演示程序 - 计按键次数 */
4 /* */
5 /* 3位数码管显示 */
6 /* */
7 /* 版本: V1.0 (2006/11/20) */
8 /* 作者: gguoqing (Email: gguoqing@willar.com) */
9 /* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) */
10 /* 时间: 2006/07/19 */
11 /* */
12 /*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
13 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
14 /* */
15 /*******************************************************************/
16
17 //对独立键进行按键次数计数,三位数码管显示。
18 //K1按下后,进行加1计数
19 //K2按下后,进行减1计数。
20 //K3按下后,进行加5计数。
21 //K4按下后,清计数单元,数码管显示0。
22 //按住键可以快速计数。
23 /********************************************************/
24
25 #include < reg51.h >
26 unsigned char k_scan();
27 unsigned char k_pro();
28 unsigned char k_new,k_old;
29 unsigned char k,num;
30 unsigned char k_count=0;
31
32
33 void delay(unsigned char m);
34 void disp_count();
35
36 sbit k1=P1^4; sbit k2=P1^5;
37 sbit k3=P1^6; sbit k4=P1^7;
38
39 unsigned char code LEDData[ ] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
40 0x80,0x90,0xff};
41
42 unsigned char data display[4] = {0x00,0x00,0x00,0x00,};
43
44 /********************************************************/
45 void main(void)
46 {
47 1 P0=0xff;
48 1 P1=0xff;
49 1 P2=0xff;
50 1 k_old=0x00;
51 1 k=0x00;
52 1
53 1 while(1)
54 1 {
55 2 disp_count();
C51 COMPILER V7.08 K1_K4_SHUMA_C51 12/20/2006 16:40:03 PAGE 2
56 2 k_new=k_scan();
57 2
58 2 if(k_new!=k_old)
59 2 {
60 3 for(num=0;num<30;num++) //调显示来做键延时
61 3 disp_count();
62 3 }
63 2
64 2 if(k_new!=k_old)
65 2 {
66 3 k=k_pro();
67 3 }
68 2
69 2 switch(k)
70 2 {
71 3 case 1: k_count++; break;
72 3 case 2: k_count--; break;
73 3 case 3: for(num=0;num<5;num++)
74 3 k_count++; break;
75 3 case 4: k_count=0; break;
76 3 default:
77 3 break;
78 3 }
79 2 k=0x00;
80 2 }
81 1 }
82
83 /********************************************************/
84 void disp_count()
85 {
86 1 display[3]=k_count;
87 1 display[2]=display[3]/100;
88 1 display[0]=display[3]%100;
89 1 display[1]=display[0]/10;
90 1 display[0]=display[0]%10;
91 1
92 1 P0 =LEDData[display[0]] ; //显示个位
93 1 P2 = 0x7f;
94 1 delay(1);
95 1
96 1 P0 =LEDData[display[1]]; //显示十位
97 1 P2 = 0xbf;
98 1 delay(1);
99 1
100 1 P0 =LEDData[display[2]]; //显示位
101 1 P2 = 0xdf;
102 1 delay(1);
103 1
104 1 P2 = 0xff; //关闭显示
105 1 }
106
107 /********************************************************/
108 unsigned char k_pro()
109 {
110 1 switch (k_new)
111 1 {
112 2 case 0x01: k=1; break; //K1按下
113 2 case 0x02: k=2; break; //K2按下
114 2 case 0x04: k=3; break; //K3按下
115 2 case 0x08: k=4; break; //K4按下
116 2
117 2 default: break;
C51 COMPILER V7.08 K1_K4_SHUMA_C51 12/20/2006 16:40:03 PAGE 3
118 2 }
119 1 return(k);
120 1 }
121
122 /********************************************************/
123 unsigned char k_scan()
124 {
125 1 P1=0xff;
126 1 k_new=0x00;
127 1 k_new=(~P1 & 0xf0)>>4;
128 1
129 1 return(k_new); //无键按下
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -