?? max1870.lst
字號:
C51 COMPILER V8.06 MAX1870 08/17/2008 09:54:50 PAGE 1
C51 COMPILER V8.06, COMPILATION OF MODULE MAX1870
OBJECT MODULE PLACED IN max1870.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE max1870.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************/
2 //*********************************************************************/
3 #include<reg52.h>
4 #include<intrins.h>
5 //#include<stdio.h>
6 #include<math.h>
7 //extern float pow (float x, float y); //用到pow函數
8 #define uint unsigned int
9 #define uchar unsigned char
10 /*******************max187連線圖********************/
11 sbit CS=P2^1; //max187片選
12 sbit CLK=P2^0; //max187時鐘脈沖
13 sbit SDOUT=P2^2; //max187數據輸出口,返回給AT89S51
14 /*************LCD1602連線圖**********************/
15 sbit RS=P1^2; //數據\命令選擇
16 sbit RW=P1^1; //讀\寫選擇
17 sbit E=P1^0; //使能端
18 /*************變量定義********************/
19 //由于存放時數據范圍的不同,要注意各變量的類型
20 uint num=0,temp,x=0;
21 uchar i,xx,ge,fen1,fen2,fen3,t0; //用在對數據的處理
22 uint table[12]={0,0,0,0,0,0,0,0,0,0,0,0}; //暫存max187讀回的二進制數
23 /*****************************/
24 /*延遲子程序.可運用于整個程序
25 /*****************************/
26 void delay(uint z)
27 {
28 1 uint x,y;
29 1 for(x=z;x>0;x--)
30 1 for(y=110;y>0;y--);
31 1 }
32 /********************************/
33 /*max187子程序
34 /********************************/
35 /***************max187begin************/
36 void read_max187(void)
37 {
38 1 // uint count=0;
39 1 CS=1;
40 1 CLK=0;
41 1 CS=0; // 片選低電平,開始轉換
42 1 // while(SDOUT==0);
43 1 for(i=0;i<8;i++) //延遲,等待轉換結束
44 1 {
45 2 _nop_();
46 2 }
47 1 CLK=1;
48 1 CLK=0;
49 1 xx=SDOUT;
50 1 // count=count^xx;
51 1 table[0]=xx; //將讀回的數值存入table數組,便于后面進行的數制轉換的處理
52 1 for(i=0;i<11;i++)
53 1 {
54 2 CLK=1;
55 2 CLK=0;
C51 COMPILER V8.06 MAX1870 08/17/2008 09:54:50 PAGE 2
56 2 // count=count<<1;
57 2 xx=SDOUT;
58 2 // count=count^xx;
59 2 table[i+1]=xx;
60 2 } //運用完12次,存入12位二進制數
61 1 CLK=1;
62 1 CLK=0;
63 1 CS=1; //讀完數據,片選拉高
64 1 // return count;
65 1 }
66 /*********************max187end******************/
67 /******************************************/
68 /*將max187返回的二進制轉換為十進制,由LCD顯示
69 /******************************************/
70 uint change_code(void)
71 { float j;
72 1 read_max187();
73 1
74 1 for(i=0,j=11;i<12,j>=0;j--,i++)
75 1 {
76 2 x=table[i]*pow( 2, j);
77 2 num+=x;
78 2 }
79 1
80 1 /* x=table[0]*2048; //最高位
81 1 num=num+x; //由num進行十進制數值的累加
82 1
83 1 x=table[1]*1024; //次高位
84 1 num=num+x;
85 1
86 1 x=table[2]*512; //第十位
87 1 num=num+x;
88 1
89 1 x=table[3]*256;
90 1 num=num+x;
91 1
92 1 x=table[4]*128;
93 1 num=num+x;
94 1
95 1 x=table[5]*64;
96 1 num=num+x;
97 1
98 1 x=table[6]*32;
99 1 num=num+x;
100 1
101 1 x=table[7]*16;
102 1 num=num+x;
103 1
104 1 x=table[8]*8;
105 1 num=num+x;
106 1
107 1 x=table[9]*4; //第三位
108 1 num=num+x;
109 1
110 1 x=table[10]*2; //次低位
111 1 num=num+x;
112 1
113 1 x=table[11]*1; //最低位
114 1 num=num+x;
115 1
116 1 */
117 1 return num; //num累加得最后要顯示的十進制數值,做為函數的返回值
C51 COMPILER V8.06 MAX1870 08/17/2008 09:54:50 PAGE 3
118 1 }
119 /*******************************/
120 /*LCD1602子程序
121 /*******************************/
122 /*********LCD1602begin*******/
123 void write_com(uchar com) //寫命令子函數
124 {
125 1 RS=0;
126 1 P0=com;
127 1 RW=0;
128 1 delay(5);
129 1 E=1;
130 1 delay(5);
131 1 E=0;
132 1 }
133 void write_data(uchar date) //寫數據子函數
134 {
135 1 RS=1;
136 1 P0=date;
137 1 RW=0;
138 1 delay(5);
139 1 E=1;
140 1 delay(5);
141 1 E=0;
142 1 }
143 void write_str(uchar add,uchar *str) //從一個地址開始寫字符串
144 {
145 1 write_com(add); //要寫數據的地址
146 1 while(*str!='\0')
147 1 {
148 2 write_data(*str++);
149 2 }
150 1 }
151 void init(void) //LCD初始化函數
152 {
153 1 E=0;
154 1 write_com(0x38); //顯示模式設置
155 1 write_com(0x0c); //顯示ON,顯示光標OFF,光標閃爍OFF
156 1 write_com(0x06); //寫完一個字符,地址指針右移
157 1 write_com(0x01); //清屏
158 1 write_com(0x80+0x00);
159 1 }
160 /*************LCD1602end****************/
161 /*******************************/
162 /*主函數
163 /*******************************/
164 void main(void)
165 {
166 1 TMOD=0x01;
167 1 TH0=(65536-20000)/256;
168 1 TL0=(65536-20000)%256;
169 1 EA=1;
170 1 ET0=1;
171 1 TR0=1;
172 1 init();
173 1 write_str(0x80+1,"Voltage Value");
174 1 write_str(0x80+0x40+6,".");
175 1 write_str(0x80+0x40+10,"V");
176 1 while(1)
177 1 { if(t0==15){ t0=0;
178 3 temp=change_code();
179 3 temp=temp-15;
C51 COMPILER V8.06 MAX1870 08/17/2008 09:54:50 PAGE 4
180 3 ge=temp/1000%10;
181 3 fen1=temp/100%10;
182 3 fen2=temp/10%10;
183 3 fen3=temp%10;
184 3 delay(10);
185 3
186 3 write_com(0x80+0x40+5);
187 3 write_data(0x30+ge);
188 3 delay(5);
189 3 write_com(0x80+0x40+7);
190 3 write_data(0x30+fen1);
191 3 delay(5);
192 3
193 3 write_com(0x80+0x40+8);
194 3 write_data(0x30+fen2);
195 3 delay(15);
196 3 write_com(0x80+0x40+9);
197 3 write_data(0x30+fen3);
198 3 delay(50);
199 3
200 3 num=0;
201 3 temp=0;
202 3 }
203 2 }
204 1 }
205
206 void time0() interrupt 1
207 {
208 1 TH0=(65536-50000)/256;
209 1 TL0=(65536-50000)%256;
210 1 t0++;
211 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 605 ----
CONSTANT SIZE = 19 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 37 7
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 + -