📄 1602.lst
字号:
C51 COMPILER V8.02 1602 08/16/2008 10:02:49 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 1602
OBJECT MODULE PLACED IN 1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602.c BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 //单行或双行显示
2 //显示的起始位置设定
3 //屏幕左右移动,动画效果
4 //给定一个字符数组,如何通过strlen()来判断字符串的长度?这样在for初始化时,也许可以简化程序
5 //最后的一行,会再次显一遍,又返回到了第一行
6 #include <at89x51.h>
7 #include <intrins.h>
8 #define uchar unsigned char
9 sbit lcd_RS=P2^5; //定义寄存器
10 sbit lcd_RW=P2^6; //定义是否读写
11 sbit lcd_E=P2^7; //定义使能端
12 sbit lcd_flag=P0^7; //定义是否Busy标志
13 uchar code dis[]="Hello everyone, my name is gaogao. This is really a great honor to have this opportunity
-.Hope you will learn something from this program.Sduty right now or lose the chance next second!Come on!";
14 bit lcd_busy() //判断是否忙碌 RS=Low,RW=High,E=High:读状态
15 {
16 1 bit flag;
17 1 lcd_RS=0; //寄存器为Low
18 1 lcd_RW=1; //是否读写为High
19 1 lcd_E=1; //使能端为High
20 1 if (lcd_flag==1) flag=1;
21 1 else flag=0;
22 1 lcd_E=0;
23 1 return flag; //返回标志,判断是否LCD忙碌
24 1 }
25 void lcd_putcommand(uchar command) //写指令 RS=Low,RW=Low,E=High:写指令
26 {
27 1 while (lcd_busy()); //判断是否忙碌
28 1 lcd_RS=0;
29 1 lcd_RW=0;
30 1 lcd_E=0;
31 1 P0=command;
32 1 lcd_E=1;
33 1 lcd_E=0;
34 1 }
35 void lcd_putchar(uchar putchar) //写数据 RS=High,RW=Low,E=High:写数据
36 {
37 1 while(lcd_busy()); //判断是否忙碌
38 1 lcd_RS=1;
39 1 lcd_RW=0;
40 1 lcd_E=0;
41 1 P0=putchar;
42 1 lcd_E=1;
43 1 lcd_E=0;
44 1 }
45 void lcd_moveto(uchar x,uchar y) //显示字符的位置:第x行y列(X=1或2,Y=1~16)
46 {
47 1 if (x==0) lcd_putcommand(0x80|y-1); //第一行,并初始化从第y-1个字符开始显示
48 1 if (x==1) lcd_putcommand(0xc0|y-1); //第二行,并............
49 1 }
50 void lcd_delay(int ms) //延时函数
51 {
52 1 uchar i;
53 1 while(ms--)
54 1 {
C51 COMPILER V8.02 1602 08/16/2008 10:02:49 PAGE 2
55 2 for(i=0;i<250;i++)
56 2 {
57 3 _nop_();_nop_();_nop_();_nop_();
58 3 }
59 2 }
60 1 }
61 void lcd_init(void)
62 {
63 1 lcd_putcommand(0x38); lcd_delay(1); //LCD为2行,5×7字
64 1 lcd_putcommand(0x0e); //打开显示,显示光标,光标不闪
65 1 // lcd_putcommand(0x0f); //....................光标闪烁
66 1 lcd_delay(1);
67 1 lcd_putcommand(0x06); lcd_delay(1);//每次右移一字符
68 1
69 1 }
70 void main(void)
71 {
72 1 uchar *app,*p;
73 1 lcd_init(); //初始化
74 1 // lcd_delay(10);
75 1 app=dis;
76 1 while(*app!='\0')
77 1 {
78 2 /************第一行***************/
79 2 lcd_moveto(0,1);
80 2 // lcd_putcommand(0x08); //在显示数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -