📄 197.lst
字号:
C51 COMPILER V7.08 197 09/04/2007 13:17:21 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE 197
OBJECT MODULE PLACED IN 197.OBJ
COMPILER INVOKED BY: D:\Program Files\C51\BIN\C51.EXE 197.c DEBUG OBJECTEXTEND
line level source
1 /**************************************************
2 引脚连接
3 /CS->P2.7;HBEN->P1.3;/SHDN->P1.2;/INT->P3.0;
4 /**************************************************/
5 #include <reg51.h>
6 #include <absacc.h>
7 #include<intrins.h>
8 #define uchar unsigned char
9 #define uint unsigned int
10 sbit CS=P2^7;
11 sbit HBEN=P2^6;
12 sbit INT=P3^2;
13 sbit LCM_RS=P2^0;
14 sbit LCM_RW=P2^1;
15 sbit LCM_EN=P2^2;
16 #define BUSY 0x80 //常量定义
17 #define DATAPORT P0
18 #define ADC XBYTE[0x7fff]
19 uchar DATAH;
20 uchar DATAL;
21 long int DATA;
22 uchar volt[4]={0};
23 uchar code str0[]={"**VOLT: . V***"};
24 uchar code str1[]={"***WANG CHENG***"};
25 void lcd_wait(void);
26
27 /****************************************
28 延时K*1ms,12.000mhz
29 *****************************************/
30 void delay(uint k)
31 {
32 1 uint i,j;
33 1 for(i=0;i<k;i++)
34 1 {
35 2 for(j=0;j<60;j++)
36 2 {;}
37 2 }
38 1 }
39 /*********************************************
40 写指令到ICM子函数
41 *********************************************/
42
43 void WriteCommandLCM(uchar WCLCM,uchar BusyC)
44 {
45 1 if(BusyC)lcd_wait();
46 1 DATAPORT=WCLCM;
47 1 LCM_RS=0; // 选中指令寄存器
48 1 LCM_RW=0; // 写模式
49 1 LCM_EN=1;
50 1 _nop_();
51 1 _nop_();
52 1 _nop_();
53 1 LCM_EN=0;
54 1
55 1 }
C51 COMPILER V7.08 197 09/04/2007 13:17:21 PAGE 2
56 /*******************************************
57 写数据到LCM子函数
58 ********************************************/
59
60 void WriteDataLCM(uchar WDLCM)
61 {
62 1 lcd_wait( ); //检测忙信号
63 1 DATAPORT=WDLCM;
64 1 LCM_RS=1; // 选中数据寄存器
65 1 LCM_RW=0; // 写模式
66 1 LCM_EN=1;
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 LCM_EN=0;
71 1 }
72 /*******************************************
73 lcm内部等待函数
74 *******************************************/
75
76 void lcd_wait(void)
77 {
78 1 DATAPORT=0xff; //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色
79 1 LCM_EN=1;
80 1 LCM_RS=0;
81 1 LCM_RW=1;
82 1 _nop_();
83 1 _nop_();
84 1 _nop_();
85 1 while(DATAPORT&BUSY);
86 1 /* { LCM_EN=0;
87 1 _nop_();
88 1 _nop_();
89 1 LCM_EN=1;
90 1 _nop_();
91 1 _nop_();
92 1 }*/
93 1 LCM_EN=0;
94 1
95 1 }
96 /******************************************
97 LCM初始化子函数
98 ******************************************/
99 void initLCM( )
100 {
101 1 DATAPORT=0;
102 1 delay(15);
103 1 WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
104 1 delay(5);
105 1 WriteCommandLCM(0x38,0);
106 1 delay(5);
107 1 WriteCommandLCM(0x38,0);
108 1 delay(5);
109 1
110 1 WriteCommandLCM(0x38,1); //8bit数据传送,2行显示,5*7字型,检测忙信号
111 1 WriteCommandLCM(0x08,1); //关闭显示,检测忙信号
112 1 WriteCommandLCM(0x01,1); //清屏,检测忙信号
113 1 WriteCommandLCM(0x06,1); //显示光标右移设置,检测忙信号
114 1 WriteCommandLCM(0x0c,1); //显示屏打开,光标不显示,不闪烁,检测忙信号
115 1 }
116 /********************************************
117 显示指定坐标的一个字符子函数
C51 COMPILER V7.08 197 09/04/2007 13:17:21 PAGE 3
118 ********************************************/
119
120 void DisplayOneChar(uchar X,uchar Y,uchar DData)
121 {
122 1 Y&=1;
123 1 X&=15;
124 1 if(Y)X|=0x40; //若y为1(显示第二行),地址码+0X40
125 1 X|=0x80; //指令码为地址码+0X80
126 1 WriteCommandLCM(X,0);
127 1 WriteDataLCM(DData);
128 1 }
129 /************************************************
130 显示指定坐标的一串字符子函数
131 **************************************************/
132
133 void DisplayListChar(uchar X,uchar Y,uchar code *DData)
134 {
135 1 uchar ListLength=0;
136 1 Y&=0x01;
137 1 X&=0x0f;
138 1 while(X<16)
139 1 {
140 2 DisplayOneChar(X,Y,DData[ListLength]);
141 2 ListLength++;
142 2 X++;
143 2 }
144 1 }
145 /***************************************************
146 ADC data collection funcation
147 ****************************************************/
148 void data_collection(void)
149 {
150 1 ADC=0x40;
151 1 while(INT!=0);
152 1 HBEN=0;
153 1 DATAL=ADC;
154 1 HBEN=1;
155 1 DATAH=ADC;
156 1 HBEN=0;
157 1 // led=!led;
158 1 }
159 /**************************************************
160 data pro funcation
161 **************************************************/
162 void data_pro(void)
163 {
164 1 DATA=DATAH*256+DATAL;
165 1 DATA=((DATA*50*5000)/41/4117);
166 1 volt[0]=(DATA/1000)&0x0f;
167 1 volt[1]=(DATA/100%10)&0x0f;
168 1 volt[2]=(DATA%100/10)&0x0f;
169 1 volt[3]=(DATA%10)&0x0f;
170 1 }
171
172 /************************************************
173 display funcation
174 ************************************************/
175 void display(void)
176 {
177 1 WriteCommandLCM(0x01,1); //清显示屏
178 1 DisplayListChar(0,0,str0);
179 1 DisplayListChar(0,1,str1);
C51 COMPILER V7.08 197 09/04/2007 13:17:21 PAGE 4
180 1 DisplayOneChar(7,0,volt[0]+0x30);
181 1 DisplayOneChar(9,0,volt[1]+0x30);
182 1 DisplayOneChar(10,0,volt[2]+0x30);
183 1 DisplayOneChar(11,0,volt[3]+0x30);
184 1 }
185 /*************************************************
186 main funcation
187 **************************************************/
188 void main(void)
189 {
190 1 HBEN=0;
191 1 delay(500);
192 1 initLCM();
193 1 WriteCommandLCM(0x01,1); //清显示屏
194 1 DisplayListChar(0,0,str0);
195 1 DisplayListChar(0,1,str1);
196 1
197 1 while(1)
198 1 {
199 2 _nop_(); _nop_(); _nop_();
200 2 data_collection();
201 2 _nop_(); _nop_(); _nop_();
202 2 data_pro();
203 2 _nop_(); _nop_(); _nop_();
204 2 display();
205 2 _nop_(); _nop_(); _nop_();
206 2 delay(1000);
207 2 }
208 1 }
209
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 577 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 8
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 + -