?? main.lst
字號:
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 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;.\include) DEBUG OBJECTEXTEND PRINT(
-.\main.lst) OBJECT(main.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:LCD顯示應用 **
4 //**<功能>:LCD顯示滾動的一句話,以及鍵盤輸入。 **
5 //**<版本說明>:這是第5.2版,在5.1版的基礎上做了小小的修改,在字母輸入法下可以連續不斷的循環改變 **
6 //** 3個字母,重復按鍵計數最大值由3變為255。 **
7 //**<作者>:程沛 **
8 //**<完成時間>:2007年8月8日 **
9 //**<聯系方式>:superyongzhe@163.com **
10 //*************************************************************************************************
11 //*************************************************************************************************
12
13 //*************************************************************************************************
14 //* *
15 //* ******************************頭文件及宏定義************************** *
16 //* *
17 //*************************************************************************************************
18 #include "includes.h"
19
20 #define TIME1H 0x3C
21 #define TIME1L 0xB0 //定時器1溢出時間:50ms
22
23
24 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
25 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
26 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
27 bit b_KeyShock=0; //鍵盤防抖動標志位。
28 //當按鍵中斷產生時,首先判斷此位。
29 //0--執行鍵盤掃描及鍵碼處理程序;1--不執行。
30
31 bit b_KillShock=0; //防抖標志清除位:0--不清除;1--清除。
32
33 unsigned char uc_KillCount=1; //抖動標志清除計數,使用定時器1。
34
35
36 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
37 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<鍵盤掃描開啟標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
38 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
39 bit b_KeyScan=0; //0--不掃描;
40 //1--掃描。
41
42 extern bit b_Introduce; //介紹關閉標志,當置零時,介紹就會停止顯示。
43
44
45 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
46 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按鍵計數清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
47 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
48 unsigned char uc_CleanCount=0; //清除按鍵計數時間計數。
49
50 extern bit b_CleanClick; //清除按鍵計數標志,定義在KeyProcess.c中
51 //0--不清除;
52 //1--清除。
53 //在定時器1中使用。
54
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 PAGE 2
55 extern unsigned char uc_ClickCount; //按鍵連續點擊計數,定義在KeyProcess.c中。
56
57 extern unsigned char uc_KeyTemp; //按鍵鍵碼暫存,定義在KeyProcess.c中。
58
59
60
61 //*************************************************************************************************
62 //* *
63 //* ********************************主函數****************************** *
64 //* *
65 //*************************************************************************************************
66 void main()
67 {
68 1 P1=0x0F;
69 1
70 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中斷0,用于開啟鍵盤掃描及鍵碼處理標志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
71 1 IT0=1; // 中斷方式:下降沿。
72 1 EX0=1; // 開啟外部中斷。
73 1
74 1
75 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定時器1,用于防抖動標志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
76 1 TH1=TIME1H;
77 1 TL1=TIME1L;
78 1 TR1=1; //開啟定時器1
79 1 ET1=1; //開定時器1中斷
80 1
81 1 EA=1; //開總中斷。
82 1
83 1 vdInitialize(); //LCD初始化,相關參數在“SMC1602.h”中修改。
84 1 //注意,初始化里省略了vWriteCMD(0x0C),在vIntroduce()里有。
85 1
86 1 vIntroduce(); //顯示介紹。
87 1
88 1 while(1)
89 1 {
90 2 if(b_KeyScan==1) //如果有按鍵按下,則進行按鍵掃描和鍵碼處理。
91 2 {
92 3 b_KeyScan=0;
93 3 vKeyProcess(ucKeyScan());
94 3 }
95 2 }
96 1 }
97
98 //*************************************************************************************************
99 //* *
100 //* ******************************外部中斷0,用于開啟鍵盤掃描及鍵碼處理****************** *
101 //* *
102 //*************************************************************************************************
103 void vINT0(void) interrupt 0
104 {
105 1 if(b_KeyShock==0)
106 1 {
107 2 if(b_Introduce==0) //此判斷是為了屏蔽從介紹返回字符輸入時的鍵盤掃描。
108 2 {
109 3 b_KeyScan=1; //開啟鍵盤掃描標志。
110 3 b_KeyShock=1; //設置防抖動標志。
111 3 }
112 2 }
113 1 else b_KeyShock=0; //如果有抖動則不執行鍵掃描,恢復防抖動標志。
114 1
115 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<設置防抖動清除標志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
116 1 if(b_KeyShock==1)
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 PAGE 3
117 1 b_KillShock=1; //如果防抖動標志位開啟則開啟防抖動標志清除位,
118 1 //300ms后清除防抖動標志。
119 1
120 1 b_Introduce=0; //用于關閉介紹,在顯示介紹時如果有案件按下,產生的中斷會
121 1 } //把此標志置零,便可退出介紹。
122
123
124
125 //*************************************************************************************************
126 //* *
127 //* ****************定時器1中斷,用于計時功能和防抖動標志清除以及顯示報告**************** *
128 //* *
129 //*************************************************************************************************
130 void vTimer1(void) interrupt 3
131 {
132 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
133 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖動標志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
134 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
135 1 if(b_KillShock==1)
136 1 {
137 2 if(uc_KillCount%5==0) //當防抖動標志位為1時,計時300ms后清除抖動標志位。
138 2 {
139 3 b_KeyShock=0;
140 3 b_KillShock=0;
141 3 uc_KillCount=1;
142 3 }
143 2 else uc_KillCount++;
144 2 }
145 1
146 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
147 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按鍵計數清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
148 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
149 1 if(b_CleanClick==1)
150 1 {
151 2 if(uc_CleanCount==100)
152 2 {
153 3 b_CleanClick=0; //關閉改計數。
154 3
155 3 uc_CleanCount=1; //恢復計數初值。
156 3
157 3 uc_ClickCount=1; //清除按鍵計數。
158 3
159 3 uc_KeyTemp=0;
160 3 }
161 2 else
162 2 uc_CleanCount++;
163 2 }
164 1
165 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
166 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢復定時器1溢出時間>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
167 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
168 1 TH1=TIME1H;
169 1 TL1=TIME1L;
170 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 133 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 PAGE 4
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 + -