lcdshow.lst
来自「含有大量的单片机代码」· LST 代码 · 共 178 行
LST
178 行
C51 COMPILER V7.06 LCDSHOW 12/01/2006 20:21:45 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCDSHOW
OBJECT MODULE PLACED IN LCDShow.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCDShow.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 /***************************************************************************/
3
4 #include <REG51.H>
5 #include <intrins.h>
6 #include "string.h"
7 //Port Definitions**********************************************************
8 sbit LcdRs = P1^0;
9 sbit LcdRw = P1^1;
10 sbit LcdEn = P1^2;
11 sfr DBPort = 0x80; //P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
12
13 sbit LcdLight = DBPort^4;
14
15 void Delay1ms(unsigned int count)
16 {
17 1 unsigned int i,j;
18 1 for(i=0;i<count;i++)
19 1 for(j=0;j<120;j++);
20 1 }
21 //内部等待函数**************************************************************************
22 unsigned char LCD_Wait(void)
23 {
24 1 LcdRs=0;
25 1 LcdRw=1; _nop_();
26 1 LcdEn=1; _nop_();
27 1 while(DBPort&0x80); //或do{ACC=DBPort;} while(ACC_7==1); 忙信号??为1忙
28 1 LcdEn=0;
29 1 Delay1ms(1);
30 1 return ACC;
31 1 }
32 //向LCD写入命令或数据************************************************************
33 #define LCD_COMMAND 0x00 // Command
34 #define LCD_DATA 0x01 // Data
35 #define LCD_CLEAR_SCREEN 0x01 // 清屏
36 #define LCD_HOMING 0x02 // 光标返回原点
37 void LCD_Write(unsigned char style, unsigned char input)
38 {
39 1 LcdRs=style;
40 1 LcdRw=0; _nop_();
41 1 LcdEn=1; _nop_();
42 1 DBPort=input; _nop_();
43 1 LcdEn=0; _nop_();
44 1 LCD_Wait();
45 1 }
46
47 //设置显示模式************************************************************
48 #define LCD_SHOW 0x04 //显示开
49 #define LCD_HIDE 0x00 //显示关
50
51 #define LCD_CURSOR 0x02 //显示光标
52 #define LCD_NO_CURSOR 0x00 //无光标
53
54 #define LCD_FLASH 0x01 //光标闪动
55 #define LCD_NO_FLASH 0x00 //光标不闪动
C51 COMPILER V7.06 LCDSHOW 12/01/2006 20:21:45 PAGE 2
56
57 void LCD_SetDisplay(unsigned char DisplayMode)
58 {
59 1 LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
60 1 }
61
62 //设置输入模式************************************************************
63 #define LCD_AC_UP 0x02
64 #define LCD_AC_DOWN 0x00 // default
65
66 #define LCD_MOVE 0x01 // 画面可平移
67 #define LCD_NO_MOVE 0x00 //default
68
69 void LCD_SetInput(unsigned char InputMode)
70 {
71 1 LCD_Write(LCD_COMMAND, 0x04|InputMode);
72 1 }
73
74 //移动光标或屏幕************************************************************
75 #define LCD_CURSOR 0x02
76 #define LCD_SCREEN 0x08
77 #define LCD_LEFT 0x00
78 #define LCD_RIGHT 0x04
79 void LCD_Move(unsigned char object, unsigned char direction)
80 {
81 1 if(object==LCD_CURSOR)
82 1 LCD_Write(LCD_COMMAND,0x10|direction);
83 1 if(object==LCD_SCREEN)
84 1 LCD_Write(LCD_COMMAND,0x18|direction);
85 1 }
86
87 //初始化LCD************************************************************
88 void LCD_Initial()
89 {
90 1 LcdEn=0;
91 1 Delay1ms(80);
92 1 LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
93 1 Delay1ms(10);
94 1 LCD_Write(LCD_COMMAND,0x38);
95 1 Delay1ms(10);
96 1 LCD_SetDisplay(LCD_SHOW|LCD_CURSOR); //开启显示, 无光标
97 1 //LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
98 1 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
99 1 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
100 1 }
101
102 //************************************************************************
103 void GotoXY(unsigned char x, unsigned char y)//y是行 ,x是列
104 {
105 1 if(y==0)
106 1 LCD_Write(LCD_COMMAND,0x80|x);
107 1 if(y==1)
108 1 LCD_Write(LCD_COMMAND,0x80|(x-0x40));
109 1 }
110 void Print(unsigned char *str)
111 {
112 1 while(*str!='\0')
113 1 {
114 2 LCD_Write(LCD_DATA,*str);
115 2 str++;
116 2 }
117 1 }
C51 COMPILER V7.06 LCDSHOW 12/01/2006 20:21:45 PAGE 3
118 void LCD_LoadChar(unsigned char user[8], unsigned char place)
119 {
120 1 unsigned char i;
121 1 LCD_Write(LCD_COMMAND,0x40|(place*8));
122 1 for(i=0; i<8; i++)
123 1 LCD_Write(LCD_DATA,user[i]);
124 1 }
125 //************************************************************************
126 main()
127 {
128 1 //unsigned char str1[17];
129 1 unsigned char str[]=" Six Boys ";
130 1 unsigned char strlc[]=" Good Luck! ";
131 1 LCD_Initial();
132 1 while(1)
133 1 {
134 2 GotoXY(0, 0);
135 2 Print(str);
136 2 if(strlen(str)>16)
137 2 Print(str+16);
138 2
139 2 GotoXY(0, 1);
140 2 Print(strlc);
141 2 if(strlen(strlc)>16)
142 2 Print(strlc+16);
143 2
144 2 //LCD_LoadChar(str, 0);
145 2 }
146 1
147 1 }
148
149
150
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 420 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 35
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?