📄 text1.lst
字号:
C51 COMPILER V7.50 TEXT1 01/20/2007 20:05:56 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: AD0832测试程序 *
3 * 日期: 2007-1-1 *
4 * 版本: 1.0 *
5 * 作者: 微控电子 - Caai *
6 * 邮箱: microcontroller@163.com *
7 * QQ : 676371312 *
8 ********************************************************************************
9 * 描述: *
10 * 双通道ADC转换,按S1键切换 *
11 * *
12 ********************************************************************************
13 * 跳线设置:J56 从左向右数第3.4.5短接 J1从左向右数第5.6.7短接 *
14 * J11为第二通道的AD输入端 可自行接入5V以内的电压进行测量实现 *
15 * *
16 * *
17 ********************************************************************************
18 * 【版权】 Copyright(C)微控电子 All Rights Reserved *
19 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
20 *******************************************************************************/
21 #include <reg52.h> // 引用标
22 #include <intrins.h>
23
24 #define uchar unsigned char
25 #define uint unsigned int
26
27 #define NoOp 0x00 // 空操作寄存器
28 #define Digit0 0x01 // 数码管1寄存器
29 #define Digit1 0x02 // 数码管2寄存器
30 #define Digit2 0x03 // 数码管3寄存器
31 #define Digit3 0x04 // 数码管4寄存器
32 #define Digit4 0x05 // 数码管5寄存器
33 #define Digit5 0x06 // 数码管6寄存器
34 #define Digit6 0x07 // 数码管7寄存器
35 #define Digit7 0x08 // 数码管8寄存器
36 #define DecodeMode 0x09 // 译码模式寄存器
37 #define Intensity 0x0a // 亮度寄
38
39 #define ScanLimit 0x0b // 扫描位数寄存器
40 #define ShutDown 0x0c // 低功耗模式寄存
41 #define DisplayTest 0x0f // 显示测试寄存器
42 #define ShutdownMode 0x00 // 低功耗方式
43 #define NormalOperation 0x01 // 正常操作方式
44 #define ScanDigit 0x02 // 扫描位数设置,
45 #define DecodeDigit 0xff // 译码设置,8位均
46 #define IntensityGrade 0x0a // 亮度级别设置
47
48 #define TestMode 0x01 // 显示测试模式
49 #define TextEnd 0x00 // 显示测试结束,
50
51 sbit DIN = P2^4; // 串行数据输入
52 sbit CLK = P2^5; // 串行时钟
53 sbit LOAD = P2^3; // 显示数据锁存控制
54
55 #define _TH0_TL0_ (65536 - 50000)
C51 COMPILER V7.50 TEXT1 01/20/2007 20:05:56 PAGE 2
56 #define HI (_TH0_TL0_ / 256) //给高8位赋值
57 #define LO (_TH0_TL0_ % 256) //给低8位赋值
58 #define M 20 //(1000/50)1秒要50个中断的累计
59
60 sbit P2_0 = P2 ^ 0;
61 sbit P2_1 = P2 ^ 1;
62 sbit P2_2 = P2 ^ 2;
63
64 sbit P3_2 = P3 ^ 2;
65 sbit P1_5 = P1 ^ 5;
66 sbit P1_6 = P1 ^ 6;
67 sbit P1_7 = P1 ^ 7;
68
69 #define _rrca_() CY = ACC & 0x01 //产生RRC A指令
70 #define _rlca_() CY = ACC & 0x80 //产生RLC A指令
71 #define bADcs P1_5
72 #define bADcl P1_6
73 #define bADda P1_7
74 #define key P1^0
75
76
77 unsigned char ucCH0;
78 bit bAD_ok; //AD转换完成
79 unsigned char code dx58[3] _at_ 0x3b;//保留0x3b开始的3个字节
80 unsigned char cycle,g;
81 bit choose = 0,flag_key = 1;
82 float x;
83 unsigned int a = 0, b = 0, c = 0,t = 0;
84 unsigned char i = 0x00;
85 unsigned char hour,min;
86 unsigned char LEDData1[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
87 unsigned char code LEDData2 [] = {0x40, 0x79, 0x24,
88 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //0.-9.LED数值
89
90 /* 延时t毫秒 */
91 void delay_ms(uint t)
92 {
93 1 uint i;
94 1 while(t--)
95 1 {
96 2 /* 对于12M时钟,约延时1ms */
97 2 for (i=0;i<125;i++)
98 2 {}
99 2 }
100 1 }
101
102 /* 向MAX7219写入字节(8位)*/
103 void SendChar (uchar ch)
104 {
105 1 uchar i,temp;
106 1 _nop_();
107 1 for (i=0;i<8;i++)
108 1 {
109 2 temp=ch&0x80;
110 2 ch=ch<<1;
111 2 if(temp)
112 2 {
113 3 DIN=1;
114 3 CLK=0;
115 3 CLK=1;
116 3 }
117 2 else
C51 COMPILER V7.50 TEXT1 01/20/2007 20:05:56 PAGE 3
118 2 {
119 3 DIN=0;
120 3 CLK=0;
121 3 CLK=1;
122 3 }
123 2 }
124 1 }
125
126 /* 向MAX7219写入字(16位)*/
127 void WriteWord (uchar addr,uchar num)
128 {
129 1 LOAD=0;
130 1 _nop_();
131 1 SendChar(addr);
132 1 _nop_();
133 1 SendChar(num);
134 1 _nop_();
135 1 LOAD=1; // 锁存进相应寄存器
136 1 }
137
138 /* MAX7219初始化 */
139 void InitDisplay (void)
140 {
141 1 WriteWord (ScanLimit,ScanDigit); // 设置扫描界限
142 1 WriteWord (DecodeMode,DecodeDigit); // 设置译码模式
143 1 WriteWord (Intensity,IntensityGrade); // 设置亮度
144 1 WriteWord (ShutDown,NormalOperation); // 设置为正常工作模式
145 1 }
146
147 /*********************************************************************************************/
148 void Delay(unsigned char a)//延时程序
149 {
150 1 unsigned char j;
151 1 while(--a != 0)
152 1 {
153 2 for (j = 0; j < 125; j++);
154 2 }
155 1 }
156
157 /*********************************************************************************************/
158 void Disp(void)//数码管显示
159 {
160 1 WriteWord (Digit0,c);
161 1 WriteWord (Digit1,b);
162 1 WriteWord (Digit2,(0xf0+a));
163 1 }
164 /********************************************************************************************/
165 void IsrTimer0(void) interrupt 1 using 1 //定时器0中断服务程序
166 {
167 1 static unsigned char count = 0; //定义静态变量count
168 1 // g = (~P3)&0x01;
169 1 TR0 = 0; //以下调整出栈入栈的时间误差
170 1 TL0 += (_TH0_TL0_ + 9) % 256;
171 1 TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
172 1 TR0 = 1;
173 1
174 1 count++;
175 1 if(count == 8)
176 1 {
177 2 count = 0;
178 2 bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.
179 2 bADcl = 0;
C51 COMPILER V7.50 TEXT1 01/20/2007 20:05:56 PAGE 4
180 2 bADda = 1;//在第1 个时钟脉冲的下沉之前DI端必须是高电平.
181 2 bADcl = 1;
182 2 bADcl = 0;//pulse 1 down
183 2 // bADda = 1;
184 2
185 2 bADcl = 1; bADcl = 0;//pulse 2 down
186 2 if(choose == 0)
187 2 bADda = 0;
188 2 else
189 2 bADda = 1;
190 2 bADcl = 1; bADcl = 0;//pulse 3 down
191 2
192 2 for(cycle = 8; cycle > 0; cycle-- )
193 2 {
194 3 bADda = 1;
195 3 bADcl = 1; bADcl = 0;//pulse
196 3 CY = bADda;
197 3 _rlca_(); //RRC A
198 3 }
199 2 B = ACC;
200 2 for(cycle = 8; cycle > 0; cycle-- )
201 2 {
202 3 bADda = 1;
203 3 bADcl = 1; bADcl = 0;//pulse
204 3 CY = bADda;
205 3 _rrca_(); //RLC A
206 3 }
207 2 if( ACC == B )
208 2 {
209 3 ucCH0 = B;
210 3 //P1_5 = 0; //指示灯亮
211 3 bAD_ok = 1;
212 3 }
213 2 bADcs = 1;//当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束
214 2
215 2 x = B/51.0;
216 2 a = x;
217 2 b = x*10 - a*10;
218 2 c = (x*100 - a*100 -b*10);
219 2 }
220 1
221 1 if(flag_key == 1)
222 1 {
223 2 if(P3_2 == 0)
224 2 {
225 3 Delay(8);
226 3 if(P3_2 == 0)
227 3 {
228 4 choose = ~choose;
229 4 }
230 3 }
231 2 }
232 1 if(P3_2 == 0)
233 1 flag_key = 0;
234 1 else
235 1 flag_key = 1;
236 1
237 1 }
238
239 /******************************************************************************************/
240 void Timer0Init(void) //初始化定时器0程序
241 {
C51 COMPILER V7.50 TEXT1 01/20/2007 20:05:56 PAGE 5
242 1 TMOD = 0x01; //设置模式1 定时器0 工作方式0
243 1
244 1 TH0 = HI; //给TH0,TL0赋初始值
245 1 TL0 = LO;
246 1
247 1 TR0 = 1; //启动定时器0
248 1 ET0 = 1; //定时器中断开
249 1 EA = 1; //总中断开
250 1 }
251
252 /******************************************************************************************/
253 void main(void)//主函数
254 {
255 1 Timer0Init();//初始化定时器0
256 1 InitDisplay (); // MAX7219初始化
257 1
258 1 WriteWord(DisplayTest,TestMode); // 开始显示测试,点亮所有LED
259 1 delay_ms(1000); // 延时约3s
260 1 WriteWord (DisplayTest,TextEnd); // 退出显示测试模式
261 1 WriteWord (Digit3,0xff);
262 1 WriteWord (Digit4,0xff);
263 1 WriteWord (Digit5,0xff);
264 1 WriteWord (Digit6,0xff);
265 1 WriteWord (Digit7,0xff);
266 1 while(1)
267 1 {
268 2 Disp();
269 2 }
270 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 596 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 29 ----
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 + -