📄 lcd1602_parallel.lst
字号:
C51 COMPILER V8.05a LCD1602_PARALLEL 11/06/2007 16:06:02 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LCD1602_PARALLEL
OBJECT MODULE PLACED IN lcd1602_Parallel.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd1602_Parallel.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*=============================1602液晶驱动程序============================
2
3 程序名称:1602液晶驱动程序
4
5 版 本:Agni 07-SV开发板
6
7 作 者:蓝极风电子技术
8
9 日 期:2007.10.28
10
11 注:(1):主芯片AT89S52使用11.0592M晶振,1602上下屏液晶
12
13 (2):Keil uV3 3.30编译运行通过
14
15 (3):本例程在 Agni 07-SV 开发板平台上成功运行通过
16
17 (4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.
18
19 (5):更多学习资源浏览:(http://www.bluepw.com 或 http://www.bluepw.cn)
20
21 ============================================================================*/
22 #include<at89x52.h>
23 #include<intrins.h>
24
25 #define uchar unsigned char
26 #define uint unsigned int
27 #define Data_lcd P0
28
29 sbit LCM_RS=P1^0;
30 sbit LCM_RW=P1^1;
31 sbit LCM_E=P1^2;
32 uchar code dig[]={"0123456789"};
33
34 void delay(uint);
35 void lcd_wait(void);
36
37 /*****************************延时K*1ms,12.000mhz**************************/
38
39 void delay(uint k)
40 {
41 1 uint i,j;
42 1 for(i=0;i<k;i++)
43 1 {
44 2 for(j=0;j<60;j++);
45 2 }
46 1 }
47
48 /***************************写数据/指令到ICM子函数*************************/
49
50 void Write(uchar X,uchar WCLCM)
51 {
52 1 lcd_wait();
53 1 Data_lcd=WCLCM;
54 1 if(X==0)
55 1 {
C51 COMPILER V8.05a LCD1602_PARALLEL 11/06/2007 16:06:02 PAGE 2
56 2 LCM_RS=0;LCM_RW=0; // 选中指令寄存器
57 2 }
58 1 else if(X==1)
59 1 {
60 2 LCM_RS=1;LCM_RW=0; // 选中数据寄存器
61 2 }
62 1 LCM_E =1;
63 1 _nop_();_nop_(); _nop_();
64 1 LCM_E =0;
65 1 }
66
67 /*****************************lcm内部等待函数*****************************/
68
69 void lcd_wait(void)
70 {
71 1 Data_lcd=0xff;
72 1 LCM_E =1;
73 1 LCM_RS=0;
74 1 LCM_RW=1;
75 1 _nop_();_nop_();_nop_();
76 1 while(Data_lcd&0x80)
77 1 {
78 2 LCM_E =0;
79 2 _nop_();_nop_();
80 2 LCM_E =1;
81 2 _nop_();_nop_();
82 2 }
83 1 LCM_E =0;
84 1
85 1 }
86
87 /******************************LCM初始化子函数***************************/
88
89 void Init_lcd()
90 {
91 1 uchar c;
92 1 delay(500);
93 1 Data_lcd=0;
94 1 delay(15);
95 1 for(c=0;c<3;c++) //三次显示模式设置,不检测忙信号
96 1 {
97 2 Data_lcd=0x38;
98 2 LCM_RS=0; // 选中指令寄存器
99 2 LCM_RW=0; // 写模式
100 2 LCM_E =1;
101 2 _nop_(); _nop_(); _nop_();
102 2 LCM_E =0;
103 2 delay(5);
104 2 }
105 1
106 1 Write(0,0x38); //8bit数据传送,2行显示,5*7字型,检测忙信号
107 1 Write(0,0x08); //关闭显示,检测忙信号
108 1 Write(0,0x01); //清屏,检测忙信号
109 1 Write(0,0x06); //显示光标右移设置,检测忙信号
110 1 Write(0,0x0c); //显示屏打开,光标不显示,不闪烁,检测忙信号
111 1 }
112
113 /* ************* 函数 Show() 对外来数据进行处理 **************************/
114 /************** 第一行:0x80--0x8f; 第二行:0xc0--0xcf********************/
115 void Show(uchar address,uchar L,uchar STR1[])
116 {
117 1 uchar i;
C51 COMPILER V8.05a LCD1602_PARALLEL 11/06/2007 16:06:02 PAGE 3
118 1 Write(0,address); for(i=0;i<L;i++) Write(1,STR1[i]);
119 1 }
120
121 /*************纯阿拉伯数字显示,参数入口:Show_dig(地址,数字)***********
122 void Show_dig(uchar address,uint number)
123 {
124 uchar buffer[8];
125 uchar j,k;
126 uchar i=0;
127 Write(0,address);
128 do{ //此子程序可以用,请看说明书
129 buffer[i++]=number%10;
130 number=number/10;
131 j=i;
132 }while(number!=0);
133 for(k=j;k>0;k--)
134 {
135 Write(1,dig[buffer[k-1]]);
136 }
137 }
138
139 ******************************主函数************************************/
140
141 void main(void)
142 {
143 1
144 1 Init_lcd();
145 1 Write(0,0x01); //清显示屏
146 1 Show(0x80,16,"www.bluepw.com ");
147 1 Show(0xc0,16,"2007.11.04 Sun ");
148 1 //Show_dig(uchar address,uint number)
149 1 while(1);
150 1 }
151
152 /***************************** end *************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 266 ----
CONSTANT SIZE = 45 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 7
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 + -