首页 [最新]hd44780 lcd源法度模范

[最新]hd44780 lcd源法度模范

举报
开通vip

[最新]hd44780 lcd源法度模范[最新]hd44780 lcd源法度模范 HD44780 LCD源程序 /* LCD 型号:HD44780 */ /*打印机型号: EPSON M311 */ #include #include #include #define uchar unsigned char #define uint unsigned int //定义8255I/O端口地址 #define PCC8255 XBYTE[0x007f] //8255命令口地址 #define PC8255 XBYTE[0x007e] //8...

[最新]hd44780 lcd源法度模范
[最新]hd44780 lcd源法度模范 HD44780 LCD源程序 /* LCD 型号:HD44780 */ /*打印机型号: EPSON M311 */ #include #include #include #define uchar unsigned char #define uint unsigned int //定义8255I/O端口地址 #define PCC8255 XBYTE[0x007f] //8255命令口地址 #define PC8255 XBYTE[0x007e] //8255的PC口地址 #define PB8255 XBYTE[0x007d] //8255的PC口地址 #define PA8255 XBYTE[0x007c] //8255的PC口地址 sfr RPCTL = 0xD8; sbit RPCTL_5 = RPCTL^5; sbit LS164A = P2^5; sbit LS164cp = P2^6; sbit Print_busy = P3^3; sbit IC_RST = P1^1; sbit IC_CLK = P1^0; sbit IC_IO = P1^2; sbit IC_PGM = P3^2; uchar code table1[16]="FEDCBA9870123456"; uchar code table2[16]="0000123456789ABC"; void INIT_8255(void); /*初始化8255*/ void LcdInit(void); /* LCD初始化函数 */ void LcdCmd(uchar); /* LCD控制命令函数 */ void LcdData(uchar); /* LCD数据输入函数 */ void LcdClr(void); /* LCD清屏函数 */ void LcdStr(uchar *); /* 显示字符串函数 */ void LcdDisp(uchar x,uchar d); void Delay_msec(uint x); /* 延时函数 */ uchar Getkey(void); /*键盘函数 */ void PrintInit(void); /*打印初始化函数*/ void PrintData (uchar d); /*打印函数*/ void PrintString(uchar *p); //打印字符串 void LcdDisp(uchar x,uchar d) //指定位置显示字符 x:LCD位置 d:字符 { if(x<9) { LcdCmd(0x80 + x); LcdData(d); } else { LcdCmd(0xc0 + x); LcdData(d); } } void LcdStr(uchar *p) /* 显示字符串函数 */ { data uchar i; LcdCmd(0x80); //设置显示数据RAM for (i=0;i<=7;i++) { LcdData(*p); /* char of LCM */ p++; } LcdCmd(0xc0); //设置显示数据RAM for (i=0;i<=7;i++) { LcdData(*p); /* char of LCM */ p++; } } void LcdClr() /* LCD清屏函数?-----通过送0x20清屏*/ { data uchar i; LcdCmd(0x80); //设置显示数据RAM for (i=0;i<=7;i++) LcdData(0x20); /* char of LCM */ LcdCmd(0xc0); //设置显示数据RAM for (i=0;i<=7;i++) LcdData(0x20); /* char of LCM */ } void LcdClr1(void) /* LCD清屏函数?-----通过控制命令清屏*/ { LcdCmd(0x01); } void LcdCmd(uchar c) /* LCD控制命令函数 */ { RPCTL_5 = 1; Delay_msec(1); //延时1ms (1000us) PCC8255 = 0x00; PCC8255 = 0x02; PB8255 = c ; PCC8255 = 0x05; PCC8255 = 0x04; Delay_msec(1); //延时1ms (1000us) RPCTL_5 = 0; } void LcdData(uchar c) /* LCD数据输入函数 */ { RPCTL_5 = 1; Delay_msec(1); //延时1ms (1000us) PCC8255 = 0x01; PCC8255 = 0x02; PB8255 = c; PCC8255 = 0x05; PCC8255 = 0x04; Delay_msec(1); //延时1ms (1000us) RPCTL_5 = 0; } void LcdInit() /* LCD初始化函数 */ { Delay_msec(41); //延时41ms LcdCmd(0x3c); //设置字符参数 LcdCmd(0x08); //设置显示开/关 LcdCmd(0x01); //清除显示 Delay_msec(41); //延时41ms LcdCmd(0x06); //设置输入方式 LcdCmd(0x10); //设置显示光标移位 LcdCmd(0x0c); //设置显示开/关 } void Delay_msec(uint x) /* 延时函数 */ { data uchar i; do { for (i=0;i<125;i++) /*延时 8us x 125 = 1ms */ ; } while((x--)!=0); } /*--------------------------------------------------------- --------*/ void INIT_8255(void) /*8255 初始化 */ { RPCTL_5 = 1; _nop_ (); PCC8255 = 0x80; _nop_ (); RPCTL_5 = 0; } /*--------------------------------------------------------- ------*/ uchar Getkey(void) { uchar i,lie,keycode,flag; flag=0; LS164A=0; //向74Ls164移入8个0 for (i=0;i<8;i++) { LS164cp=0; LS164cp=1; } while((P2&0x1f)==0x1f); //是否有键闭合, Delay_msec(100); //延时10ms (10,000us) while((P2&0x1f)==0x1f); //是否有键闭合, LS164A = 1; //向74Ls164移入8个1 for (i=0;i<8;i++) { LS164cp = 0; LS164cp = 1; } i=0; lie = 0; //lie --列号 while(i<8) { LS164A = 0; //向74Ls164移入0 LS164cp = 0; LS164cp = 1; if((P2&0x01)==0) { keycode=0x00 + lie; /*行基数 = 0x00 */ break; } else if((P2&0x02)==0) { keycode=0x08 + lie; /*行基数 = 0x08 */ break; } else if((P2&0x04)==0) { keycode=0x10 + lie; /*行基数 = 0x10 */ break; } else if((P2&0x08)==0) { keycode=0x18 + lie; /*行基数 = 0x18 */ break; } else if((P2&0x10)==0) { keycode=0x20 + lie; /*行基数 = 0x20 */ break; } else { i++; lie = lie + 1; /*列号 + 1 ---下一列*/ if(i==8) flag=1; } } if(flag==0) { LS164A=0; for (i=0;i<8;i++) { LS164cp=0; LS164cp=1; } while((P2&0x1f)!=0x1f); /*按键是否释放*/ return(keycode); /*返回键码 */ } else return -1; } /*--------------------------------------------------------- ----------*/ void PrintData (uchar d) /*打印函数*/ { while (Print_busy); //Busy=1,循环 _nop_ (); _nop_ (); _nop_ (); _nop_ (); while (Print_busy); //Busy=1,循环 RPCTL_5 = 1; PA8255 = d; PCC8255 = 0x08; PCC8255 = 0x09; RPCTL_5 = 0 ; } void PrintString(uchar *p) //打印字符串 { while(*p!='\0') { PrintData(*p); p++; } PrintData(0x0a); } /*--------------------------------------------------------- --------*/ void PrintInit(void) /*打印初始化函数*/ { uchar i; uchar code Prninitdata[12] ={0x01,0x1b,0x40,0x1b,0x55,0x25,0x1c,0x26, 0x1b,0x33,0x02}; for (i=0;i<11;i++) PrintData(Prninitdata[i]); } /*--------------------------------------------------------- --------*/ void main() { data uchar key; uchar code prn0[]=" 电 脑 中 心"; uchar code prn1[]="赵俊杰"; /********************************************************** ***/ Delay_msec(41); //延时41ms Delay_msec(41); //延时41ms Delay_msec(41); //延时41ms Delay_msec(41); //延时41ms INIT_8255(); /*8255初始化函数 */ LcdInit(); /* LCD初始化函数 */ PrintInit(); /*打印初始化函数 /********************************************************** ***/ PrintString(prn0); Delay_msec(400); //延时400ms PrintString(prn1); LcdStr(table1); Getkey(); LcdClr1(); key = Getkey()+0x30; LcdDisp(1,key); Getkey(); LcdStr(table2); Getkey(); LcdClr(); } ..
本文档为【[最新]hd44780 lcd源法度模范】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:28KB
软件:Word
页数:0
分类:生活休闲
上传时间:2017-10-07
浏览量:9