📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 07/26/2008 19:16:14 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe main.c DB OE BR
line level source
1 #include"main.h"
2
3
4
5 #define DEPTH 80 //存储深度设置
6
7
8 /********************************************
9 函数声明
10 *********************************************/
11 void Ext0_Interrupt_Init(void);
12 void GetChannel(void);
13 void PlaceWindow(void);
14
15
16
17 /*********************************************
18 全局变量定义
19 *********************************************/
20 //unsigned char xdata trig_word[8]; //触发字
21 //unsigned char trig_ch; //3级触发时的触发通道
22 //unsigned char thresholdW; //门限电压
23 unsigned char xdata buf[8]; //用作临时存储
24 unsigned char xdata ch[2]; //存储触发通道号
25 unsigned char xdata ADC_data[8];
26
27
28
29
30 void main(void)
31 {
32 1 unsigned char i;
33 1
34 1 Init_Device();
35 1 Init_Max7219();
36 1
37 1 Show_Max7219(0000,0000);
38 1
39 1 showScreen(); //用户接口,读取控制字
40 1
41 1
42 1 SFRPAGE = TIMER01_PAGE;
43 1 TR0 = 0; //关Timer0
44 1
45 1 GetChannel();
46 1 Set_Threshold(thresholdW); //设置门限电压
47 1 FIFO_Init(); //FIFO初始化
48 1 Ext0_Interrupt_Init(); //外部中断初始化
49 1
50 1
51 1
52 1 while(FIFO_length()!=40) {}
53 1
54 1 if(FIFO_length()==40)
55 1 {
C51 COMPILER V8.02 MAIN 07/26/2008 19:16:14 PAGE 2
56 2 SFRPAGE = TIMER01_PAGE;
57 2 EA = 0; //关所有外部中断
58 2 PlaceWindow(); //放置fifowindow
59 2
60 2 while((uart_keyboard())==0x0000){} //等待按键
61 2 keyW = uart_keyboard();
62 2 if(keyW==0x4000)
63 2 {
64 3 for(i=0;i<8;i++)
65 3 Write_Max7219(8-i,fifowindow[i][time_flag]);
66 3 DisplayLogicWave(1);
67 3 PlaceWindow();
68 3 for(i=0;i<8;i++)
69 3 Write_Max7219(8-i,fifowindow[i][time_flag]);
70 3 DisplayLogicWave(65535);
71 3 }
72 2
73 2 else if((keyW==0x2000)||(keyW==0x1000))
74 2 {
75 3 while(1)
76 3 {
77 4 for(i=0;i<8;i++)
78 4 Write_Max7219(8-i,fifowindow[i][time_flag]);
79 4 DisplayLogicWave(1);
80 4 while((uart_keyboard())==0x0000){} //等待按键
81 4 keyW = uart_keyboard();
82 4 if(keyW==0x1000)
83 4 {
84 5 time_flag++;
85 5 for(i=0;i<8;i++)
86 5 Write_Max7219(8-i,fifowindow[i][time_flag]);
87 5 DisplayLogicWave(1);
88 5 }
89 4 if(keyW==0x2000)
90 4 {
91 5 time_flag--;
92 5 for(i=0;i<8;i++)
93 5 Write_Max7219(8-i,fifowindow[i][time_flag]);
94 5 DisplayLogicWave(1);
95 5 }
96 4 }
97 3 }
98 2 else
99 2 {
100 3 while(1)
101 3 {
102 4 for(i=0;i<8;i++)
103 4 Write_Max7219(8-i,fifowindow[i][time_flag]); //在数码管上显示
104 4 DisplayLogicWave(65535);
105 4 } //在示波器上显示
106 3 }
107 2
108 2 }
109 1
110 1
111 1
112 1 }
113
114 /******************************************
115 外部中断初始化
116 ******************************************/
117 void Ext0_Interrupt_Init(void)
C51 COMPILER V8.02 MAIN 07/26/2008 19:16:14 PAGE 3
118 {
119 1 char SFRPAGE_SAVE = SFRPAGE;
120 1
121 1 SFRPAGE = TIMER01_PAGE;
122 1
123 1 TCON = 0x01; // /INT 0 are falling edge triggered
124 1
125 1 EX0 = 1; // Enable /INT0 interrupts
126 1
127 1 EA = 1; // Enable all interrupts
128 1
129 1 SFRPAGE = SFRPAGE_SAVE;
130 1 }
131
132 /*******************************************
133 将trig_ch转换为ch[2]
134 *******************************************/
135 void GetChannel(void)
136 {
137 1 unsigned char i,j;
138 1
139 1 j = 0;
140 1
141 1 for(i=0;i<8;i++)
142 1 {
143 2 if((trig_ch>>i)&0x01)
144 2 {
145 3 ch[j] = i;
146 3 j++;
147 3 }
148 2 }
149 1 }
150
151 /*******************************************
152 INT0服务函数,将数据按控制字要求采集到fifo中
153 ********************************************/
154 void GetLogic(void) interrupt 0
155 {
156 1 static unsigned char wflag,a; //写FIFO标志,置1时写FIFO
157 1 // static unsigned char jflag = 1; //判断标志,置1时判断采到的数据是否与触发字相同
158 1 // static unsigned char len; //写入FIFO的数据量
159 1 unsigned char i,k = 0,m = 0,h; //k:始端触发 识别单级触发字时计数
160 1 //a:识别三级触发字时计数
161 1 //m:非始端触发 识别单级触发字时计数
162 1
163 1
164 1
165 1
166 1 //采8个通道的逻辑值
167 1 //////////////////////////////////////////
168 1
169 1 SFRPAGE = ADC2_PAGE;
170 1
171 1 EIP2|=0x10;
172 1
173 1 AMX2SL = 0;
174 1 AD2INT = 0;//清转换中断标志
175 1 AD2BUSY = 1;//置1启动ADC2
176 1
177 1 for(i=0;i<7;i++)
178 1
179 1
C51 COMPILER V8.02 MAIN 07/26/2008 19:16:14 PAGE 4
180 1
181 1 ADC_data[AMX2SL] = AD2WINT; //AD2WINT;
182 1 AD2WINT = 0;
183 1
184 1 do
185 1 {
186 2 AMX2SL++;
187 2 AD2INT = 0;//清转换中断标志
188 2 AD2BUSY = 1;//置1启动ADC2
189 2 for(i=0;i<7;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -