?? power2.lst
字號:
C51 COMPILER V7.20 POWER2 10/31/2008 20:10:50 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE POWER2
OBJECT MODULE PLACED IN power2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE power2.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <INTRINS.H>
3 /*
4 #include "seg7.h"
5 */
6 #define TIMERH 0XEE
7 #define TIMERL 0XFF
8 #define KEY1 0x20
9 #define KEY2 0x40
10
11
12 /* 變量定義 */
13 unsigned char cs;
14 unsigned char dispram[4];
15 unsigned char key, key_old, keycode,flag;
16 bit bkey1, bkey2;
17 /*聲明*/
18 void WriteSegData(unsigned char );
19 void WriteCsData(unsigned char );
20 void InitTimer1(void);
21 void InitTimer0(void);
22 void delay1 (unsigned int ms);
23
24 /* 段碼表 */
25 /*unsigned char code seg_code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, // 0--9
26 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x00, 0x40}; // A, b, C, d, E, F, 消隱, -*/
27 /*unsigned char code seg_code[] = {0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF, // 0--9
28 0xF7, 0xFC, 0xB9, 0xDE, 0xF9, 0xF1, 0x80, 0xC0}; // A, b, C, d, E, F, 消隱, 帶點*/
29
30 unsigned char code seg_code[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, // 0--9
31 0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF}; // 0.--9.
32
33
34 /**************************************
35 說明: 寫段碼數據
36 seg: 待顯示的段碼數據, 0-9, A-F
37 **************************************/
38
39 void main(void)
40 {
41 1 P2=0XFF;
42 1 P0=0XFF;
43 1 P1=0xFF;
44 1
45 1 key = P1&0xE0;
46 1 key_old = key;
47 1 bkey1 = bkey2 = 0;
48 1
49 1 InitTimer1();
50 1 InitTimer0();
51 1 TR1=1;
52 1 TR0=1;
53 1
54 1
55 1 dispram[0]=0;
C51 COMPILER V7.20 POWER2 10/31/2008 20:10:50 PAGE 2
56 1 dispram[1]=0;
57 1 dispram[2]=9;
58 1 dispram[3]=3;
59 1 P1=dispram[2];
60 1
61 1 while(1)
62 1 {
63 2 ;
64 2 // key=P1;
65 2 }
66 1 }
67
68
69 /*初始化*/
70 void InitTimer1(void)
71 {
72 1 cs=0;
73 1 dispram[0]=dispram[1]=dispram[2]=dispram[3]=0;
74 1 TMOD=0X90;
75 1 TH1=TIMERH;
76 1 TL1=TIMERL;
77 1
78 1 EA=1;
79 1 ET1=1;
80 1 }
81 void InitTimer0(void)
82 {
83 1 P1=0X00;
84 1 TMOD=0X01;
85 1 TH1=TIMERH;
86 1 TL1=TIMERL;
87 1
88 1 EA=1;
89 1 ET0=1;
90 1 }
91
92
93 void Timer1IER(void) interrupt 3 using 2
94 {
95 1 /* 定時器重裝 */
96 1 TH1 = TIMERH;
97 1 TL1 = TIMERL;
98 1 /* 清中斷標志 */
99 1 TF1 = 0;
100 1 /* 鍵盤檢測 */
101 1 key_old = key;
102 1 key = P1 & 0xE0;
103 1 /* 循環顯示 */
104 1 if(cs >= 3)
105 1 cs = 0;
106 1 else
107 1 cs++;
108 1 WriteSegData(dispram[cs]);
109 1 WriteCsData(1<<cs);
110 1 flag=1;
111 1 }
112
113
114 void Timer0IER(void) interrupt 1 using 1
115 {
116 1 unsigned char k1,k2,key,flag;
117 1 TF0 = 0;
C51 COMPILER V7.20 POWER2 10/31/2008 20:10:50 PAGE 3
118 1 P1|=0xE0;
119 1 ;;;
120 1 k1=(~P1)&0xE0; //從P1口讀取按鍵信息
121 1 P1|=0xE0;
122 1 if(dispram[0]>9)
123 1 {dispram[0]=0;
124 2 dispram[1]++;}
125 1 if(dispram[1]>9)
126 1 {dispram[1]=0;
127 2 dispram[2]++;}
128 1 if(dispram[2]>9)dispram[2]=0;
129 1 if(k1!=0xE0&&flag==1)
130 1 {
131 2 k2=(~P1)&0xE0;
132 2 if(k1==k2)
133 2 {
134 3
135 3 ; ; ;//延時一段時間
136 3 delay1(255);
137 3 k2=(~P1)&0xE0; //再次讀取信息
138 3 key=k1|k2; //兩次信息的交集
139 3 if(key==0x20)
140 3 dispram[2]++;
141 3 else if(key==0x40)
142 3 dispram[1]++;
143 3 else if(key==0x80)
144 3 dispram[0]++;
145 3 }
146 2 }
147 1 else
148 1 ;
149 1 if(k1==k2)flag=0;
150 1 else flag=1;
151 1
152 1 }
153
154
155 void WriteSegData(unsigned char seg)
156 {
157 1 seg = seg & 0x7F;
158 1 /* 越界判斷,并查找對應的段碼 */
159 1 if(seg > 20)
160 1 seg = 20;
161 1 seg = seg_code[seg];
162 1 /* 小數點 */
163 1 if(seg & 0x80)
164 1 seg |= 0x80;
165 1 /* 將段碼數據送到數據總線上 */
166 1 P0 = seg;
167 1 /* 等待數據穩定 */
168 1 _nop_();
169 1 _nop_();
170 1 /* P2.5-P2.7 = 000, 控制138譯碼器,使片選信號CS0=0 */
171 1 P2 &= 0x1F;
172 1 /* 延時,維持CS0為低電平 */
173 1 _nop_();
174 1 _nop_();
175 1 /* P2.5-P2.7 = 111, CS0=1, 產生上升延脈沖,將數據總線上的數據鎖存 */
176 1 P2 |= 0xE0;
177 1 }
178
179 /**************************************
C51 COMPILER V7.20 POWER2 10/31/2008 20:10:50 PAGE 4
180 說明: 寫位選數據
181 cs: cs低四位為位選位,1: 有效,0: 無效
182 **************************************/
183 void WriteCsData(unsigned char cs)
184 {
185 1 /* 低四位有效,屏蔽高四位 */
186 1 cs &= 0x0F;
187 1 /* cs信號為低有效,將cs反向后送入數據總線 */
188 1 P0 = ~cs;
189 1 /* 等待數據穩定 */
190 1 _nop_();
191 1 _nop_();
192 1 /* P2.5 = 0, P2.6-P2.7 = 0, 控制138譯碼器,使片選信號CS1 = 0 */
193 1 P2 &= 0x3F;
194 1 /* 延時,維持CS1為低電平 */
195 1 _nop_();
196 1 _nop_();
197 1 /* P2.5-P2.7 = 111, CS0=1, 產生上升延脈沖,將數據總線上的數據鎖存 */
198 1 P2 |= 0xE0;
199 1 }
200
201
202 void delay1(unsigned int us)
203 {
204 1 while(us--);
205 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 381 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 2
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -