📄 ad.lst
字号:
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE AD
OBJECT MODULE PLACED IN .\ad.obj
COMPILER INVOKED BY: D:\常用软件\keil\C51\BIN\C51.EXE ..\新建文件夹\ad.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ad.lst) OBJEC
-T(.\ad.obj)
stmt level source
1
2
3 /*说明:功能显示函数 *********************************************************
4 ****** LCD_set_xy ******** //显示光标定位 ***********************************
5 ****** LCD_write_char ***** //在指定位置显示字符 ******************************
6 ****** transfer_display *** //显示连续字串 ***********************************
7 ****** LCD_Write_String *** //写入字符串 ************************************
8 ****** FLOAT_NUM_Display ** //显示浮点型 ************************************
9 ****** INT_NUM_Display **** //显示整数 *************************************
10 ****** HEX_NUM_Display **** //显示十六进制 **********************************
11 ******为了避免程序"死等",故在功能函数中尽量避免调用Delay函数******************/
12
13 #include<reg51.h>
14 #include<math.h>
15 #include<intrins.h>
16 /***************************LCD Part*******************************************/
17 #define uchar unsigned char
18
19 #define LCDIO P0 //LCD数据口
20
21 #define LINE1 0 //1602第一行
22
23 #define LINE2 1 //1602第二行
24
25 #define LINE1_HEAD 0x80 //第一行首地址
26
27 #define LINE2_HEAD 0xC0 //第二行首地址
28
29
30 /****************************LCD与单片机的接口*********************************/
31
32 sbit LCD1602_RS=P1^4; //指令/数据选择,1选择数据,0选择指令
33
34 sbit LCD1602_RW=P1^5; //读写选择,1读出,0写入
35
36 sbit LCD1602_EN=P1^6; //写使能。高有效,下降沿时锁定数据
37
38 sbit LCD1602_busy=LCDIO^7; //判忙标志
39
40 /********************数组定义区************************************************/
41
42 uchar CHR[] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','.'};
43
44 uchar LCDDisplaybuffer[32]={0};
45
46 /******************全局变量定义区**********************************************/
47
48 unsigned long frequency; //显示整型定义
49
50 float dd; //显示浮点型定义]
51
52 uchar zhi=0x30; //数字0的代码值
53
54 long int Num;
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 2
55
56 uchar Bite;
57
58 /******************函数声明区**************************************************/
59
60 void LCD_en_command(uchar command); //写指令
61
62 void LCD_en_dat(uchar temp); //写数据
63
64 void LCD_set_xy( uchar x, uchar y );//设置显示地址
65
66 void LCD_write_char( uchar x,uchar y,uchar dat);//显示字符
67
68 void LCD_write_string(uchar X,uchar Y,uchar *s);//显示字符串
69
70 void transfer_display(uchar zhi,uchar x,uchar y);//显示滚动的字符
71
72 void LCD_init(void); //LCD初始化
73
74 void LCD_busy(); //判忙
75
76 void FLOAT_NUM_Display(float dd,uchar x,uchar y); //显示浮点型
77
78 void INT_NUM_Display(unsigned int Num,uchar x,uchar y);//显示整型
79
80 void HEX_NUM_Display(unsigned long Num,uchar Bite,uchar x,uchar y);//显示十六进制
81
82 void delay_nms(unsigned int n);//延时功能
83
84 /*******************nms延时函数************************************************/
85
86
87 void delay_nms(unsigned int n)
88 {
89 1 unsigned int i=0,j=0;
90 1 for (i=n;i>0;i--)
91 1 for (j=0;j<1140;j++)
92 1 {;};
93 1
94 1 }
95
96
97
98 /*******************************************************************************
99 /***************LCD模块的子程序*************************************************
100 ****************要注意判忙程序的写法和在指令数据函数里放的顺序,不可调换********/
101
102 //判忙程序
103 void LCD_busy()
104 {
105 1 LCDIO=0xff; //置p0口为输入状态
106 1 LCD1602_RS=0;
107 1 LCD1602_RW=1;
108 1 LCD1602_EN=1;
109 1 while(LCD1602_busy);
110 1 LCD1602_EN=0;
111 1 }
112
113 //写入指令代码,即数据的地址
114 void LCD_en_command(uchar command)
115 {
116 1
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 3
117 1 LCDIO=command;
118 1 LCD1602_RS=0;
119 1 LCD1602_RW=0;
120 1 LCD1602_EN=0;
121 1 LCD_busy();
122 1 LCD1602_EN=1;
123 1 }
124
125
126 //写入要显示的数据
127 void LCD_en_dat(uchar dat)
128 {
129 1 LCDIO=dat;
130 1 LCD1602_RS=1;
131 1 LCD1602_RW=0;
132 1 LCD1602_EN=0;
133 1 LCD_busy();
134 1 LCD1602_EN=1;
135 1 }
136
137 /*********************************************************************************
138 ** 函数名:void LCD_set_xy( uchar x, uchar y )************************************
139 ** 功能:设置LCD显示的起始位置****************************************************
140 ** 入口参数:uchar x,uchar y (x:0-15;y:0-1;)************************************
141 ********************LCD第一行显示寄存器地址:0X80-0X8F****************************
142 ********************LCD第一行显示寄存器地址:0XC0-0XCF****************************
143 *********** uchar x,uchar y(字符显示的坐标)************************************
144 ** 出口参数:无 ******************************************************************
145 **********************************************************************************/
146
147
148 void LCD_set_xy( uchar x, uchar y )
149 {
150 1
151 1 uchar address;//光标位置
152 1 if (y==LINE1)
153 1 address=LINE1_HEAD+x;
154 1 else
155 1 address=LINE2_HEAD+x;
156 1
157 1 LCD_en_command(address);
158 1 }
159
160
161
162 /*********************************************************************************
163 ** 函数名:void LCD_write_char( uchar x,uchar y,uchar dat)************************
164 ** 功能:在指定位置显示单字符(最多32个字符)*************************************
165 ** 入口参数:uchar dat (直接输入需要显示的字符,例如'1','a'等等)***************
166 *********** uchar x,uchar y(字符显示的坐标)************************************
167 ** 出口参数:无 ******************************************************************
168 **********************************************************************************/
169
170 void LCD_write_char( uchar x,uchar y,uchar dat)
171 {
172 1
173 1 LCD_set_xy( x, y );
174 1 LCD_en_dat(dat);
175 1
176 1 }
177
178
C51 COMPILER V7.06 AD 06/08/2007 19:10:53 PAGE 4
179 /*********************************************************************************
180 **函数名:void transfer_display()**************************************************
181 **功能:显示从定义的zhi的ASCALL码开始的连续的字符(最多显示32个字符)**************
182 **入口参数:uchar zhi (输入要显示连续字串的首字符)*********************************
183 **其中的i,j是x轴,LINE1,LINE2为y轴************************************************
184 **出口参数:无*********************************************************************/
185
186
187 void transfer_display(uchar zhi,uchar x,uchar y)
188 {
189 1
190 1 uchar i,j;
191 1
192 1 for(i=x;i<16;i++) //第一行显示
193 1 {
194 2 LCD_write_char(i,y,zhi++);
195 2 }
196 1
197 1 y^=1;
198 1 for(j=0;j<16;j++) //当第一行显示满后第二行显示
199 1 {
200 2 LCD_write_char(j,y,zhi++);
201 2 }
202 1
203 1 }
204
205 /*********************************************************************************
206 ** 函数名:void LCD_write_string(uchar X,uchar Y,uchar *s)************************
207 ** 功能:字符串显示的输入函数(最多32个字符)*************************************
208 ** 入口参数:uchar *s (直接输入需要显示的字符串,例如"welcome to use!")********
209 *********** uchar X,uchar Y(第一个字符开始显示的坐标)**************************
210 ** 出口参数:无 ******************************************************************
211 **********************************************************************************/
212 void LCD_write_string(uchar X,uchar Y,uchar *s)
213 {
214 1
215 1 while (*s) // 显示的字符
216 1 {
217 2
218 2 LCD_set_xy( X, Y ); //设置显示的地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -