?? yj.lst
字號:
C51 COMPILER V7.20 YJ 04/11/2007 06:09:09 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE YJ
OBJECT MODULE PLACED IN yj.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE yj.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*======YB-51-A單片機(jī)通用實(shí)驗(yàn)板液晶屏顯示演示程序===========================*/
2 /*======程序來源:遠(yuǎn)博科技 0371-6949037 13949105551 13603453895=======================*/
3 /*===================================================================
4
5 [注]:AT89C51的晶振頻率為11.0592MHz
6 ====================================================================*/
7
8 /* ACM1602A (16x2)接線圖
9 =====================================================================
10 連接線圖: ACM-------51 ACM-------51 ACM--------51
11 DB0-----P0.0 DB4-----P0.4 RS-------P1_0
12 DB1-----P0.1 DB5-----P0.5 RW-------P1_1
13 DB2-----P0.2 DB6-----P0.6 E--------P1_2
14 DB3-----P0.3 DB7-----P0.7 BLA------P1_3
15
16 VLCD接1K電阻到GND
17
18 ====================================================================*/
19 /*閱讀本程序之前,請參考光盤上帶的LCD1602的工作原理(長沙太陽人科技公司提供)*/
20
21 #include <REGX51.H>
22
23 #include <Delay.h>
24 #include <stdio.h>
25 #include <Intrins.h>
26 #define uchar unsigned char
27 #define uint unsigned int
28 // 1602連線
29 #define RS P1_0 //數(shù)據(jù)/命令選擇
30 #define RW P1_1 //讀/寫選擇
31 #define Elcm P1_2 //使能信號
32 #define BLA P1_3 //液晶顯示屏背光
33
34 #define DataPort P0 // 數(shù)據(jù)端口
35 #define Busy 0x80
36 void WaitForEnable( void );
37 void LcdWriteData( char dataW );
38 void LcdWriteCommand( uchar CMD,uchar AttribC ) ;
39 void LcdReset( void ) ;
40 void DispOneChar(uchar x,uchar y,uchar Wdata) ;
41 void ePutstr(uchar x,uchar y, uchar code *ptr) ;
42 //code char examp[]="Wellcom to Ybkj 0371-6949037";
43
44
45 //void main(void) {
46 // DelayMs(2000); //延時(shí)使液晶屏復(fù)位
47 // BLA=0; //打開液晶顯示屏背光
48 // LcdReset(); //液晶屏初始化
49 // ePutstr(0,0,examp); // 液晶屏顯示一個(gè)預(yù)定字符串
50 // while(1); //無限循環(huán)。
51 // }
52 //
53
54 /*=======================================================
55 液晶屏上顯示字符串
C51 COMPILER V7.20 YJ 04/11/2007 06:09:09 PAGE 2
56 =======================================================*/
57 void ePutstr(uchar x,uchar y, uchar code *ptr) {
58 1 uchar i,l=0;
59 1 while (*ptr++ >0){l++;}; //統(tǒng)計(jì)字符的個(gè)數(shù)
60 1 ptr=ptr-(l+1); //使指針重新指向首個(gè)字符
61 1 for (i=0;i<l;i++) { DispOneChar(x++,y,*ptr++);
62 2 if ( x == 31 ) { x = 0; y ^= 0; }
63 2 }
64 1 }
65
66
67 /*=======================================================
68 顯示光標(biāo)定位
69 =======================================================*/
70 void Disp_XY( char posx,char posy) {
71 1
72 1 uchar temp;
73 1
74 1 temp = posx & 0x0f;
75 1 posy &= 0x1;
76 1 if ( posx>15 ) temp |= 0x40;
77 1 if (posy==1) temp |=0x40;
78 1 temp |= 0x80;
79 1 LcdWriteCommand(temp,0);
80 1 }
81
82 /*=======================================================
83 按指定位置顯示數(shù)出一個(gè)字符
84 =======================================================*/
85 void DispOneChar(uchar x,uchar y,uchar Wdata) {
86 1
87 1 Disp_XY( x, y ); // 定位顯示地址
88 1 LcdWriteData( Wdata ); // 寫字符
89 1 }
90
91 /*=======================================================
92 初始化程序, 必須按照產(chǎn)品資料介紹的初始化過程進(jìn)行
93 =======================================================*/
94 void LcdReset( void ) {
95 1
96 1 LcdWriteCommand( 0x38, 0); // 顯示模式設(shè)置(不檢測忙信號)
97 1 DelayMs(10);
98 1 LcdWriteCommand( 0x38, 0); // 共三次
99 1 DelayMs(10);
100 1 LcdWriteCommand( 0x38, 0);
101 1 DelayMs(10);
102 1
103 1 LcdWriteCommand( 0x38, 1); // 顯示模式設(shè)置(以后均檢測忙信號)
104 1 LcdWriteCommand( 0x08, 1); // 顯示關(guān)閉
105 1 LcdWriteCommand( 0x01, 1); // 顯示清屏
106 1 LcdWriteCommand( 0x06, 1); // 顯示光標(biāo)移動(dòng)設(shè)置
107 1 LcdWriteCommand( 0x0c, 1); // 顯示開及光標(biāo)設(shè)置
108 1 }
109
110 /*=======================================================
111 寫控制字符子程序: E=1 RS=0 RW=0
112 =======================================================*/
113 void LcdWriteCommand( uchar CMD,uchar AttribC ) {
114 1
115 1 if (AttribC) WaitForEnable(); // 檢測忙信號?
116 1 RS=0; RW=0; _nop_();
117 1 DataPort=CMD; _nop_();
C51 COMPILER V7.20 YJ 04/11/2007 06:09:09 PAGE 3
118 1 // 送控制字子程序
119 1 Elcm=1;_nop_();_nop_();Elcm=0; // 操作允許脈沖信號
120 1 }
121
122 /*=======================================================
123 當(dāng)前位置寫字符子程序: E =1 RS=1 RW=0
124 =======================================================*/
125 void LcdWriteData( char dataW ) {
126 1
127 1 WaitForEnable();
128 1 // 檢測忙信號
129 1
130 1 RS=1; RW=0; _nop_();
131 1
132 1 DataPort=dataW; _nop_();
133 1
134 1 Elcm=1; _nop_(); _nop_(); Elcm=0; // 操作允許脈沖信號
135 1
136 1 }
137
138 /*=======================================================
139 正常讀寫操作之前必須檢測LCD控制器狀態(tài): CS=1 RS=0 RW=1
140 DB7: 0 LCD控制器空閑; 1 LCD控制器忙
141 ========================================================*/
142 void WaitForEnable( void ) {
143 1
144 1 DataPort = 0xff;
145 1
146 1 RS=0; RW=1; _nop_(); Elcm=1; _nop_(); _nop_();
147 1
148 1 while( DataPort & Busy );
149 1 Elcm=0;
150 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 350 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 9
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -