?? adc0832.lst
字號:
C51 COMPILER V7.50 ADC0832 02/05/2006 18:05:41 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE ADC0832
OBJECT MODULE PLACED IN ADC0832.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE ADC0832.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /********************************************************************/
3 /* */
4 /* ME300B單片機開發(fā)系統(tǒng)演示程序 - ADC0832電壓表 */
5 /* */
6 /* 采用三位數(shù)碼管顯示 */
7 /* 參考電壓接至5V電源 */
8 /* 最小輸出電壓:0.00V 最大輸出電壓:5.00V 分辨率:0.02V */
9 /* */
10 /* 郵箱: gguoqing@willar.com */
11 /* 網(wǎng)站: http://www.willar.com */
12 /* 作者: gguoqing */
13 /* 時間: 2006/01/20 */
14 /* */
15 /* */
16 /*【版權(quán)】Copyright(C)偉納電子 www.willar.com All Rights Reserved */
17 /*【聲明】此程序僅用于學(xué)習(xí)與參考,引用請注明版權(quán)和作者信息! */
18 /* */
19 /********************************************************************/
20
21 #include"reg51.h"
22 #include"intrins.h"
23
24 #define uchar unsigned char
25 #define uint unsigned int
26
27 #define disdata P0 //顯示數(shù)據(jù)段碼輸出口
28
29 #define channel_0 0x02 //單通道0輸入選擇
30 #define channel_1 0x03 //單通道1輸入選擇
31
32 sbit ADC_CS = P3^4; //片選端
33 sbit ADC_CLK= P1^0; //時鐘端
34 sbit ADC_DI = P1^1; //數(shù)據(jù)輸入輸出復(fù)用
35 sbit ADC_DO = P1^1; //DI和DO端都接在P1.1
36
37 sbit ACC0=ACC^0; //通道與輸入方式控制字
38 sbit ACC1=ACC^1; //通道與輸入方式控制字
39 sbit DISX=P0^7; //LED小數(shù)點
40
41 uchar code disply[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
42
43 // 0 1 2 3 4 5 6 7 8 9 關(guān)閉
44
45 uchar code dis_scan[3]={0x7f,0xbf,0xdf}; //列掃描控制字
46
47 uint data dis[4]={0x00,0x00,0x00,0x00}; //定義3個顯示數(shù)據(jù)單元和一個數(shù)據(jù)存儲單元
48
49 /********************************************************************/
50 /* */
51 /* 延時函數(shù) */
52 /* */
53 /********************************************************************/
54
55 delay(int ms)
C51 COMPILER V7.50 ADC0832 02/05/2006 18:05:41 PAGE 2
56 {
57 1 int i;
58 1 while(ms--)
59 1 {
60 2 for(i = 0; i< 250; i++)
61 2 {
62 3 _nop_();
63 3 _nop_();
64 3 _nop_();
65 3 _nop_();
66 3 }
67 2 }
68 1 }
69
70 /********************************************************************/
71 /* */
72 /* 啟動ADC轉(zhuǎn)換 */
73 /* */
74 /********************************************************************/
75
76 ADC_start()
77 {
78 1 ADC_CS=1; //一個轉(zhuǎn)換周期開始
79 1 _nop_();
80 1 ADC_CLK=0;
81 1 _nop_();
82 1 ADC_CS=0; //CS置0,片選有效
83 1 _nop_();
84 1 ADC_DI=1; //DI置1,起始位
85 1 _nop_();
86 1 ADC_CLK=1; //第一個脈沖
87 1 _nop_();
88 1 ADC_DI=0; //在負(fù)跳變之前加一個DI反轉(zhuǎn)操作
89 1 _nop_();
90 1 ADC_CLK=0;
91 1 _nop_();
92 1 }
93
94 /********************************************************************/
95 /* */
96 /*AD轉(zhuǎn)換函數(shù) */
97 /*選擇輸入通道,輸入信號的模式《單端輸入,或差分輸入》 */
98 /* */
99 /********************************************************************/
100
101 ADC_read(uchar mode)
102 {
104 1 ADC_start(); //啟動轉(zhuǎn)換開始
105 1 ACC=mode;
106 1 ADC_DI=ACC1; //輸出控制位1,DI=1,單通道輸入,DI=0,差分輸入。
107 1 ADC_CLK=1; //第二個脈沖
108 1 _nop_();
109 1 ADC_DI=0;
110 1 ADC_CLK=0;
111 1 _nop_();
112 1 ADC_DI=ACC0; //輸出控制位0,DI=0,通道0輸入,DI=1,通道1輸入。
113 1 ADC_CLK=1; //第三個脈沖
114 1 _nop_();
115 1 ADC_DI=1;
116 1 ADC_CLK=0; //輸入模式和通道號已經(jīng)選擇完。
117 1
C51 COMPILER V7.50 ADC0832 02/05/2006 18:05:41 PAGE 3
118 1 ADC_CLK=1; //第四個脈沖
119 1 ACC=0;
120 1
121 1 for(i=8;i>0;i--) //讀取8位數(shù)據(jù)
122 1 {
123 2 ADC_CLK=0; //脈沖下降沿
124 2
125 2 ACC=ACC<<1;
126 2 ACC0=ADC_DO; //讀取DO端數(shù)據(jù)
127 2 _nop_();
128 2 _nop_();
129 2 ADC_CLK=1;
130 2 }
131 1 ADC_CS=1; //CS=1,片選無效。
132 1 return(ACC);
133 1 }
134
135 /********************************************************************/
136 /* */
137 /* 數(shù)據(jù)處理與顯示函數(shù) */
138 /* 將采集到的數(shù)據(jù)進(jìn)行16進(jìn)制轉(zhuǎn)換為10進(jìn)制的處理,然后送顯示。 */
139 /* */
140 /********************************************************************/
141
142 show_value(uchar ad_data)
143
144 {
145 1 uchar k;
146 1
147 1 dis[2]=ad_data/51; //AD值轉(zhuǎn)換為3為BCD碼,最大為5.00V。
148 1 dis[3]=ad_data%51; //余數(shù)暫存
149 1 dis[3]=dis[3]*10; //計算小數(shù)第一位
150 1 dis[1]=dis[3]/51;
151 1 dis[3]=dis[3]%51;
152 1 dis[3]=dis[3]*10; //計算小數(shù)第二位
153 1 dis[0]=dis[3]/51; //
154 1
155 1 for(k=0;k<3;k++)
156 1 {
157 2 disdata=disply[dis[k]];
158 2 if(k==2){DISX=0;}
159 2 P2=dis_scan[k];
160 2 delay(1);
161 2 P2=0xff;
162 2 }
163 1 }
164
165 /********************************************************************/
166 /* */
167 /* 主函數(shù) */
168 /* */
169 /********************************************************************/
170 main()
171 {
172 1 uchar i,j;
173 1 while(1)
174 1 {
175 2 i=ADC_read(channel_0);
176 2 for(j=0;j<20;j++)
177 2 {
178 3 show_value(i);
179 3 }
C51 COMPILER V7.50 ADC0832 02/05/2006 18:05:41 PAGE 4
180 2 }
181 1 }
182
183 /********************************************************************/
184 /* */
185 /*將i=ADC_read(channel_0)改為i=ADC_read(channel_1)即可使用JP6輸入 */
186 /* */
187 /********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 256 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 1
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 + -