📄 pinlvji2.lst
字号:
C51 COMPILER V7.50 PINLVJI2 10/26/2008 13:12:27 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PINLVJI2
OBJECT MODULE PLACED IN pinlvji2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE pinlvji2.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3
4 //液晶1602子程序,文件名:1602.c
5 /**************************************************
6 ;连线图:
7 ; DB0---DPROT.0 DB4---DPROT.4 RS-------------P3.5
8 ; DB1---DPROT.1 DB5---DPROT.5 RW-------------P3.6
9 ; DB2---DPROT.2 DB6---DPROT.6 E--------------P3.7
10 ; DB3---DPROT.3 DB7---DPROT.7 VLCD接10K可调电阻到GND*
11 ; 需要11根单片机口线
12 ;80C51的晶振频率为12MHz
13 ;液晶显示程序
14 ;**************************************************/
15 #include <reg52.h>
16 #include <intrins.h>
17 #define uint unsigned int
18 #define uchar unsigned char
19
20 sbit RS = P3^7;
21 sbit RW = P3^6;
22 sbit EN = P3^5;
23 sbit KEY = P1^0;
24 #define DPORT P2
25
26 void LcdPos(uchar,uchar); //确定光标位置
27 void LcdWd(uchar); //写字符
28 void LcdWc(uchar); //送控制字(检测忙信号)
29 void LcdWcn(uchar ); //送控制字子程序(不检测忙信号)
30 void mDelay(uchar ); //延时,毫秒数由j决定
31 void WaitIdle(); //正常读写操作之前检测LCD控制器状态
32
33 //在指定的行与列显示指定的字符,xpos:行,ypos:列,c:待显示字符
34 void WriteChar(uchar c,uchar xPos,uchar yPos)
35 {
36 1 LcdPos(xPos,yPos);
37 1 LcdWd(c);
38 1 }
39
40 void WriteString(uchar *s,uchar xPos,uchar yPos)
41 { uchar i;
42 1 if(*s==0) //遇到字符串结束
43 1 return;
44 1 for(i=0;;i++)
45 1 {
46 2 if(*(s+i)==0)
47 2 break;
48 2 WriteChar(*(s+i),xPos,yPos);
49 2 xPos++;
50 2 if(xPos>=15) //如果XPOS中的值未到15(可显示的最多位)
51 2 break;
52 2
53 2 }
54 1 }
55 void SetCur(uchar Para) //设置光标
C51 COMPILER V7.50 PINLVJI2 10/26/2008 13:12:27 PAGE 2
56 { mDelay(2);
57 1 switch(Para)
58 1 { case 0:
59 2 { LcdWc(0x08); //关显示
60 3 break;
61 3 }
62 2 case 1:
63 2 { LcdWc(0x0c); //开显示但无光标
64 3 break;
65 3 }
66 2 case 2:
67 2 { LcdWc(0x0e); //开显示有光标但不闪烁
68 3 break;
69 3 }
70 2 case 3:
71 2 { LcdWc(0x0f); //开显示有光标且闪烁
72 3 break;
73 3 }
74 2 default:
75 2 break;
76 2 }
77 1 }
78
79 void ClrLcd() //清屏命令
80 { LcdWc(0x01);
81 1 }
82
83 // 正常读写操作之前检测LCD控制器状态
84 void WaitIdle()
85 { uchar tmp;
86 1 RS=0;
87 1 RW=1;
88 1 EN=1;
89 1 _nop_();
90 1 for(;;)
91 1 { tmp=DPORT;
92 2 tmp&=0x80;
93 2 if( tmp==0)
94 2 break;
95 2 }
96 1 EN=0;
97 1 }
98
99 void LcdWd(uchar c) //写字符子程序
100 { WaitIdle();
101 1 RS=1;
102 1 RW=0;
103 1 DPORT=c; //将待写数据送到数据端口
104 1 EN=1;
105 1 _nop_();
106 1 _nop_();
107 1 EN=0;
108 1 }
109 void LcdWc(uchar c) //送控制字子程序(检测忙信号)
110 { WaitIdle();
111 1 LcdWcn(c);
112 1 }
113
114 void LcdWcn(uchar c) //送控制字子程序(不检测忙信号)
115 { RS=0;
116 1 RW=0;
117 1 DPORT=c;
C51 COMPILER V7.50 PINLVJI2 10/26/2008 13:12:27 PAGE 3
118 1 EN=1;
119 1 _nop_();
120 1 EN=0;
121 1 }
122 void LcdPos(uchar xPos,uchar yPos) //设置第(xPos,yPos)个字符的DDRAM地址
123 { unsigned char tmp;
124 1 xPos&=0x0f; //x位置范围是0~15
125 1 yPos&=0x01; //y位置范围是0~1
126 1 if(yPos==0) //显示第一行
127 1 tmp=xPos;
128 1 else
129 1 tmp=xPos+0x40;
130 1 tmp|=0x80;
131 1 LcdWc(tmp);
132 1 }
133
134 void RstLcd() //复位LCD控制器
135 { mDelay(15); //如果使用12M或以下晶振,此数值不必改,如用24M晶0
136 1 LcdWc(0x38); //显示模式设置
137 1 LcdWc(0x08); //显示关闭
138 1 LcdWc(0x01); //显示清屏
139 1 LcdWc(0x06); //显示光标移动位置
140 1 LcdWc(0x0c); //显示开及光标设置
141 1 }
142
143 void mDelay(uchar j) //延时,毫秒数由j决定
144 { uint i=0;
145 1 for(;j>0;j--)
146 1 { for(i=0;i<124;i++)
147 2 {;}
148 2 }
149 1 }
150
151
152 //主函数:
153
154 //;主程序开始
155 //;=====================================================================
156
157
158
159
160
161 unsigned char code table1[]=
162
163 {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789
164
165 //unsigned char code table2[]={0x41,0x42,0x43,0x44,0x45,0x46};//abcdef
166 uchar *s=" CYMOMETER ";
167 uchar *s1="FREQ: Hz ";
168 uchar *s2=" over range ";
169
170
171 uchar T0count; //从T0的计数单元中读取计数的数值
172 uchar timecount; //
173 uchar mark=1;
174 bit flag; //标志位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -