123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 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 <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
- 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)
|