完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
公司有很多SYB12864的液晶屏,就想拿来做个东西,本来是想用STM32的,后来一直不显示,就想先拿51试试。也上网查了好些资料。用proteus仿真,可以显示,在开发板上却无论如何显示不了。调延时,查接线,都没有问题。想是不是屏是坏的,拿到车间测试了下,也是好的。不知道是哪里的问题 。
![]() ![]() ![]() ![]() 不知道大家能不能看清楚,最后我看数码管和LED灯都有显示闪烁,程序肯定是运行起来了,就是屏幕不显示。下面是程序。 #include #include #include /* ***it RS=P3^3; ***it RW=P3^2; ***it E=P3^4; ***it MCS=P3^7; ***it SCS=P3^5; */ ***it RS=P2^0; ***it RW=P2^1; ***it E=P2^2; ***it MCS=P2^3; ***it SCS=P2^4; #define LCD_BUS P0 #define uchar unsigned char #define FIRST_ADDR 0 char code ce[] = { /*-- 文字: 测 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x08, 0x31, 0x86, 0x60, 0x00, 0xFE, 0x02, 0xF2, 0x02, 0xFE, 0x00, 0xF8, 0x00, 0x00, 0xFF, 0x00, 0x04, 0xFC, 0x03, 0x00, 0x80, 0x47, 0x30, 0x0F, 0x10, 0x67, 0x00, 0x07, 0x40, 0x80, 0x7F, 0x00 }; char code shi[] = { /*-- 文字: 试 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40, 0x42, 0xDC, 0x08, 0x00, 0x90, 0x90, 0x90, 0x90, 0x90, 0xFF, 0x10, 0x12, 0x1C, 0x10, 0x00, 0x00, 0x00, 0x7F, 0x20, 0x10, 0x20, 0x20, 0x1F, 0x10, 0x10, 0x01, 0x06, 0x18, 0x20, 0x78, 0x00 }; char code kai[] = { /*-- 文字: 开 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x40, 0x42, 0x42, 0x42, 0x42, 0xFE, 0x42, 0x42, 0x42, 0x42, 0xFE, 0x42, 0x42, 0x42, 0x42, 0x00, 0x00, 0x40, 0x20, 0x10, 0x0C, 0x03, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00 }; char code shi3[]= { /*-- 文字: 始 --*/ /*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/ 0x10, 0x90, 0x70, 0x1F, 0x12, 0xF0, 0x00, 0x20, 0x70, 0x28, 0x27, 0x22, 0x28, 0x70, 0x20, 0x00, 0x40, 0x21, 0x12, 0x0C, 0x06, 0x09, 0x30, 0x00, 0x7F, 0x21, 0x21, 0x21, 0x21, 0x7F, 0x00, 0x00 }; void chk_busy() { RS=0; RW=1; E=1; LCD_BUS=0x00; while((LCD_BUS&0x80)==0x80); E=0; } void delay(unsigned int t) { unsigned int i,j; for(i=0;i ; } void write_com(uchar cmdcode) { chk_busy(); RS=0; RW=0; E=1; LCD_BUS=cmdcode; delay(10); E=0; delay(10); } void write_data(uchar Dispdata) { chk_busy(); RS=1; RW=0; E=1; LCD_BUS=Dispdata; delay(10); E=0; delay(10); } void lcdreset() { delay(2000); write_com(0x30); delay(10); write_com(0x30); delay(10); write_com(0x0c); delay(10); write_com(0x01); delay(10); write_com(0x06); delay(10); } void hz_disp16(uchar pag,uchar col,uchar code *hzk) { uchar i=0,j=0; for(j=0;j<2;j++) { write_com(0xb8+pag+j); write_com(0x40+col); for(i=0;i<16;i++) write_data(hzk[16*j+i]); } } /* void hzkdis(uchar code*s) { while(*s!=' |