谢谢分享 |
1602显示汉字比较勉强啊 |
谢谢分享!实力超强! |
w358435135 发表于 2018-12-25 18:27 下面是重新修整过的代码,此例的目地是让他家了解一下LCD1602动态显示 #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RS = P2^5; sbit RW = P2^6; sbit EN = P2^7; uchar Data2[15]="jinsheng7533967"; //---------自定义的字符数据------ uchar code CGCODE[]={ 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,//显示年0x00 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13,0x00,//显示月0x01 0x0F,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00 //显示日0x02 }; //-----------函数的声明------------------ void DelayMS(uint dly); void User_def(void); //----------液晶模块的声明--------------- bit BUSY(void); void Write_cmd(uchar cmd); void Write_dat(uchar dat); void LCD_Init(void); void main(void) { uchar i, k; LCD_Init(); User_def(); //将自定义的字符写入CGRAM while(1) { Write_cmd(0x83); Write_dat(0x32); // 2 Write_dat(0x30); // 0 Write_dat(0x31); // 1 Write_dat(0x38); // 8 Write_dat(0x00); //显示 年 Write_dat(0x31); // 1 Write_dat(0x32); // 2 Write_dat(0x01); //显示 月 Write_dat(0x31); Write_dat(0x31); Write_dat(0x02); Write_cmd(0xc3); Write_dat(0x02); Write_dat(0x31); Write_cmd(0xc1); for(i=0;i<15;i++) Write_dat(Data2); Write_cmd(0x8b); Write_dat(0x30+k/10); Write_dat(0x31+k%10); DelayMS(200); DelayMS(200); DelayMS(200); if(k>30)k=0; else k++; } } void DelayMS(uint dly) { uint x,y; for(x=dly;x>0;x--) for(y=124;y>0;y--); } bit BUSY(void) { bit Bit; RS = 0; RW = 1; EN = 1; DelayMS(1); Bit = (bit)(P0 & 0x80); //最高位为忙信号位 EN = 0; return Bit; } void Write_cmd(uchar cmd) { while(BUSY()); //测忙 RS = 0; RW = 0; EN = 0; P0 = cmd; EN = 1; DelayMS(1); EN = 0; } void Write_dat(uchar dat) { while(BUSY()); //测忙 RS = 1; RW = 0; EN = 0; P0 = dat; EN = 1; DelayMS(1); EN = 0; } void LCD_Init(void) { Write_cmd(0x38); //功能设置 DelayMS(1); Write_cmd(0x0c); //显示开关控制 DelayMS(1); Write_cmd(0x06); //输入方式设置 DelayMS(1); Write_cmd(0x01); //清除LCD的显示内容 DelayMS(1); } void User_def(void) { uchar i; Write_cmd(0x40); //设置CGRAM地址 for(i=0;i<24;i++) { Write_dat(CGCODE); } } |
文件不全啊 user_def()函数没啊 |
文件打不开???? |