123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 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 <stdarg.h> // 标准头文件
- 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)
|