?? 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 + -