代码
1 #include <reg51.h> 2 #include <intrins.h> 3 #define uchar unsigned char 4 #define uint unsigned int 5 #define out P0 6 7 /* 8 RS:寄存器选择输入端 9 RS=1:指向数据寄存器 10 RS=0:指向指令寄存器 11 12 RW:读写控制输入端 13 RW=0:写操作 RW=1:读操作 14 15 E:使能信号输入端 16 读操作时,高电平有效; 17 写操作时,下降沿有效; 18 */ 19 sbit RS=P2^0; //位变量;输出端RS作用是存放控制信息,体现当前指令执行寄存器结果的各种状态信息,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 20 sbit RW=P2^1; //位变量;输出端RW作用是读写信号,,高电平1时进行读操作 21 sbit E=P2^2; //位变量;输出端E作用是作为输入引脚,,只有该引脚激活,芯片才能工作,通常情况下为高电平有效,若符号负跳变时,则表示低电平有效。 22 void lcd_initial(void); //led1602初始化函数 23 void check_busy(void); //检查忙标志函数???? 24 void write_command(uchar com); //写命令函数 25 void write_date(uchar dat); //写数据函数 26 void string(uchar ad,uchar *s); //显示字符串函数 27 void delay(uint); //延时函数 28 29 void main (void) 30 { 31 lcd_initial(); //调用初始化函数。 32 while(1) 33 { 34 string(0x82,"wo ai nan jing"); //第一行显示 35 string(0xC3,"2021/11/15"); //第二行显示 36 delay(100); //延时 37 write_command(0x01); //写清屏函数 38 delay(100); //延时 39 } 40 } 41 42 43 //延时函数 44 void delay(uint j) //1ms的延时函数,j=? 45 { 46 uchar i=250; 47 for(;j>0;j--) 48 { 49 while(--i); 50 i=249; 51 while(--i); 52 i=250; 53 } 54 } 55 56 57 void check_busy(void) //检查忙标志函数 58 { 59 uchar dt; 60 do 61 { 62 dt=0xff; 63 E=0; 64 RS=0; 65 RW=1; 66 E=1; 67 dt=out; 68 } 69 while (dt&0x80); // 70 E=0; 71 } 72 73 //写命令函数 74 void write_command(uchar com) 75 { 76 check_busy(); 77 E=0; 78 RS=0; 79 RW=0; 80 out=com; 81 E=1; 82 _nop_(); 83 E=0; 84 delay(1); 85 } 86 87 //显示数据函数 88 void write_data(uchar dat) 89 { 90 check_busy(); 91 E=0; 92 RS=1; 93 RW=0; 94 out=dat; 95 E=1; 96 _nop_(); 97 E=0; 98 delay(1); 99 } 100 101 //led1602 液晶初始化 102 void lcd_initial (void) 103 { 104 write_command(0x38); //8位两行字符 全部显示 105 _nop_(); 106 write_command(0x0c); //开整体显示,光标关,无闪烁 107 _nop_(); 108 write_command(0x06); //光标右移 109 _nop_(); 110 write_command(0x01); //清屏 111 _nop_(); 112 delay(1); 113 } 114 115 void string(uchar ad,uchar *s) 116 { 117 write_command(ad); 118 while(*s>0) 119 { 120 write_data(*s++); 121 delay(100); 122 } 123 }
截图