📄 daxianshi.lst
字号:
C51 COMPILER V8.02 DAXIANSHI 03/05/2009 16:01:55 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DAXIANSHI
OBJECT MODULE PLACED IN DAXIANSHI.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DAXIANSHI.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<stdio.h>
2 #include<reg51.h>
3 #include<intrins.h>
4 #include <absacc.h>
5
6 #define uchar unsigned char
7 #define LCD_DATA P0 //数据口
8 #define LCD_GO_HOME 0x02 //AC=0,光标、画面回HOME位
9
10 //输入方式设置
11 #define LCD_AC_AUTO_INCREMENT 0x06 //数据读、写操作后,AC自动增一
12 #define LCD_AC_AUTO_DECREASE 0x04 //数据读、写操作后,AC自动减一
13 #define LCD_MOVE_ENABLE 0x05 //数据读、写操作,画面平移
14 #define LCD_MOVE_DISENABLE 0x04 //数据读、写操作,画面不动
15
16 //设置显示、光标及闪烁开、关
17 #define LCD_DISPLAY_ON 0x0C //显示开
18 #define LCD_DISPLAY_OFF 0x08 //显示关
19 #define LCD_CURSOR_ON 0x0A //光标显示
20 #define LCD_CURSOR_OFF 0x08 //光标不显示
21 #define LCD_CURSOR_BLINK_ON 0x09 //光标闪烁
22 #define LCD_CURSOR_BLINK_OFF 0x08 //光标不闪烁
23
24 //光标、画面移动,不影响DDRAM
25 #define LCD_LEFT_MOVE 0x18 //LCD显示左移一位
26 #define LCD_RIGHT_MOVE 0x1C //LCD显示右移一位
27 #define LCD_CURSOR_LEFT_MOVE 0x10 //光标左移一位
28 #define LCD_CURSOR_RIGHT_MOVE 0x14 //光标右移一位
29
30 //工作方式设置
31 #define LCD_DISPLAY_DOUBLE_LINE 0x38 //两行显示
32 #define LCD_DISPLAY_SINGLE_LINE 0x30 //单行显示
33
34 sbit LCD_BUSY=P0^7; //忙标志位
35 sbit LCD_RS=P3^7; //LCD寄存器
36 sbit LCD_RW=P3^6; //LCD读写
37 sbit LCD_EN=P2^6; //LCD使能
38 sbit RW=P3^6;
39 sbit DA=P2^5;
40
41 //定义变量
42 uchar XPOS,YPOS;
43 uchar Tens[2]={0x01,0x02};
44 uchar counter;
45 uchar Later=0;
46 uchar out;
47 uchar DAzhi[];
48
49 /*********************************************
50 涵数名称: Delay()
51 涵数功能: 延时
52 入口参数: Void
53 出口参数: Void
54 *********************************************/
55 void Delay(int number)
C51 COMPILER V8.02 DAXIANSHI 03/05/2009 16:01:55 PAGE 2
56 {
57 1 for(;number!=0;number--)
58 1 {}
59 1 }
60
61 /*********************************************
62 涵数名称: LcdCheckBusy(void)
63 涵数功能: 判断LCD忙信号
64 入口参数: Void
65 出口参数: Void
66 *********************************************/
67 void LcdCheckBusy(void) //判断忙标志
68 {
69 1 LCD_DATA=0xff;
70 1 LCD_RS=0; //选择IR
71 1 LCD_RW=1; //读操作
72 1 LCD_EN=1;
73 1 while(LCD_BUSY); //为1继续判断,为0时往下执行
74 1 LCD_EN=0;
75 1 }
76
77 /*********************************************
78 涵数名称: LCD_READ_AC()
79 涵数功能: 读LCD光标地址
80 入口参数: void
81 出口参数: Void
82 *********************************************/
83 /*void Lcd_Read_AC()
84 {
85 LCD_DATA=0xff;
86 LCD_RS=0; //选择IR
87 LCD_RW=1; //读操作
88 LCD_EN=1;
89 counter=LCD_DATA; //为1继续判断,为0时往下执行
90 LCD_EN=0;
91 }
92
93 /*********************************************
94 涵数名称: LcdCls(void)
95 涵数功能: 向LCD写指令
96 入口参数: void
97 出口参数: Void
98 *********************************************/
99 void LcdCls(void) //LCD清屏
100 {
101 1 LcdCheckBusy();
102 1 LCD_RS=0;
103 1 LCD_RW=0;
104 1 LCD_EN=1;
105 1 LCD_DATA=1;
106 1 LCD_EN=0;
107 1 }
108
109
110 /*********************************************
111 涵数名称: void LcdWriteInstruction()
112 涵数功能: 向LCD写指令
113 入口参数: uchar LcdInstruction
114 出口参数: Void
115 *********************************************/
116
117 void LcdWriteInstruction(uchar LcdInstruction) //写指令到LCD
C51 COMPILER V8.02 DAXIANSHI 03/05/2009 16:01:55 PAGE 3
118 {
119 1 LcdCheckBusy();
120 1 LCD_RS=0;
121 1 LCD_RW=0;
122 1 LCD_EN=1;
123 1 LCD_DATA=LcdInstruction;
124 1 LCD_EN=0;
125 1 }
126
127 /*********************************************
128 涵数名称: LcdWriteData()
129 涵数功能: 输出一个字节
130 入口参数: uchar LcdData
131 出口参数: Void
132 *********************************************/
133 void LcdWriteData(uchar LcdData) //输出一个字节数据到LCD
134 {
135 1 LcdCheckBusy();
136 1 LCD_RS=1;
137 1 LCD_RW=0;
138 1 LCD_EN=1;
139 1 LCD_DATA=LcdData;
140 1 LCD_EN=0;
141 1 }
142
143 /*********************************************
144 涵数名称: void LcdPos(void)
145 涵数功能: 地址计算
146 入口参数: viod
147 出口参数: Void
148 *********************************************/
149
150 void LcdPos(void) //显示地址计算
151 { XPOS&=0x0f; //定义列向显示个数为16
152 1 YPOS&=0x03; //定义显示行数为2行
153 1 if(YPOS==0x00) //当在第一行显示时,横向显示地址从0开始,因为写地址时D7为1,所以要或80H
154 1 LcdWriteInstruction(XPOS|0x80);
155 1 else if(YPOS==0x01)
156 1 LcdWriteInstruction((XPOS+0x40)|0x80); //当在第二行显示时,加40H回到第二行的第一个位置
157 1 else if(YPOS==0x02)
158 1 LcdWriteInstruction((XPOS+0x01)|0x80); //当行数超过2时,回到起始点
159 1
160 1 }
161
162 /*********************************************
163 涵数名称: void LcdInits(void)
164 涵数功能: 初始化LCD
165 入口参数: void
166 出口参数: Void
167 *********************************************/
168 void LcdInit(void) //初始化LCD
169 {
170 1 LcdWriteInstruction(LCD_DISPLAY_DOUBLE_LINE);
171 1 LcdWriteInstruction(LCD_DISPLAY_OFF);
172 1 LcdCls();
173 1 LcdWriteInstruction(LCD_AC_AUTO_INCREMENT);
174 1 LcdWriteInstruction(0x0f);
175 1 }
176
177
178 /*********************************************
179 涵数名称: void LcdWDAstr()
C51 COMPILER V8.02 DAXIANSHI 03/05/2009 16:01:55 PAGE 4
180 涵数功能: 确定显示地址并显示字符串
181 入口参数: uchar x 确定LCD的X向显示坐标
182 uchar y 确定LCD的Y向显示坐标
183 uchar s[]写入字符串
184 uchar Len 数组长度
185 出口参数: Void
186 *********************************************/
187 void LcdWDAstr(uchar x,uchar y,uchar s[],uchar Len) //地址确定
188 {
189 1 YPOS=y; //把要显示的位置赋值
190 1 for(XPOS=x;Later<Len;XPOS++) //指针值必须要有数据
191 1 {
192 2 LcdPos();
193 2 LcdWriteData(s[Later]); //指针取内容
194 2 Later++; //逐个显示
195 2 }
196 1 }
197
198 /**********************************************
199 函数名称:DA_Star()
200 函数功能:启动DA转换
201 函数类型:void
202 入口参数:无
203 出口参数:无
204 ***********************************************/
205 void DA_Star(uchar d)
206 {
207 1 RW=0;
208 1 DA=0;
209 1 _nop_();
210 1 _nop_();
211 1 _nop_();
212 1 P0=d;
213 1 _nop_();
214 1 _nop_();
215 1 _nop_();
216 1 RW=1;
217 1 DA=1;
218 1 _nop_();
219 1 _nop_();
220 1 _nop_();
221 1 _nop_();
222 1 _nop_();
223 1 _nop_();
224 1 }
225
226 void main()
227 {
228 1 LcdInit();
229 1 while(1)
230 1 {
231 2 DA_Star(0xff);
232 2 Delay(2000);
233 2 DA_Star(0x00);
234 2 Delay(2000);
235 2 Tens[Later]+=0x30;
236 2 LcdWDAstr(3,0,Tens,1);
237 2
238 2 }
239 1 }
240
241
C51 COMPILER V8.02 DAXIANSHI 03/05/2009 16:01:55 PAGE 5
242
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 249 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 6
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 + -