C51 COMPILER V9.54 DRIVE_1602 02/17/2022 16:20:57 PAGE 1 C51 COMPILER V9.54, COMPILATION OF MODULE DRIVE_1602 OBJECT MODULE PLACED IN .\Objects\drive_1602.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE drive_1602.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listing -s\drive_1602.lst) TABS(2) OBJECT(.\Objects\drive_1602.obj) line level source 1 #include "drive_1602.h" 2 3 #include // 标准头文件 4 #include "stdio.h" 5 #include "string.h" 6 7 #define lcddata P1 8 9 sbit rs=P2^7; 10 sbit en=P2^6; 11 12 void delay_1ms(unsigned int xms)//延时函数,有参函数 13 { 14 1 unsigned char i, j; 15 1 while(xms--) 16 1 { 17 2 _nop_(); 18 2 _nop_(); 19 2 _nop_(); 20 2 i = 11; 21 2 j = 190; 22 2 do 23 2 { 24 3 while (--j); 25 3 } while (--i); 26 2 } 27 1 } 28 //****液晶写入指令函数****// 29 void Write_1602_com(unsigned char com) 30 { 31 1 // rw=0; 32 1 rs=0;//数据/指令选择置为指令 33 1 lcddata=com;//送入数据 34 1 delay_1ms(1); 35 1 en=1;//拉高使能端,为制造有效的下降沿做准备 36 1 delay_1ms(1); 37 1 en=0;//en由高变低,产生下降沿,液晶执行命令 38 1 } 39 40 //***液晶写入数据函数****// 41 void Write_1602_date(unsigned char date) 42 { 43 1 // rw=0; 44 1 rs=1;//数据/指令选择置为数据 45 1 lcddata=date;//送入数据 46 1 delay_1ms(1); 47 1 en=1; //en置高电平,为制造下降沿做准备 48 1 delay_1ms(1); 49 1 en=0; //en由高变低,产生下降沿,液晶执行命令 50 1 } 51 52 /************ 写字符数据函数 ***************** 53 //功能:在lcd1602指定位置上显示字符; 54 //参数 C51 COMPILER V9.54 DRIVE_1602 02/17/2022 16:20:57 PAGE 2 55 //p: 指向待显示数据指针 56 //x: X坐标 57 //y: Y坐标 58 //************ *********** *****************/ 59 void WriteLcd1602_String(char x,char y,char *p) 60 { 61 1 char i=0; 62 1 if(y == 0) 63 1 { 64 2 Write_1602_com(0x80 + x); 65 2 } 66 1 else 67 1 { 68 2 Write_1602_com(0xC0 + x); 69 2 } 70 1 while(*p != 0) 71 1 { 72 2 Write_1602_date(*p); 73 2 p++; 74 2 } 75 1 } 76 77 78 //***液晶初始化函数****// 79 void lcd1602_init() 80 { 81 1 Write_1602_com(0x38);//设置液晶工作模式,意思:16*2行显示,5*7点阵,8位数据 82 1 delay_1ms(1); 83 1 Write_1602_com(0x0c);//开显示不显示光标 84 1 delay_1ms(1); 85 1 Write_1602_com(0x06);//整屏不移动,光标自动右移 86 1 delay_1ms(1); 87 1 Write_1602_com(0x01);//清显示 88 1 delay_1ms(1); 89 1 Write_1602_com(0x80); 90 1 delay_1ms(1); 91 1 92 1 } 93 void LCD1602_Write_address(unsigned char x,unsigned char y) 94 { 95 1 x&=0x0f; //列地址限制在0-15间 96 1 y&=0x01; //行地址限制在0-1间 97 1 if(y==0) //如果是第一行 98 1 Write_1602_com(x|0x80); //将列地址写入 99 1 else //如果是第二行 100 1 Write_1602_com((x+0x40)|0x80); //将列地址写入 101 1 } 102 void LCD1602_Disp(unsigned char x,unsigned char y,unsigned char buf) 103 { 104 1 LCD1602_Write_address(x,y); //先将地址信息写入 105 1 Write_1602_date(buf); //再写入要显示的数据 106 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 172 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 2 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- C51 COMPILER V9.54 DRIVE_1602 02/17/2022 16:20:57 PAGE 3 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)