📄 a.lst
字号:
C51 COMPILER V7.20 A 04/24/2008 11:10:53 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE A
OBJECT MODULE PLACED IN a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE a.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <stdio.h>
2 #include <AT89X52.h>
3 #include<intrins.h>
4 #include<absacc.h>
5 #define Dlcd XBYTE[0x3FFF]//显示的地址
6
7 sbit rs = P1^0; //1=数据; 0=指令;
8 sbit rw = P1^1; //1=读; 0=写;
9 sbit e = P1^2; //1=使能?
10 #define unchar unsigned char
11 #define unint unsigned int
12 unchar distab[8] ;
13 unint voltage;
14 #define AD199 XBYTE[0x4000]
15
16 sbit HBEN= P1^4;
17 sbit INT197= P1^3;
18
19 /*-------------延时--------------------------*/
20 void delay(unsigned char i) //225不稳定,确保安全230-250 约0.5ms
21 {
22 1 while(--i);
23 1 }
24
25 void delay1s(void)
26 {
27 1 unsigned char i,j,k;
28 1 for(k=100;k>0;k--)
29 1 for(i=20;i>0;i--)
30 1 for(j=248;j>0;j--);
31 1 }
32
33
34 /*---------------写数据------------------------*/
35 lcd_write_data(unsigned char c)
36 {
37 1 delay(230);
38 1 rs=1;
39 1 rw=0;
40 1 Dlcd =c;
41 1 e=1;
42 1 _nop_();
43 1 _nop_();
44 1 e=0;
45 1 }
46
47 /*---------------写指令------------------------*/
48 lcd_write_command(unsigned char c)
49 {
50 1 delay(230);
51 1 rs=0;
52 1 rw=0;
53 1 Dlcd =c;
54 1 e=1;
55 1 _nop_();
C51 COMPILER V7.20 A 04/24/2008 11:10:53 PAGE 2
56 1 _nop_();
57 1 e=0;
58 1 }
59
60 /*------------------初始化-----------------*/
61 void init_lcd (void)
62 {
63 1 lcd_write_command (0x30); //基本指令集
64 1 lcd_write_command (0x01); //清屏,地址指针指向00H
65 1 lcd_write_command (0x06); //光标的移动方向
66 1 lcd_write_command (0x0c); //开显示,关游标
67 1 }
68
69
70 /************************************************************************************************
71 lcd_write_sentence函数:
72 指定起始行,起始列,连续写入字符串;注意:字符串长度必须小于8;行:1-4;列:0-7
73 *************************************************************************************************/
74
75 void lcd_write_sentence(unchar row,unchar col,unchar *string,unchar lenth)
76 {
77 1 unchar i=0;
78 1 lcd_write_command (0x30);
79 1 switch(row)
80 1 {
81 2 case 1:
82 2 lcd_write_command(0x80+col); //第一行
83 2 break;
84 2 case 2:
85 2 lcd_write_command(0x90+col); //第二行
86 2 break;
87 2 case 3:
88 2 lcd_write_command(0x88+col); //第三行
89 2 break;
90 2 case 4:
91 2 lcd_write_command(0x98+col); //第四行
92 2 break;
93 2 default:
94 2 lcd_write_command(0x80); //缺省为第一行
95 2 break;
96 2 }
97 1 while(lenth-->0)
98 1 {
99 2 lcd_write_data(string[i]); //写入字符串
100 2 i++;
101 2 }
102 1 }
103
104 unint AD199Start(unchar M)
105 {
106 1 long voltage;
107 1 unchar d_h,d_l,i;
108 1 unint tem,max=0,min=10000;
109 1 voltage=0;
110 1 for(i=0;i<M+2;i++) //连续采样N次,去掉最大值和最小值,再平均
111 1 {
112 2 AD199=0x40;//开始转化
113 2 while(INT197==1);
114 2 HBEN=0;
115 2 d_l=AD199;
116 2 HBEN=1;
117 2 d_h=AD199;
C51 COMPILER V7.20 A 04/24/2008 11:10:53 PAGE 3
118 2
119 2 tem=d_h*0x0100+d_l;
120 2 if(tem>max)
121 2 max=tem;
122 2 if(tem<min)
123 2 min=tem;
124 2 voltage+=tem;
125 2 }
126 1 voltage=voltage-max-min;
127 1 voltage=voltage/M;
128 1 return (unint)voltage;
129 1 }
130
131 void getAD199(void)
132 {
133 1 voltage=AD199Start(10);
134 1 distab[7]=voltage/10000; //分别取出显示
135 1 voltage=voltage%10000;
136 1 if(distab[7]==0)
137 1 distab[7]=0x10;
138 1 distab[6]=voltage/1000;
139 1 voltage=voltage%1000;
140 1 distab[5]=voltage/100;
141 1 voltage=voltage%100;
142 1 distab[4]=voltage/10;
143 1 voltage=voltage%10;
144 1 distab[3]=voltage;
145 1 distab[2]=0x10;
146 1 distab[1]=0x10;
147 1 distab[0]=0x10;
148 1 init_lcd ();
149 1 lcd_write_sentence(1,0,"The voltage is:",15);
150 1 lcd_write_command(0x30);
151 1 lcd_write_command(0x90);
152 1 lcd_write_data(0x20);
153 1 lcd_write_data(0x30+distab[6]);
154 1 lcd_write_sentence(2,1,".",1);
155 1 lcd_write_data(0x30+distab[5]);
156 1 lcd_write_data(0x30+distab[4]);
157 1 lcd_write_data(0x30+distab[3]);
158 1 lcd_write_sentence(2,3,"V",1);
159 1 }
160 /*------------------主程序--------------------*/
161 void main ()
162 {
163 1 init_lcd ();
164 1 getAD199();
165 1 delay1s();
166 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 637 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 17
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 + -