89C52单片机液晶汉字显示c语言程序.txt
《89C52单片机液晶汉字显示c语言程序.txt》由会员分享,可在线阅读,更多相关《89C52单片机液晶汉字显示c语言程序.txt(19页珍藏版)》请在文库网上搜索。
1、89C52c *4*12 /* TGLCMLIMIT64A ;*c* ;: ;*LCM-89C52* *LCM-89C52* *LCM-89C52* *LCM-89C52* * ;*DB0-P0.0* *DB4-P0.4* *D/I-P2.6* *CS1-P2.4* * ;*DB1-P0.1* *DB5-P0.5* *R/W-P2.7* *CS2-P2.5* * ;*DB2-P0.2* *DB6-P0.6* *RST-VCC* *CS3-P3.2* * ;*DB3-P0.3* *DB7-P0.7* *E-P2.3* * ;:89C5212MHz * ;*c*/ /avrc /*#pragma
2、src /*ASM, */ #include #include #include #define Uchar unsigned char /*/ sbit Elcm= P23; / sbit CS1LCM= P24; / sbit CS2LCM= P25; / sbit CS3LCM= P32; /*/ sbit Dilcm= P26; / sbit Rwlcm= P27; / sfr Datalcm= 0x80; / unsigned char testi=; /*/ #define DISPON 0x3f /*on */ #define DISPOFF 0x3e /*off */ #def
3、ine DISPFIRST 0xc0 /* */ #define SETX 0x40 /*X趨 */ #define SETY 0xb8 /*Y趨 */ #define Lcdbusy 0x80 /*LCM */ /*/ #define MODL 0x00 /* */ #define MODM 0x40 /* */ #define MODR 0x80 /* */ #define LCMLIMIT 0xC0 /* */ /*/ Uchar col,row,cbyte; /*x,()y, */ bit xy; /*1 */ /*/ void Lcminit(void); /* */ void De
4、lay(Uchar); /*Ms */ void lcdbusyL(void); /*busy() */ void lcdbusyM(void); /*busy() */ void lcdbusyR(void); /*busy() */ void Putedot(Uchar); /* */ void Putcdot(Uchar); /*() */ void Wrdata(Uchar); /*LCM */ void Lcmcls( void ); /*LCM(0) */ void wtcom(void); /*busy */ void Locatexy(void); /* */ void Wrc
5、mdL(Uchar); /* */ void WrcmdM(Uchar); /* */ void WrcmdR(Uchar); /* */ void Putstr(Uchar *puts,Uchar i); /* */ void Rollscreen(Uchar x); /* */ void Rddata(void); /* */ void Linehv(Uchar length); /*() */ void point(void); /* */ void Linexy(Uchar endx,Uchar endy); /*/ Uchar code Ezk; /*ASCII */ Uchar c
6、ode Hzk; /* */ Uchar code STR1; /* */ Uchar code STR2; / Uchar code STR3; / Uchar code STR4; / /*/ /* c */ /*/ void main(void) Uchar x,y; col=0; row=0; Delay(40); /*40Ms, */ Lcminit(); /*/ Putstr(STR2,24); /*24 */ col=0; row=2; Putstr(STR1,12); /*12 */ col=0; row=4; Putstr(STR3,24); /*24 */ col=0; r
7、ow=6; Putstr(STR4,24); /*12 */ x=0; col=0; row=0; xy = 1; /* */ Linehv(192); /*(0,0)-(191,0) */ col=0; row=15; xy = 1; Linehv(192); /*(0,15)-(191,15) */ col=0; row=32; xy = 1; Linehv(192); /*(0,32)-(191,32) */ col=0; row=1; xy = 0; /* */ Linehv(31); /*(0,1)-(0,31) */ col=191; row=1; xy = 0; Linehv(3
8、1); /*(191,1)-(191,31) */ col=0; /*趨 */ row=63; Linexy(44,31); /*(0,63)-(44,31) */ col=44; row=31; Linexy(190,62); /*(44,31)-(191,63) */ while(1) Rollscreen(y); /*/ y+; y %=8; x=testiy; Delay(100); /* */ ; /*/ /* */ /*/ void Linexy(Uchar endx,Uchar endy) register Uchar t; int xerr=0,yerr=0,delta_x,d
9、elta_y,distance; Uchar incx,incy; /* compute the distance in both directions */ delta_x=endx-col; delta_y=endy-row; /* compute the direction of the increment , an increment of 0 means either a vertical or horizontal lines */ if(delta_x0) incx=1; else if( delta_x=0 ) incx=0; else incx=-1; if(delta_y0
10、) incy=1; else if( delta_y=0 ) incy=0; else incy=-1; /* determine which distance is greater */ delta_x = cabs( delta_x ); delta_y = cabs( delta_y ); if( delta_x delta_y ) distance=delta_x; else distance=delta_y; /* draw the line */ for( t=0;t distance ) xerr-=distance; col+=incx; if( yerr distance )
11、 yerr-=distance; row+=incy; /*/ /*XY */ /*/ void Linehv(Uchar length) Uchar xs,ys; if (xy)ys = col; for (xs=0;xslength;xs+) col = ys + xs; point(); else xs = row; for (ys=0;ys3; /*Y */ Rddata(); y=y1&0x07; /* */ x=0x01; x=xy; /* */ Wrdata(cbyte|x); /* */ col=x1; /*xy */ row=y1; /*/ /* */ /*/ void Ro
12、llscreen(Uchar x) cbyte = DISPFIRST|x; /*x?*/ WrcmdL(cbyte); WrcmdM(cbyte); WrcmdR(cbyte); /*/ /* */ /*/ void Putstr(Uchar *puts,Uchar i) Uchar j,X; for (j=0;ji;j+) X = putsj; if (X&0x80) Putcdot(X&0x7f); /*7*/ else Putedot(X-0x20); /*ascii0x20*/ /*/ /* */ /*/ void Putedot(Uchar Order) Uchar i,baker
13、x,bakery; /*4 */ int x; /*UCHAR */ bakerx = col; /*x,y */ bakery = row; x=Order * 0x10; /*16 */ /*8 */ for(i=0;i7) row=0; /*磬 */ /* */ col = bakerx; /* */ row = bakery+1; /* */ /*8 */ for(i=0;i7) row=1; /*磬 */ /* */ row=bakery; /* */ /*/ /* */ /*/ void Putcdot(Uchar Order) Uchar i,bakerx,bakery; /*3
14、 */ int x; /*UCHAR */ bakerx = col; /*x,y */ bakery = row; x=Order * 0x20; /*32 */ /*16 */ for(i=0;i6) row=0; /*磬 */ /* */ /*16 */ col = bakerx; row = bakery+1; for(i=0;i7) row=1; /*磬 */ /* */ row = bakery; /* */ /*/ /* */ /*/ void Lcmcls( void ) for(row=0;row8;row+) for(col=0;colLCMLIMIT;col+) Wrda
15、ta(0); /*/ /* */ /*/ void Rddata(void) Locatexy(); /* */ Datalcm=0xFF; Dilcm = 1; /*/ Rwlcm = 1; /*/ Elcm = 1; /*LCM*/ _nop_(); cbyte = Datalcm; /* */ Elcm = 0; Locatexy(); /* */ Datalcm=0xFF; _nop_(); Dilcm = 1; /*/ Rwlcm = 1; /*/ Elcm = 1; /*LCM*/ _nop_(); cbyte = Datalcm; /* */ Elcm = 0; /*/ /* *
16、/ /*/ void Wrdata(Uchar X) Locatexy(); /* */ / wtcom(); Dilcm = 1; /*/ Rwlcm = 0; /* */ Datalcm = X; /* */ Elcm = 1; /*LCM*/ _nop_(); Elcm = 0; /*/ /* */ /*/ /*void Wrcmd(Uchar X) / / Locatexy(); /* */ / wtcom(); /*LCM */ / Dilcm = 0; /* */ / Rwlcm = 0; /* */ / Datalcm = X; /* */ / Elcm = 1;_nop_();
17、Elcm = 0; /*LCM*/ / /*/ /* */ /*/ void WrcmdL(Uchar X) lcdbusyL(); /*/ Dilcm = 0; /* */ Rwlcm = 0; /* */ Datalcm = X; /* */ Elcm = 1;_nop_();Elcm = 0; /*LCM*/ /*/ /* */ /*/ void WrcmdM(Uchar X) lcdbusyM(); /*/ Dilcm = 0; /* */ Rwlcm = 0; /* */ Datalcm = X; /* */ Elcm = 1;_nop_();Elcm = 0; /*LCM*/ /*
18、/ /* */ /*/ void WrcmdR(Uchar X) lcdbusyR(); /* */ Dilcm = 0; /* */ Rwlcm = 0; /* */ Datalcm = X; /* */ Elcm = 1;_nop_();Elcm = 0; /*LCM*/ /*c*/ /* , */ /*/ void lcdbusyL(void) CS1LCM = 0; /*CLR CS1 */ CS2LCM = 1; /*SETB CS2 */ CS3LCM = 1; /*SETB CS3 */ wtcom(); /* waitting for enable */ void lcdbus
19、yM(void) CS1LCM = 1; /*SETB CS1 */ CS2LCM = 0; /*CLR CS2 */ CS3LCM = 1; /*SETB CS3 */ wtcom(); /* waitting for enable */ void lcdbusyR(void) CS1LCM = 1; /*SETB CS1 */ CS2LCM = 1; /*SETB CS2 */ CS3LCM = 0; /*CLR CS3 */ wtcom(); /* waitting for enable */ void wtcom(void) Dilcm = 0; /*CLR DI */ Rwlcm =
20、 1; /*SETB RW */ Datalcm = 0xFF; /*MOV DATA_LCM,#0FFH */ Elcm = 1;_nop_(); while(Datalcm & Lcdbusy); Elcm = 0; /*c*/ /*趨LCM */ /*/ void Locatexy(void) unsigned char x,y; switch (col&0xc0) /* col.and.0xC0 */ /* */ case 0: lcdbusyL();break; /* */ case 0x40: lcdbusyM();break; /* */ case 0x80: lcdbusyR(
21、);break; /* */ x = col&0x3F|SETX; /* col.and.0x3f.or.setx */ y = row&0x07|SETY; /* row.and.0x07.or.sety */ wtcom(); /* waitting for enable */ Dilcm = 0; /*CLR DI */ Rwlcm = 0; /*CLR RW */ Datalcm = y; /*MOV P0,Y */ Elcm = 1;_nop_();Elcm = 0; wtcom(); /* waitting for enable */ Dilcm = 0; /*CLR DI */
22、Rwlcm = 0; /*CLR RW */ Datalcm = x; /*MOV P0,X */ Elcm = 1;_nop_();Elcm = 0; /*/ /* */ /*/ void Lcminit(void) cbyte = DISPOFF; /* */ WrcmdL(cbyte); WrcmdM(cbyte); WrcmdR(cbyte); cbyte = DISPON; /* */ WrcmdL(cbyte); WrcmdM(cbyte); WrcmdR(cbyte); cbyte = DISPFIRST; /* */ WrcmdL(cbyte); WrcmdM(cbyte);
23、WrcmdR(cbyte); Lcmcls(); col=0; /* */ row=0; Locatexy(); /*/ /* */ /*/ void Delay(Uchar MS) Uchar us,usn; while(MS!=0) usn = 4; while(usn!=0) us=0xf0; while (us!=0)us-; usn-; MS-; /*/ / */ /*/ Uchar code STR1= 0x80,0x81,0x82,0x83,0x84,0x85, 0x86,0x87,0x88,0x89,0x8a,0x8B ; Uchar code STR2=Our friend
24、over the wold; Uchar code STR3=Program by Keil C51 6.12; Uchar code STR4=Thank you v 1234567890; /*/ /* */ /*/ Uchar code Hzk= /* C3515 0 */ 0x04,0x04,0xC4,0x44,0x5F,0x44,0x44,0xF4, 0x44,0x4F,0x54,0x64,0x44,0x46,0x04,0x00, 0x80,0x40,0x3F,0x00,0x40,0x40,0x20,0x20, 0x13,0x0C,0x18,0x24,0x43,0x80,0xE0,0
25、x00, /* C4843 1 */ 0x00,0xFE,0x4A,0x4A,0x00,0xFE,0xEA,0xAA, 0xAA,0xFE,0x00,0x4A,0x4A,0xFE,0x00,0x00, 0x02,0x83,0x42,0x22,0x12,0x1B,0x02,0x02, 0x02,0x0B,0x12,0x22,0x62,0xC3,0x02,0x00, /* C2590 2 */ 0x00,0xFE,0x02,0xD2,0x52,0x52,0xD2,0x3E, 0xD2,0x16,0x1A,0x12,0xFF,0x02,0x00,0x00, 0x00,0xFF,0x50,0x53,0
26、x52,0x4A,0x6B,0x50, 0x4F,0x54,0x7B,0x40,0xFF,0x00,0x00,0x00, /* C2842 3 */ 0x00,0xFE,0x22,0xD2,0x0E,0x20,0xB8,0x4F, 0xB2,0x9E,0x80,0x9F,0x72,0x8A,0x06,0x00, 0x00,0xFF,0x04,0x08,0x07,0x21,0x12,0x0A, 0x46,0x82,0x7E,0x06,0x0A,0x12,0x31,0x00, /* C0308 4 */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0
27、xC0,0x30,0x08,0x04,0x02,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0x0C,0x10,0x20,0x40,0x00,0x00, /* C2567 5 */ 0x00,0x00,0xFC,0x44,0x54,0x54,0x7C,0x55, 0xD6,0x54,0x7C,0x54,0x54,0x44,0x44,0x00, 0x80,0x60,0x1F,0x80,0x9F,0x55,0x35,0x15, 0x1F,0x15,0x15,0x35,0x5F,0x80,0x00,0x00, /* C2
28、211 6 */ 0x00,0x08,0xE8,0xA8,0xA8,0xA8,0xA8,0xFF, 0xA8,0xA8,0xA8,0xA8,0xE8,0x0C,0x08,0x00, 0x00,0x40,0x23,0x12,0x0A,0x06,0x02,0xFF, 0x02,0x06,0x0A,0x12,0x23,0x60,0x20,0x00, /* C0309 7 */ 0x00,0x00,0x02,0x04,0x08,0x30,0xC0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x40,0x20,0x10,0x0C,0
29、x03,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* C5148 8 */ 0x04,0x04,0x04,0x84,0xE4,0x3C,0x27,0x24, 0x24,0x24,0x24,0xF4,0x24,0x06,0x04,0x00, 0x04,0x02,0x01,0x00,0xFF,0x09,0x09,0x09, 0x09,0x49,0x89,0x7F,0x00,0x00,0x00,0x00, /* C4762 9 */ 0x00,0xFE,0x02,0x22,0xDA,0x06,0x00,0xFE, 0x92,0x92,0x92,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 89 C52 单片机 液晶 汉字 显示 语言 程序