📄 global.lst
字号:
C51 COMPILER V8.02 GLOBAL 08/18/2008 18:35:15 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE GLOBAL
OBJECT MODULE PLACED IN Global.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Global.c BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 #include "Global.H"
2
3
4 //数码管显示缓冲区。改变此缓冲区中的字型码,即改变相应数码管的显示内容。
5 //=====================================================================
6 UNCHAR DisplayBuffer[8] = {0,0,0,0,0,0,0,0};//数码管显示缓冲区,低字节为左边数码管,高字节为右边数码管
7 UNCHAR code HexChar[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //显示0到9
8
9 /////////////////////////////////////////////////////数码管显示与键盘扫描函数///////////////////////////
10
11 UNCHAR KeyValue = 0;//按键值.有键按下置非0按键扫描码,应用程序读取按键扫描码后需清0.
12 //显示控制程序内部使用的变量
13 //--------------------------
14 UNCHAR DisplayDigit = 0;//当前数码管显示位的编号,亦即显示数据在显示缓冲区中的偏移量
15 //键盘扫描程序内部使用的变量
16 //--------------------------
17 UNCHAR KeyValueTemp = 0;//临时按键值变量,用于进行20ms延时检测
18 UNCHAR Key20msDelay = 0;//有键按下时的20ms去抖动延时控制
19
20 //显示键盘控制程序。在Timer1中断服务程序中被调用。
21 //===============================================
22 UNCHAR KeyDownFlag = 0;//有键按下标志。应用程序代码不能改变此变量的值,否则会影响键盘的正常工作。
23 void DisplayKeyboardControl(void) using 3
24 {
25 1 UNCHAR KeyScanCode;//按键扫描码,为0表示没有键按下
26 1 UNCHAR i;
27 1
28 1 //停止所有数码位的显示
29 1 //====================
30 1 XBYTE[DisplayDigitSelect] = 0xFF;
31 1 KeyScanCode = 0x00 ;//初始化为未检测到有键按下,为0表示没有键按下
32 1
33 1 //按键识别
34 1 //=================================
35 1 for(i=0;i<8;i++)
36 1 {
37 2 XBYTE[DisplaySegmentSelect]=~(0x1<<i);
38 2 if(P1_0==0)
39 2 {
40 3 KeyScanCode=2*i+1;
41 3 break;//退出键盘扫描循环
42 3 }
43 2
44 2 else if(P1_1==0)
45 2 {
46 3 KeyScanCode=2*i+2;
47 3 break;//退出键盘扫描循环
48 3 }
49 2
50 2 }
51 1
52 1 /////////////////////////////////////// //确定按键是否稳定按下或已经抬起 //////////////////////////////
-/////////
53 1 //确定按键是否稳定按下或已经抬起
54 1 //==============================
C51 COMPILER V8.02 GLOBAL 08/18/2008 18:35:15 PAGE 2
55 1 if(KeyScanCode)
56 1 {//本次中断有键按下.如果按键已经稳定按下(KeyDownFlag非0)了,则不做任何事,否则处理20ms去抖动延时.
57 2 if(!KeyDownFlag)
58 2 {//如果未确定按键已经稳定按下时,处理20ms延时
59 3 if(Key20msDelay)
60 3 {//在20ms延时处理中,继续20ms延时处理
61 4 Key20msDelay++;
62 4 if(Key20msDelay>8)
63 4 {//20ms延时时间到
64 5 if(KeyScanCode == KeyValueTemp)
65 5 {//本次按键扫描码与20ms延时开始时的按键扫描码相同,确定按键稳定按下
66 6 KeyDownFlag = 1;//标记按键稳定按下
67 6 KeyValue = KeyScanCode;//将按键扫描码送入按键缓冲区
68 6 Key20msDelay = 0;//结束20ms延时状态
69 6 }
70 5 else
71 5 {//20ms延时前后的扫描码不相同,以最后一次的扫描码来启动新的20ms去抖动延时
72 6 KeyValueTemp = KeyScanCode;//记下20ms延时开始时的按键扫描码
73 6 Key20msDelay = 1;//重新进入20ms延时处理
74 6 }
75 5 }
76 4 }
77 3 else
78 3 {//未进入20ms延时处理时,启动20ms延时处理
79 4 KeyValueTemp = KeyScanCode;//记下20ms延时开始时的按键扫描码
80 4 Key20msDelay = 1;//进入20ms延时处理
81 4 }
82 3 }
83 2 }
84 1 else
85 1 {//本次中断无键按下
86 2 if(Key20msDelay)
87 2 {//在20ms延时处理中,继续20ms延时处理
88 3 Key20msDelay++;
89 3 if(Key20msDelay>8)
90 3 {//20ms延时时间到,说明启动20ms延时的按键信号是干扰信号,直接结束20ms延时状态
91 4 Key20msDelay = 0;//结束20ms延时状态
92 4 }
93 3 }
94 2 else
95 2 {//未进入20ms延时处理时
96 3 KeyDownFlag = 0;//标记按键已经抬起
97 3 }
98 2 }
99 1
100 1 XBYTE[DisplayDigitSelect]=~(0x01<<DisplayDigit); //选择数码管显示位数
101 1 XBYTE[DisplaySegmentSelect]=DisplayBuffer[DisplayDigit]; //显示数字
102 1 DisplayDigit++;
103 1 if(DisplayDigit>=8)
104 1 DisplayDigit=0;
105 1 }
106
107
108 //完成系统按键值转换成自定义按键值的功能.在main()的主循环中被调用
109 //===============================================================
110 /*
111 void KeyConvert(void)
112 {
113 if(KeyValue)
114 {
115 switch(KeyValue)
116 {
C51 COMPILER V8.02 GLOBAL 08/18/2008 18:35:15 PAGE 3
117 case 1: MyKey = 1; break;
118 case 2: MyKey = 2; break;
119 case 3: MyKey = 3; break;
120 case 4: MyKey = 4; break;
121 case 5: MyKey = 5; break;
122 case 6: MyKey = 6; break;
123 case 7: MyKey = 7; break;
124 case 8: MyKey = 8; break;
125 case 9: MyKey = 9; break;
126 case 10: MyKey = 10;break;
127 case 11: MyKey = 11;break;
128 case 12: MyKey = 12;break;
129 case 13: MyKey = 13;break;
130 case 14: MyKey = 14;break;
131 case 15: MyKey = 15;break;
132 case 16: MyKey = 16;break;
133 }
134
135 KeyValue = 0;
136 }
137 }
138
139 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 159 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -