📄 v.lst
字号:
C51 COMPILER V8.08 V 05/17/2009 13:42:11 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE V
OBJECT MODULE PLACED IN v.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE v.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg51.h>
2 #include"absacc.h"
3 #define lcd_1602_DW XBYTE[0xfdff]
4 #define lcd_1602_CW XBYTE[0xfcff]
5 #define lcd_1602_CR XBYTE[0xfeff]
6 #define lcd_1602_DR XBYTE[0xffff]
7 #define lcd_line_1 0x00
8 #define lcd_line_2 0x40
9 #define LCD_ClEAR_SCREEN 0x01 //清屏
10 #define LCD_AC_UP 0x06 //地址计数器自动+1
11 #define LCD_SET_7 0x38 //工作方式设置8位数据总线接口,双行显示字符,5*7字符
12 #define LCD_SHOW 0x0C //显示开
13 #define uchar unsigned char
14 #define uint unsigned int
15 #define SUM 20
16
17 sbit SD0 = P1^0;
18 sbit CS = P1^2;
19 sbit CLK = P1^3;
20 sbit DIN = P1^1;
21 sbit WAY = P1^7;
22 unsigned long int tmp; //数据类型要注意
23 int i;
24
25
26 //////////判忙函数/////////////////
27 void WHILE_BUSY(void)
28 {
29 1 while((bit)(lcd_1602_CR & 0x80)) ; //读回DB7的值,为DB7=1时则等待 。
30 1 }
31
32
33 void delay(uint x)
34 {
35 1 while(--x);
36 1 }
37
38
39
40 void print0(uchar line,uchar column,uchar da ) //通过LCD1602内部ROM显示字符
41 {
42 1 WHILE_BUSY();
43 1 switch(line)
44 1 {
45 2 case 1:
46 2 lcd_1602_CW = 0x80 + column; //光标定位,即列地址
47 2 delay(10);
48 2 lcd_1602_DW =da; // 显示字符库的内容,数字的高八位编码位0X30
49 2 break;
50 2 case 2:
51 2 lcd_1602_CW = 0xc0 + column; //光标定位
52 2 delay(10);
53 2 lcd_1602_DW =da;
54 2 break;
55 2 default: break;
C51 COMPILER V8.08 V 05/17/2009 13:42:11 PAGE 2
56 2 }
57 1 }
58
59 void Print(uchar *str,uchar addr) // 字符数组显示方法。用于不实时改变的字符
60 {
61 1
62 1 WHILE_BUSY();
63 1 lcd_1602_CW = 0x80|addr; //设置地址。地址范围0--127
64 1 while(*str!='\0')
65 1 {
66 2 WHILE_BUSY();
67 2 lcd_1602_DW = *str;
68 2 str++;
69 2 delay(50);
70 2 }
71 1 }
72 void lcd_1602_Init(void)
73 {
74 1 WHILE_BUSY();
75 1 lcd_1602_CW = LCD_SET_7; //写指令,8位接口,双行显示,5*7字符
76 1 WHILE_BUSY(); //判忙,不忙继续写指令
77 1 lcd_1602_CW = LCD_ClEAR_SCREEN; //清屏
78 1 WHILE_BUSY(); //判忙,不忙继续写指令
79 1 lcd_1602_CW = LCD_AC_UP; //地址计数自动加一
80 1 WHILE_BUSY();
81 1 lcd_1602_CW = LCD_SHOW; //开显示
82 1 }
83
84 /******************1543ADC**********/
85 uint TLC_1543_addr(uchar addr)
86 {
87 1
88 1 uint date_out=0;
89 1 uchar k;
90 1 uchar i;
91 1 uchar j;
92 1 CLK=0;
93 1 CS=0;
94 1 for (i=0;i<4;i++)
95 1 {
96 2 DIN=(bit)(addr&0x08);
97 2 CLK=1;
98 2 CLK=0;
99 2 addr<<=1;
100 2 }
101 1 for (j=0;j<6;j++) //填充6 个CLOCK
102 1 {
103 2 CLK=1;CLK=0;
104 2 }
105 1 CS=1;
106 1 delay(5);
107 1
108 1 CS=0; //等待AD 转换
109 1 delay(5);
110 1 for(k=0;k<10;k++)
111 1 {
112 2 SD0=1; //非P0口作为数据总线使用时,读入数据前要赋值1,特别
113 2 CLK = 1; //是既用于写有用于读的情况下.
114 2 date_out<<=1;
115 2 if(SD0) date_out += 1;
116 2 CLK = 0;
117 2 }
C51 COMPILER V8.08 V 05/17/2009 13:42:11 PAGE 3
118 1 return(date_out);
119 1
120 1 }
121
122
123
124 void main()
125 {
126 1 int tmp1=0,STYLE=1;
127 1 i=SUM;
128 1 lcd_1602_Init();
129 1
130 1 while(1)
131 1 {
132 2 Print("10602 START NOW! ",lcd_line_1);
133 2 Print("voltage",lcd_line_2);
134 2 print0(2,7,10); //":"
135 2
136 2 if(WAY==0)
137 2 delay(5000);
138 2 if(WAY==0)
139 2 STYLE++;
140 2
141 2 if(STYLE==2) // 0---20挡位的显示函数
142 2 {
143 3 tmp1 += TLC_1543_addr(0x01); //取50次AD转换的结果,求平均值
144 3 i--;
145 3
146 3 if(i==0)
147 3 {
148 4 tmp1=tmp1/SUM;
149 4 tmp=tmp1*49999/1023;
150 4 tmp=4*tmp;
151 4 tmp1=0;
152 4 i=SUM;
153 4
154 4 print0(2,8,tmp/100000 +0x30);
155 4 print0(2,9,tmp/10000%10+0x30);
156 4 print0(2,11,tmp/1000%10+0x30);
157 4 print0(2,12,tmp/100%10+0x30);
158 4 print0(2,10,0x2e);
159 4 print0(2,13,0X56);
160 4 }
161 3 }
162 2 else
163 2 if(STYLE==1) //0---5挡位的显示函数
164 2 {
165 3 tmp1 += TLC_1543_addr(0x00); //取50次AD转换的结果,求平均值
166 3 i--;
167 3
168 3 if(i==0)
169 3 {
170 4 tmp1=tmp1/SUM;
171 4 tmp=tmp1*49999/1023;
172 4 tmp1=0;
173 4 i=SUM;
174 4
175 4 print0(2,8, tmp/10000 +0x30);
176 4 print0(2,10,tmp%10000/1000+0x30);
177 4 print0(2,11,tmp%10000%1000/100+0x30);
178 4 print0(2,12,tmp%1000%100/10+0x30);
179 4 print0(2,9,0x2e);
C51 COMPILER V8.08 V 05/17/2009 13:42:11 PAGE 4
180 4 print0(2,13,0X56);
181 4 }
182 3 }
183 2
184 2
185 2 if(STYLE==3)
186 2 STYLE=1;
187 2 else
188 2 STYLE+=0;
189 2 print0(2,15,STYLE+0x30);
190 2
191 2 }
192 1
193 1
194 1 }
195
196
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 864 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 4
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 + -