?? main.lst
字號:
C51 COMPILER V8.05a MAIN 07/29/2007 09:35:52 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE sources\main.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\main.lst
-) OBJECT(main.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:LED動態掃描顯示及鍵盤輸入掃描。 **
4 //**<功能>:將鍵盤輸入轉換成相應的輸出并顯示在LCD上,同時帶有1s計數功能。 **
5 //**<版本說明>:此版是第二版beta2,在第一版的基礎上增強防抖動功能,采用全新的防抖動算法,使得按 **
6 //** 鍵掃描更精確可靠。 **
7 //**<主要改動>:重新加入防抖動標志位,但與出版不同的是,防抖動標志改為首次有效,同時增加了防抖動 **
8 //** 清除標志位,通過T1定時300毫秒清除防抖動標志位,從而使得鍵盤掃描及處理更加可靠。 **
9 //**<作者>:程沛 **
10 //**<完成時間>:2007年7月28日 **
11 //**<聯系方式>:superyongzhe@163.com **
12 //*************************************************************************************************
13 //*************************************************************************************************
14
15
16 //*************************************************************************************************
17 //* *
18 //* ******************************頭文件及宏定義************************** *
19 //* *
20 //*************************************************************************************************
21 #include "includes.h"
22
23 #define TIME0H 0xFC
24 #define TIME0L 0x18 //定時器0溢出時間:5ms
25
26 #define TIME1H 0x44
27 #define TIME1L 0x80 //定時器1溢出時間:48ms
28
29
30 //*************************************************************************************************
31 //* *
32 //* ********************************全局變量****************************** *
33 //* *
34 //*************************************************************************************************
35
36 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器0定時刷新LED計數>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
37 unsigned char uc_DisCount=1;
38
39 unsigned long ul_Number=0; //LCD實時顯示數字。
40
41
42 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器1計數刷新定時(計時模式>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
43 unsigned char uc_TimeCount=0; //定時器1定時計數。
44
45 bit b_ClockStart=0; //定時器1顯示計數標志位。
46
47
48 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
49
50 bit b_KeyShock=0; //鍵盤防抖動標志位。
51 //當按鍵中斷產生時,首先判斷此位。
52 //0--執行鍵盤掃描及鍵碼處理程序;1--不執行。
53
54 bit b_KillShock=0; //防抖標志清除位:0--不清除;1--清除。
C51 COMPILER V8.05a MAIN 07/29/2007 09:35:52 PAGE 2
55
56 unsigned char uc_KillCount=1; //抖動標志清除計數,使用定時器1。
57
58
59 //*************************************************************************************************
60 //* *
61 //* ********************************主函數****************************** *
62 //* *
63 //*************************************************************************************************
64 void main()
65 {
66 1 P2=0x0F; //初始化鍵盤接口。
67 1
68 1 TMOD=0x11; //定時器0:模式一;定時器0:模式一.
69 1
70 1
71 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器0,用于LCD刷新>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
72 1 TH0=TIME0H;
73 1 TL0=TIME0L;
74 1 TR0=1; //開啟定時器0
75 1 ET0=1; //開定時器0中斷
76 1
77 1
78 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器1,用于1s計時 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
79 1 TH1=TIME1H;
80 1 TL1=TIME1L;
81 1 TR1=1; //開啟定時器1
82 1 ET1=1; //開定時器1中斷
83 1
84 1
85 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于執行鍵盤掃描和鍵處理程序>>>>>>>>>>>>>>>>>>>>>>>>>>>
86 1 IT0=1; //外部中斷0,中斷方式:下降沿
87 1 EX0=1; //開啟外部中斷0
88 1
89 1 PT0=1;
90 1 PX0=0;
91 1
92 1 EA=1; //開啟總中斷
93 1
94 1 while(1);
95 1 }
96
97
98 //*************************************************************************************************
99 //* *
100 //* ***************************外部中斷0,調用鍵盤掃描程序************************* *
101 //* *
102 //*************************************************************************************************
103 void vINT0(void) interrupt 0
104 {
105 1 EX0=0; //在鍵掃描處理時,關閉外部中斷0,防抖動。
106 1
107 1 if(b_KeyShock==0)
108 1 {
109 2 vKeyProcess(ucKeyScan()); //當判斷有按鍵按下時,掃描鍵盤,并把掃描結果進行處理。
110 2 }
111 1 else b_KeyShock=0; //如果有抖動則不執行鍵掃描,恢復防抖動標志。
112 1
113 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<設置防抖動清除標志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
114 1 if(b_KeyShock==1)
115 1 b_KillShock=1; //如果防抖動標志位開啟則開啟防抖動標志清除位,
116 1 //300ms后清除防抖動標志。
C51 COMPILER V8.05a MAIN 07/29/2007 09:35:52 PAGE 3
117 1
118 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復鍵掃描處理前初始狀態 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
119 1 P2=0x0F; //恢復P2口。
120 1 EX0=1; //恢復按鍵中斷。
121 1 }
122
123
124 //*************************************************************************************************
125 //* *
126 //* **********************定時器1中斷,用于計時功能和防抖動標志清除************************ *
127 //* *
128 //*************************************************************************************************
129 void vTimer1(void) interrupt 3
130 {
131 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<計時模式計數刷新>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
132 1 if(b_ClockStart==1) //當計時模式開啟式,如計時處于運行狀態則執行定時計數增加。
133 1 {
134 2 if(uc_TimeCount%21==0)
135 2 {
136 3 uc_TimeCount=1;
137 3 ul_Number++;
138 3 }
139 2 else uc_TimeCount++;
140 2 }
141 1
142 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
143 1 if(b_KillShock==1)
144 1 {
145 2 if(uc_KillCount%7==0) //當防抖動標志位為1時,計時300ms后清除抖動標志位。
146 2 {
147 3 b_KeyShock=0;
148 3 b_KillShock=0;
149 3 uc_KillCount=1;
150 3 }
151 2 else uc_KillCount++;
152 2 }
153 1
154 1 TH1=TIME1H;
155 1 TL1=TIME1L;
156 1
157 1 }
158
159
160 //*************************************************************************************************
161 //* *
162 //* ***************************定時器0,定時刷新LED************************* *
163 //* *
164 //*************************************************************************************************
165 void vTimer0(void) interrupt 1
166 {
167 1 vShowOneNum(*(pucLedNum(ul_Number)+uc_DisCount),6-uc_DisCount); //在LCD上顯示1位數字。
168 1
169 1 if(uc_DisCount>=5)
170 1 uc_DisCount=0; //定時器0在每次被觸發時,改變LCd顯示。
171 1 else uc_DisCount++; //從第一位到第六位循環顯示。
172 1
173 1 TH0=TIME0H; //恢復定時器0初始值。
174 1 TL0=TIME0L;
175 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.05a MAIN 07/29/2007 09:35:52 PAGE 4
CODE SIZE = 312 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -