?? adc_key.lst
字號:
C51 COMPILER V8.02 ADC_KEY 05/06/2008 18:29:59 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE ADC_KEY
OBJECT MODULE PLACED IN ADC_Key.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key\ADC_Key.c LARGE BROWSE INCDIR(.\dataflash;.\lcd;.\task;.\uart;.\ucos;.\
-key) DEBUG OBJECTEXTEND PRINT(.\ADC_Key.lst) OBJECT(ADC_Key.obj)
line level source
1 #include "includes.h"
2
3 extern OS_EVENT * msgq_key;
4 /******************************************************
5 * P2.1為ADC模擬輸入端口
6 ******************************************************/
7 void PORT2_Init(void)
8 {
9 1 P2MDIN &=0xFD; //模擬輸入
10 1 P2SKIP |=0x02; //交叉開關(guān)跳過
11 1 }
12
13
14 void Delay(unsigned int i)
15 {
16 1 unsigned char j;
17 1 for(;i>0;i--)
18 1 {
19 2 for(j = 0;j<100;j++);
20 2 }
21 1 }
22
23 void ADC0_Init(void)
24 {
25 1 AMX0P =0x01; //P2.1為ADC0的模擬輸入
26 1 AMX0N =0x1F; //單端方式
27 1 ADC0CF =0x78; //右對齊,16分頻 CLK(SAR)=SYSCLK/(AD0SC+1)=3MHz
28 1 ADC0CN =0x80; //ADC0允許,工作于正常方式,向AD0BUSY寫1時啟動ADC0轉(zhuǎn)換
29 1 REF0CN =0x0A; //VDD為參考電壓,關(guān)溫度傳感器,關(guān)偏壓和電壓基準(zhǔn)
30 1 EIE1 |=0x08; //使能ADC0中斷
31 1
32 1 Delay(2000); //延時等候ADC0初始化穩(wěn)定
33 1 }
34
35
36 void ADC0_isr(void) interrupt INTERRUPT_ADC0_EOC //ADC0轉(zhuǎn)換結(jié)束中斷函數(shù)
37 {
38 1 unsigned int ADCNum;
39 1 static char key,flag=0;
40 1 char key_value;
41 1
42 1 AD0INT =0; //清ADC0轉(zhuǎn)換結(jié)束中斷標(biāo)志
43 1 AD0WINT =0; //清ADC0窗口比較匹配中斷標(biāo)志,即未發(fā)生匹配,不會發(fā)生中斷
44 1
45 1 ADCNum =(ADC0H<<8)+ADC0L;
46 1
47 1 if((ADCNum < 496) || (ADCNum > 528)) //有按鍵處在按下的狀態(tài)
48 1 {
49 2 if(!flag)
50 2 {
51 3 flag =1;
52 3 key =(ADCNum+16)>>5; //首次取鍵值
53 3 }
54 2 else
C51 COMPILER V8.02 ADC_KEY 05/06/2008 18:29:59 PAGE 2
55 2 {
56 3 if(key == ((ADCNum+16)>>5)) //兩次采樣結(jié)果是否相等
57 3 key =(ADCNum+16)>>5; //取第二次鍵值為最終鍵值
58 3 }
59 2
60 2 }
61 1 switch(key)
62 1 {
63 2 case 0:
64 2 key_value ='*';
65 2 OSQPost(msgq_key, (void *)(& key_value));
66 2 break;
67 2 case 1:
68 2 key_value ='0';
69 2 OSQPost(msgq_key, (void *)(& key_value));
70 2 break;
71 2 case 2:
72 2 key_value ='#';
73 2 OSQPost(msgq_key, (void *)(& key_value));
74 2 break;
75 2 case 3:
76 2 key_value ='9';
77 2 OSQPost(msgq_key, (void *)(& key_value));
78 2 break;
79 2 case 4:
80 2 key_value ='8';
81 2 OSQPost(msgq_key, (void *)(& key_value));
82 2 break;
83 2 case 5:
84 2 key_value ='7';
85 2 OSQPost(msgq_key, (void *)(& key_value));
86 2 break;
87 2 case 6:
88 2 key_value ='4';
89 2 OSQPost(msgq_key, (void *)(& key_value));
90 2 break;
91 2 case 7:
92 2 key_value ='5';
93 2 OSQPost(msgq_key, (void *)(& key_value));
94 2 break;
95 2 case 8:
96 2 key_value ='6';
97 2 OSQPost(msgq_key, (void *)(& key_value));
98 2 break;
99 2 case 9:
100 2 key_value ='3';
101 2 OSQPost(msgq_key, (void *)(& key_value));
102 2 break;
103 2 case 10:
104 2 key_value ='2';
105 2 OSQPost(msgq_key, (void *)(& key_value));
106 2 break;
107 2 case 11:
108 2 key_value ='1';
109 2 OSQPost(msgq_key, (void *)(& key_value));
110 2 break;
111 2 case 12:
112 2 key_value =HANG_UP;
113 2 OSQPost(msgq_key, (void *)(& key_value));
114 2 break;
115 2 case 13:
116 2 key_value =KEY_DOWN;
C51 COMPILER V8.02 ADC_KEY 05/06/2008 18:29:59 PAGE 3
117 2 OSQPost(msgq_key, (void *)(& key_value));
118 2 break;
119 2 case 14:
120 2 key_value =KEY_LEFT;
121 2 OSQPost(msgq_key, (void *)(& key_value));
122 2 break;
123 2 case 15:
124 2 key_value =OK_ENTER;
125 2 OSQPost(msgq_key, (void *)(& key_value));
126 2 break;
127 2 case 17:
128 2 key_value =KEY_RIGHT;
129 2 OSQPost(msgq_key, (void *)(& key_value));
130 2 break;
131 2 case 18:
132 2 key_value =KEY_UP;
133 2 OSQPost(msgq_key, (void *)(& key_value));
134 2 break;
135 2 case 19:
136 2 key_value =OUT_MENU;
137 2 OSQPost(msgq_key, (void *)(& key_value));
138 2 break;
139 2 case 20:
140 2 key_value =IN_MENU;
141 2 OSQPost(msgq_key, (void *)(& key_value));
142 2 break;
143 2 default:
144 2 break;
145 2 }
146 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 493 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 1
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -