📄 max147.lst
字号:
C51 COMPILER V7.06 MAX147 08/08/2007 17:32:12 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAX147
OBJECT MODULE PLACED IN MAX147.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE MAX147.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include"reg51.h"
2 #include"intrins.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5 #define nop() _nop_()
6 #define WEI P2
7 #define DUAN P0
8
9 code uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };
10 data uchar Disp_Data[4]={0,0,0,0};
11 idata uint D_Temp[10]={0,0,0,0,0,0,0,0,0};
12 idata float D_Temp1[10]={0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0};
13 sbit START=P3^2;
14 /*************变量定义******************/
15 float Vref=2.5;
16 bit End_Flag=0;
17 /*************函数声明******************/
18 void delay(uchar j);//
19 void Data_Process(void);
20 void led_display(void);
21 void Wr_Contrl_Byte(uchar CB);
22 /**************************************/
23 sbit SCLK = P1^0; //串行时钟
24 sbit CS = P1^1; //片选端
25 sbit DIN = P1^2; //串行数据输入
26 sbit SSTRB = P1^3; //输出闸门
27 sbit DOUT = P1^4; //串行数据输出
28
29 /***************************************/
30 void delay(uchar j)
31 { register i;
32 1 while(j--)
33 1 {
34 2 for(i=0;i<125;i++)
35 2 {;}
36 2 }
37 1 }
38 /***************************************/
39 void Wr_Contrl_Byte(uchar CB)
40 {
41 1 uchar i;
42 1 CS=0;
43 1 for(i=0;i<8;i++)
44 1 {
45 2 SCLK=0;
46 2 DIN=0;
47 2 if((CB<<i)&0x80)DIN=1;
48 2 SCLK=1;
49 2 nop();
50 2 nop();
51 2 nop();
52 2 }
53 1 CS=1;
54 1 }
55
C51 COMPILER V7.06 MAX147 08/08/2007 17:32:12 PAGE 2
56 /***************************************/
57 uint Re_Data(void)
58 {
59 1 uint Con_Data=0;
60 1 uchar i;
61 1 CS=0;
62 1 Con_Data=0;
63 1 DOUT=1;
64 1 for(i=0;i<12;i++)
65 1 {
66 2 SCLK=0;
67 2 nop();
68 2 nop();
69 2 nop();
70 2 SCLK=1;
71 2 Con_Data<<=1;
72 2 if(DOUT)
73 2 {Con_Data|=0x01;}
74 2 }
75 1 CS=1;
76 1 return Con_Data;
77 1 }
78 /***************************************/
79 void Data_Process(void)
80 {
81 1 uchar i;
82 1 float tt;
83 1 uint dispnumber;
84 1 if(End_Flag)
85 1 {
86 2 for(i=0;i<10;i++)
87 2 {
88 3 D_Temp1[i]=2.0*(D_Temp[i]*Vref)/4095.0;
89 3 }
90 2
91 2 tt=(D_Temp1[0]+D_Temp1[1]+D_Temp1[2]+D_Temp1[3]+D_Temp1[4]+D_Temp1[5]+D_Temp1[6]+D_Temp1[7]+D_Temp1[8]+D
-_Temp1[9])/10.0;
92 2 //计算数字量对应的电压值(单极性×2)
93 2 tt*=1000.0; //电压放大1000倍,显示到
94 2 dispnumber=(uint)tt;
95 2 Disp_Data[0]=dispnumber/1000;
96 2 Disp_Data[1]=dispnumber%1000/100;
97 2 Disp_Data[2]=dispnumber%1000%100/10;
98 2 Disp_Data[3]=dispnumber%1000%100%10;
99 2 End_Flag=0;
100 2 }
101 1 }
102 /**************************************/
103 void led_display(void)
104 {
105 1 uchar i,j,k;
106 1 uchar *p,*q;
107 1 p=&Disp_Data[0];
108 1 q=display;
109 1 k=0x08;
110 1 for(i=0;i<4;i++)
111 1 {
112 2 WEI=k;
113 2 j=*(p+i);
114 2 DUAN=*(q+j);
115 2 if(i==0)
116 2 {DUAN|=0x80;}
C51 COMPILER V7.06 MAX147 08/08/2007 17:32:12 PAGE 3
117 2 k>>=1;
118 2 delay(1);
119 2 }
120 1 }
121
122 /**************************************/
123 void main(void)//主程序
124 {
125 1 TH0=(65536-10000)/256;
126 1 TL0=(65536-10000)%256;
127 1 TMOD=0x01;
128 1 ET0=1;
129 1 EA=1;
130 1
131 1 while(1)
132 1 { if(!START)
133 2 {
134 3 delay(5);
135 3 while(!START);
136 3 TR0=1;
137 3 }
138 2 Data_Process();
139 2 led_display();
140 2 }
141 1 }
142
143
144 void timer0(void)interrupt 1
145 {
146 1 static uchar cnt;
147 1 TH0=(65536-10000)/256;
148 1 TL0=(65536-10000)%256;
149 1 Wr_Contrl_Byte(0xce); //10001110:通道0,单极单端输入,内部时钟模式
150 1 D_Temp[cnt]=Re_Data();
151 1 cnt++;
152 1 if(cnt==10)
153 1 {
154 2 cnt=0;
155 2 End_Flag=1;
156 2 TR0=0;
157 2 }
158 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 597 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 13
IDATA SIZE = 60 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -