C51 COMPILER V9.60.0.0 DRIVE_1602 02/21/2022 21:12:48 PAGE 1 C51 COMPILER V9.60.0.0, COMPILATION OF MODULE DRIVE_1602 OBJECT MODULE PLACED IN .\Objects\drive_1602.obj COMPILER INVOKED BY: D:\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 //sbit rw=P2^6; 12 extern void delay_xms(int xms); 13 14 void delay_1ms(unsigned int xms)//延时函数,有参函数 15 { 16 1 delay_xms(xms); 17 1 } 18 //****液晶写入指令函数****// 19 void Write_1602_com(unsigned char com) 20 { 21 1 // rw=0; 22 1 rs=0;//数据/指令选择置为指令 23 1 lcddata=com;//送入数据 24 1 delay_1ms(1); 25 1 en=1;//拉高使能端,为制造有效的下降沿做准备 26 1 delay_1ms(1); 27 1 en=0;//en由高变低,产生下降沿,液晶执行命令 28 1 } 29 30 //***液晶写入数据函数****// 31 void Write_1602_date(unsigned char date) 32 { 33 1 // rw=0; 34 1 rs=1;//数据/指令选择置为数据 35 1 lcddata=date;//送入数据 36 1 delay_1ms(1); 37 1 en=1; //en置高电平,为制造下降沿做准备 38 1 delay_1ms(1); 39 1 en=0; //en由高变低,产生下降沿,液晶执行命令 40 1 } 41 42 /************ 写字符数据函数 ***************** 43 //功能:在lcd1602指定位置上显示字符; 44 //参数 45 //p: 指向待显示数据指针 46 //x: X坐标 47 //y: Y坐标 48 //************ *********** *****************/ 49 void WriteLcd1602_String(char x,char y,char *p) 50 { 51 1 char i=0; 52 1 if(y == 0) 53 1 { 54 2 Write_1602_com(0x80 + x); C51 COMPILER V9.60.0.0 DRIVE_1602 02/21/2022 21:12:48 PAGE 2 55 2 } 56 1 else 57 1 { 58 2 Write_1602_com(0xC0 + x); 59 2 } 60 1 while(*p != 0) 61 1 { 62 2 Write_1602_date(*p); 63 2 p++; 64 2 } 65 1 } 66 67 char xdata String_Buff[16]={0}; 68 void L1602_printf(char x,char y,char *format, ...) 69 { 70 1 va_list ap; 71 1 va_start(ap,format); 72 1 vsprintf(String_Buff,format,ap); 73 1 va_end(ap); 74 1 WriteLcd1602_String(x,y,String_Buff); 75 1 // OLED_ShowString(x,y,(u8*)LcdBuff,16); 76 1 //WriteLcd128_String(x,y,LcdBuff); 77 1 } 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 = 250 ---- CONSTANT SIZE = ---- ---- XDATA SIZE = 16 ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 30 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- C51 COMPILER V9.60.0.0 DRIVE_1602 02/21/2022 21:12:48 PAGE 3 END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)