📄 sy.lst
字号:
C51 COMPILER V7.50 SY 08/27/2007 09:35:53 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE SY
OBJECT MODULE PLACED IN sy.OBJ
COMPILER INVOKED BY: D:\keil uvision3\C51\BIN\C51.EXE sy.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg51.h"
2 #include <intrins.h>
3 #define uchar unsigned char
4 #define Busy 0x80 //用于检测LCM状态字中的Busy标识
5
6 //****定义引脚********//
7 sbit LCD_CS=P0^0; //原来的RS
8 sbit LCD_DATA=P0^1; //原来的RW
9 sbit LCD_CLK=P0^2; //原来的E
10 sbit LCD_PS=P0^3;
11
12 uchar show[]="s12864液晶测试程序0123456789ABCDEFGHIJKLMNOPQ";
13
14 /////////延时程序/////////
15 void delay(second) //second=1时,延时5ms子程序
16 unsigned char second;
17 {
18 1 unsigned char i,j,k;
19 1 for(i=second;i>0;i--)
20 1 for(j=20;j>0;j--)
21 1 for(k=248;k>0;k--);
22 1 }
23
24 ////////串口传输3个字节////////
25 void Send_24bits(uchar com_or_data,uchar DATA)
26 {
27 1 uchar bite,command,DIN;
28 1 if(com_or_data)
29 1 command=0xf8; //写指令到LCD
30 1 else
31 1 command=0xfa; //写数据到LCD
32 1 LCD_CS=1;
33 1 for(bite=8;bite>=1;bite--)
34 1 {
35 2 LCD_CLK=0;
36 2 LCD_DATA=command&0x80;
37 2 LCD_CLK=1;
38 2 command<<=1;
39 2 }
40 1 DIN=DATA;
41 1 DIN=DIN&0xf0;
42 1 for(bite=8;bite>=1;bite--)
43 1 {
44 2 LCD_CLK=0;
45 2 LCD_DATA=DIN&0x80;
46 2 LCD_CLK=1;
47 2 DIN<<=1;
48 2 }
49 1 DIN=DATA;
50 1 DIN=DIN&0x0f;
51 1 DIN<<=4;
52 1 for(bite=8;bite>=1;bite--)
53 1 {
54 2 LCD_CLK=0;
55 2 LCD_DATA=DIN&0x80;
C51 COMPILER V7.50 SY 08/27/2007 09:35:53 PAGE 2
56 2 LCD_CLK=1;
57 2 DIN<<=1;
58 2 }
59 1 LCD_CS=0;
60 1 }
61
62 //////////串口读数据/////////////
63 uchar Read_from_LCD(void)
64 {
65 1 uchar bite,command,DIN0,DIN1;
66 1 uchar DATA;
67 1 command=0xfe;
68 1 LCD_CS=1;
69 1 for(bite=8;bite>=1;bite--)
70 1 {
71 2 LCD_CLK=0;
72 2 LCD_DATA=command&0x80;
73 2 LCD_CLK=1;
74 2 command<<=1;
75 2 }
76 1 for(bite=8;bite>=1;bite--)
77 1 {
78 2 LCD_CLK=0;
79 2 DIN0|=LCD_DATA;
80 2 LCD_CLK=1;
81 2 DIN0<<=1;
82 2 }
83 1 for(bite=8;bite>=1;bite--)
84 1 {
85 2 LCD_CLK=0;
86 2 DIN1|=LCD_DATA;
87 2 LCD_CLK=1;
88 2 DIN1<<=1;
89 2 }
90 1 LCD_CS=0;
91 1 DIN1>>=4;
92 1 DATA=DIN0|DIN1;
93 1 return(DATA);
94 1 }
95 ////////读状态////////
96 void ReadStatusLCD(void)
97 {
98 1 uchar LCD_Data;
99 1 LCD_Data=Read_from_LCD();
100 1 while (LCD_Data&0x80) //检测忙信号
101 1 LCD_DATA=Read_from_LCD();
102 1 }
103
104 ////////写指令////////
105 void WriteCommandLCD(uchar Command,BuysC) //BuysC为0时忽略忙检测
106 {
107 1 if (BuysC) ReadStatusLCD(); //根据需要检测忙
108 1 Send_24bits(1,Command);
109 1 }
110
111 ////////写数据////////
112 void WriteDataLCD(uchar Data,BuysC)
113 {
114 1 if (BuysC) ReadStatusLCD(); //根据需要检测忙
115 1 Send_24bits(0,Data);
116 1 }
117
C51 COMPILER V7.50 SY 08/27/2007 09:35:53 PAGE 3
118 void LCDInit(void) //LCD初始化
119 {
120 1 WriteCommandLCD(0x30,1); //基本指令集动作
121 1 WriteCommandLCD(0x01,1); //清除显示
122 1 delay(1);
123 1 WriteCommandLCD(0x0c,1); //开显示
124 1 delay(1);
125 1 WriteCommandLCD(0x03,1); //地址归位
126 1 //WriteCommandLCD(0x30,1); //基本指令集动作
127 1
128 1 }
129
130 //显示一串汉字
131 void Display(uchar show[])
132 {
133 1 uchar *p,i=0;
134 1 p=show;
135 1 WriteCommandLCD(0x80,0);
136 1 while(*p!='\0')
137 1 {
138 2 WriteDataLCD(*p++,0);
139 2 i++;
140 2 if(i==16) WriteCommandLCD(0x90,1);
141 2 else if(i==32) WriteCommandLCD(0x88,1);
142 2 else if(i==48) WriteCommandLCD(0x98,1);
143 2 }
144 1 }
145
146 void main(void)
147 {
148 1 // uchar i;
149 1 LCD_PS=0;
150 1 delay(8); //启动等待,等LCM讲入工作状态
151 1 LCDInit(); //LCM初始化
152 1 //P2=0xf0;
153 1
154 1 Display(show);
155 1 /*for(i=0;i<8;i++) //字符循环左移
156 1 {
157 1 WriteCommandLCD(0x18,1);
158 1 delay(200);
159 1 delay(200);
160 1 delay(200);
161 1 delay(200);
162 1 }*/
163 1 while(1);
164 1 }
165
166
167
168
169
170
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 365 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 4
IDATA SIZE = ---- ----
C51 COMPILER V7.50 SY 08/27/2007 09:35:53 PAGE 4
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 + -