📄 v.lst
字号:
C51 COMPILER V7.08 V 03/08/2009 20:48:41 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE V
OBJECT MODULE PLACED IN v.OBJ
COMPILER INVOKED BY: f:\Keil\C51\BIN\C51.EXE v.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include<intrins.h> //调用_nop_()延时函数用
3 #define ad_con P2 //0809的控制口?
4 #define addata P0 //0809的数据口
5 #define disdata P1 //数码管的字段码码输出口
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 uchar num=0x00; //存放单通道显示时的当前通道数
10
11 sbit ALE=P2^3; //0809的地址锁存信号
12 sbit START=P2^4; //0809的启动信号
13 sbit OE=P2^5; //0809的输出允许信号
14 sbit KEY1=P3^5; //循环或单路显示选择按键
15 sbit KEY2=P3^6; //通道选择?按键
16 sbit EOC=P3^7; //0809的转换结束?信号
17 sbit DISX=disdata^7; //小数点位
18 sbit FLAG=PSW^0; //循环或单路显示标志位
19 uchar code dis_7[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //LED数码管的字段码
20 uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //4个LED数码管的位选码
21 uchar data ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //0809的8个通道转换数据缓冲区
22 uchar data dis[5]={0x00,0x00,0x00,0x00,0x00}; //显示缓冲区
23
24 delay1ms(uint t) //1ms延时子函数
25 {uint i,j;
26 1 for(i=0;i<t;i++)
27 1 for(j=0;j<120;j++);
28 1 }
29
30
31 keytest() //检测按键子函数
32 { if(KEY1==0) //检测循环或单路选择按键是否按下
33 1 {FLAG=!FLAG; //标志位取反 ,循环,单路显示切换
34 2 while(KEY1==0);
35 2 }
36 1 if(FLAG==1) //单路显示方式时,检测通道选择按键是否按下
37 1 { if(KEY2==0)
38 2 {num++;
39 3 if(num==8)
40 3 {num=0;}
41 3 while(KEY2==0);
42 3 }
43 2 }
44 1 }
45 scan() //显示扫面子函数
46 {
47 1 uchar k,n;
48 1 int h;
49 1 if(FLAG==0) //循环显示子程序
50 1 {dis[3]=0x00; //通道值清0
51 2 for(n<0;n<8;n++) //8路通道循环8次
52 2 {dis[2]=ad_data[n]/51; //当前 通道数据转换为BCD码 ?
53 3 dis[4]=ad_data[n]%51;
54 3 dis[4]=dis[4]*10;
55 3 dis[1]=dis[4]/51;
C51 COMPILER V7.08 V 03/08/2009 20:48:41 PAGE 2
56 3 dis[4]=dis[4]%51;
57 3 dis[4]=dis[4]*10;
58 3 dis[0]=dis[4]/51;
59 3 for(h=0;h<500;h++) //每个通道显示时间控制为1s
60 3 {
61 4 for(k=0;k<4;k++) //4位LED扫描显示
62 4 {
63 5 disdata=dis_7[dis[k]];
64 5 if(k==2)
65 5 {DISX=0;}
66 5 P3=scan_con[k];
67 5 delay1ms(1);
68 5 P3=0xff;
69 5 }
70 4 }
71 3 dis[3]++; //通道值加1
72 3 keytest(); //检测按键
73 3 }
74 2 }
75 1 if(FLAG==1) //单路显示子程序
76 1 {
77 2 dis[3]=num; //当前通道数送通道显示位
78 2 for(k=0;k<4;k++) //4位LED扫描显示
79 2 {disdata=dis_7[dis[k]];
80 3 if(k==2)
81 3 {DISX=0;}
82 3 P3=scan_con[k];
83 3 delay1ms(1);
84 3 P3=0xff;
85 3 }
86 2 keytest(); //检测按键
87 2 }
88 1 }
89
90 test() //ADC0809转换子函数
91 { uchar m;
92 1 uchar s=0x00; //初始通道为0;
93 1 ad_con=s; //第一通道地址送0809控制口
94 1 for(m=0;m<8;m++)
95 1 {ALE=1;_nop_();_nop_();ALE=0; //锁存通道地址
96 2 START=1;_nop_();_nop_();START=0; //启动转换
97 2 _nop_();_nop_();_nop_();_nop_();
98 2 while(EOC==0); //等待转换结束
99 2 OE=1;ad_data[m]=addata;OE=0; //读取当前通道转换数据
100 2 s++;ad_con=s; //改变通道地址
101 2 }
102 1 ad_con=0x00; //通道地址恢复初值
103 1 }
104
105 main() //主函数
106 {P0=0xff; //初始化端口
107 1 P2=0x00;
108 1 P1=0xff;
109 1 P3=0xff;
110 1 while(1)
111 1 {test();
112 2 scan();
113 2 }
114 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.08 V 03/08/2009 20:48:41 PAGE 3
CODE SIZE = 310 ----
CONSTANT SIZE = 15 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 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 + -