📄 adc0804.lst
字号:
C51 COMPILER V8.05a ADC0804 02/24/2009 11:35:15 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE ADC0804
OBJECT MODULE PLACED IN adc0804.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE adc0804.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*****************************************************************/
2 /* */
-
3 /*名称: AD转换+显示程序 */
-
-
4 /*功能: 读取当前输入的转换电压,由数码管显示出来。 */
-
5 /*难度等级: 中 */
-
6 /* 作者: zengrenliang */
7 /* 版权: http://www.51kaifa.com */
8 /*编写日期: 2006.05.19 */
-
-
9 /*****************************************************************/
10
11
12 #include<reg52.h>
13 #define uchar unsigned char
14
15 sbit LED_Disp = P3^3;//显示段码锁存信号
16 sbit Read_AD = P3^5;//P0扩展锁存信号,用于读键选通
17 //行扫描数组
18 uchar code scan[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//row0--row7
19 //数码管显示的段码表
20 uchar code table[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//0,1,2,3,4,5
21 0x82,0xf8,0x80,0x90,0x88,0x83,//6,7,8,9,a,b
22 0xc6,0xa1,0x86,0x8e,0xbf,0xff};//c,d,e,f,-,空格
23
24 uchar dispbuf[8]; //显示缓冲区
25
26 /*****************************延时函数**************************/
27
28 void delay (unsigned int us)
29 {
30 1 while(us--);
31 1 }
32
33 /******************************显示+读键*************************/
34
35 void ledscan()
36 { unsigned char i,dispcode;
37 1
38 1 for(i=0;i<8;i++){
39 2 LED_Disp =0;
40 2 dispcode =table[dispbuf[i]]; //取一行显示数据
41 2 LED_Disp =1;
42 2 if(i==2)
43 2 P0 = dispcode & 0x7f;
44 2 else
45 2 P0 = dispcode;
46 2 P2 = scan[i];//取row0--row7行扫描数据
47 2 delay(50); //延时50us
48 2 P2 = 0xff;
C51 COMPILER V8.05a ADC0804 02/24/2009 11:35:15 PAGE 2
49 2 }
50 1 }
51
52
53 /*******************0804转换程序********************/
54 void ADC0804(void)
55 { uchar adc0804value;
56 1 float voltage,decimal;
57 1 unsigned int intvolt,tofloat;
58 1 Read_AD = 0;
59 1 P1 = 0xbf;
60 1 Read_AD = 1;//片选ADC0804
61 1 P0 = 0xff;//向ADC0804发任何数据,0804开始转换
62 1 WR = 0;//向ADC0804写数据
63 1 WR = 1;
64 1 delay(100);//等待转换完成
65 1 RD = 0;
66 1 adc0804value=P0;//读取转换后的值
67 1 RD = 1;
68 1 Read_AD = 0;
69 1 P1 = 0xff;
70 1 Read_AD = 1;
71 1 voltage = adc0804value;
72 1 voltage = voltage * 0.0391;//将二进制字节数据变成实际电压值 10/256 = 0.0196
73 1 intvolt = voltage;//取整数部分
74 1 tofloat = intvolt;
75 1 decimal = voltage - tofloat;//取小数部分
76 1 decimal = decimal * 100;//小数部分取两位
77 1 dispbuf[2] = intvolt % 0x0a;//整数部分个位
78 1 intvolt = decimal;
79 1 dispbuf[4] = intvolt % 0x0a;//小数部分低位
80 1 intvolt = intvolt / 0x0a;
81 1 dispbuf[3] = intvolt % 0x0a;//小数部分高位
82 1 }
83
84
85 /*******************************主函数***********************/
86
87 main()
88 { uchar i;
89 1 Read_AD = 0;
90 1 P1 = 0xff;
91 1 Read_AD = 1;
92 1 P1 = 0x40;//点亮A/D转换指示灯
93 1 for(i=0;i<8;i++)
94 1 dispbuf[i] = 17;
95 1 while(1){
96 2 for(i=0;i<10;i++)
97 2 ledscan(); //显示,读键扫描
98 2 ADC0804();
99 2 }
100 1 }
101
102 /********************************结束************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 296 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 11
C51 COMPILER V8.05a ADC0804 02/24/2009 11:35:15 PAGE 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -