yj.lst
来自「单片及c语言轻松入门的随书光盘」· LST 代码 · 共 193 行
LST
193 行
C51 COMPILER V7.06 YJ 11/02/2005 08:42:58 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE YJ
OBJECT MODULE PLACED IN yj.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE yj.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /**************************************************
2 ; 平凡单片机工作室
3 ; http://www.mcustudio.com
4 ; Copyright 2003 pingfan's McuStudio
5 ; All rights Reserved
6 ;作者:周坚
7 ;yj.c
8 ;连线图:
9 ; DB0---DPROT.0 DB4---DPROT.4 RS-------------P2.5
10 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P2.6
11 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P2.7
12 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接10K可调电阻到GND*
13 ;80C51的晶振频率为12MHz
14 ;液晶显示程序
15 ;**************************************************/
16 #define uchar unsigned char
17 #define uint unsigned int
18 #include "reg52.h"
19 #include "intrins.h"
20 sbit RS = P2^5;
21 sbit RW = P2^6;
22 sbit E = P2^7;
23
24 #define DPORT P0
25
26 //uchar cur; //设定光标参数
27
28 const uchar NoDisp=0; //无显示
29 const uchar NoCur=1; //有显示无光标
30 const uchar CurNoFlash=2; //有光标但不闪烁
31 const uchar CurFlash=3; //有光标且闪烁
32
33 void LcdPos(uchar,uchar); //确定光标位置
34 void LcdWd(uchar); //写字符
35 void LcdWc(uchar); //送控制字(检测忙信号)
36 void LcdWcn(uchar ); //送控制字子程序(不检测忙信号)
37 void mDelay(uchar ); //延时,毫秒数由j决定
38 void WaitIdle(); //正常读写操作之前检测LCD控制器状态
39 //在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符
40 void WriteChar(uchar c,uchar xPos,uchar yPos)
41 { LcdPos(xPos,yPos);
42 1 LcdWd(c);
43 1 }
44
45 void WriteString(uchar *s,uchar xPos,uchar yPos)
46 { uchar i;
47 1 if(*s==0) //遇到字符串结束
48 1 return;
49 1 for(i=0;;i++)
50 1 {
51 2 if(*(s+i)==0)
52 2 break;
53 2 WriteChar(*(s+i),xPos,yPos);
54 2 xPos++;
55 2 if(xPos>=15) //如果XPOS中的值未到15(可显示的最多位)
C51 COMPILER V7.06 YJ 11/02/2005 08:42:58 PAGE 2
56 2 break;
57 2
58 2 }
59 1 }
60 void SetCur(uchar Para) //设置光标
61 { mDelay(2);
62 1 switch(Para)
63 1 { case 0:
64 2 { LcdWc(0x08); //关显示
65 3 break;
66 3 }
67 2 case 1:
68 2 { LcdWc(0x0c); //开显示但无光标
69 3 break;
70 3 }
71 2 case 2:
72 2 { LcdWc(0x0e); //开显示有光标但不闪烁
73 3 break;
74 3 }
75 2 case 3:
76 2 { LcdWc(0x0f); //开显示有光标且闪烁
77 3 break;
78 3 }
79 2 default:
80 2 break;
81 2 }
82 1 }
83
84 void ClrLcd() //清屏命令
85 { LcdWc(0x01);
86 1 }
87
88 // 正常读写操作之前检测LCD控制器状态
89 void WaitIdle()
90 { uchar tmp;
91 1 RS=0;
92 1 RW=1;
93 1 E=1;
94 1 _nop_();
95 1 for(;;)
96 1 { tmp=DPORT;
97 2 tmp&=0x80;
98 2 if( tmp==0)
99 2 break;
100 2 }
101 1 E=0;
102 1 }
103
104 void LcdWd(uchar c) //写字符子程序
105 { WaitIdle();
106 1 RS=1;
107 1 RW=0;
108 1 DPORT=c; //将待写数据送到数据端口
109 1 E=1;
110 1 _nop_();
111 1 _nop_();
112 1 E=0;
113 1 }
114 void LcdWc(uchar c) //送控制字子程序(检测忙信号)
115 { WaitIdle();
116 1 LcdWcn(c);
117 1 }
C51 COMPILER V7.06 YJ 11/02/2005 08:42:58 PAGE 3
118
119 void LcdWcn(uchar c) //送控制字子程序(不检测忙信号)
120 { RS=0;
121 1 RW=0;
122 1 DPORT=c;
123 1 E=1;
124 1 _nop_();
125 1 E=0;
126 1 }
127 void LcdPos(uchar xPos,uchar yPos) //设置第(xPos,yPos)个字符的DDRAM地址
128 { unsigned char tmp;
129 1 xPos&=0x0f; //x位置范围是0~15
130 1 yPos&=0x01; //y位置范围是0~1
131 1 if(yPos==0) //显示第一行
132 1 tmp=xPos;
133 1 else
134 1 tmp=xPos+0x40;
135 1 tmp|=0x80;
136 1 LcdWc(tmp);
137 1 }
138 void RstLcd() //复位LCD控制器
139 { mDelay(15); //如果使用12M或以下晶振,此数值不必改,如用24M晶振,须用30
140 1 LcdWc(0x38); //显示模式设置
141 1 LcdWc(0x08); //显示关闭
142 1 LcdWc(0x01); //显示清屏
143 1 LcdWc(0x06); //显示光标移动位置
144 1 LcdWc(0x0c); //显示开及光标设置
145 1 }
146
147 void mDelay(uchar j) //延时,毫秒数由j决定
148 { uint i=0;
149 1 for(;j>0;j--)
150 1 { for(i=0;i<124;i++)
151 2 {;}
152 2 }
153 1 }
154
155 void main()
156 { uchar xPos,yPos;
157 1 uchar *s="Welcome..!";
158 1 xPos=0;
159 1 yPos=1;
160 1 RstLcd();
161 1 ClrLcd();
162 1 SetCur(CurFlash); //开光标显示、闪烁
163 1 WriteString(s,xPos,yPos);
164 1 for(;;){;}
165 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 296 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 14
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?