资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
LCD1602显示程序头文件51单片机的Proteus实验本文转载自小波电子工作室。C语言源代码/*摘 要: LCD1602显示程序头文件,到时在主程序里包含这个头文件后,就可以直接调用里面的函数了版 本: V1.0完成日期: 2008.5.5作 者: ZHOUSFE*修改日期: 版 本: */i nclude delay.h#define uchar unsigned char#define uint unsigned int#define Port P0 /数据端口/*定义端口*/sbit Rs = P10;sbit Rw = P11;sbit En = P12;/*定义LCD控制字*/清屏及光标归位#define LCD_CLEAR 0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回左上角/显示开关控制指令#define LCD_SCREEN_ON 0x0C /显示开#define LCD_SCREEN_OFF 0x08 /显示关 #define LCD_CURSOR_ON 0x0A /显示光标#define LCD_CURSOR_OFF 0x08 /无光标 #define LCD_C_FLASH_ON 0x09 /光标闪动#define LCD_C_FLASH_OFF 0x08 /光标不闪动/进入模式设置指令#define LCD_AC_UP 0x06 /新数据后光标右移#define LCD_AC_DOWN 0x04 /新数据后光标左移#define LCD_S_MOVE_ON 0x05 / 画面可平移#define LCD_S_MOVE_OFF 0x04 /画面不可平移/设定显示屏或光标移动方向指令#define LCD_C_LEFT 0x10 /光标左移1格,且AC值减1#define LCD_C_RIGHT 0x11 /光标右移1格,且AC值加1#define LCD_CHAR_LEFT 0x18 /显示器上字符全部左移一格,但光标不动#define LCD_CHAR_RIGHT 0x1C /显示器上字符全部右移一格,但光标不动uchar code number10=0123456789;/*所有函数声明*/void LCD_init(void); void LCD_wdata(uchar wdata);void LCD_wcommand(uchar lcd_cmd,busy_f);void LCD_gotoxy(uchar x,uchar y);void Disp_char(uchar *str);void Disp_number(unsigned int num);uchar Rstatus(void);uchar LCD_rdata(void);/*函数名称:LCD_wcommand()功能描述:LCD写指令入口参数:uchar lcd_cmd:命令字,uchar busy_f:忙检测标志位返回值:无*/void LCD_wcommand(uchar lcd_cmd,busy_f) if (busy_f) Rstatus(); /不忙才执行下个程序Port = lcd_cmd;Rs = 0;Rw = 0; En = 0;En = 0;En = 1; /*函数名称:LCD_wdata()功能描述:LCD写数据入口参数:uchar wdata:所写数据返回值:无*/void LCD_wdata(uchar wdata) Rstatus(); Port = wdata;Rs = 1;Rw = 0;En = 0; /若晶振速度太高可以在这后加小的延时En = 0; /延时En = 1;/*函数名称:LCD_rdata()功能描述:LCD读数据入口参数:无返回值:所读数据*/uchar LCD_rdata(void) Rs = 1; Rw = 1;En = 0;En = 0;En = 1;return Port;/*函数名称:Rstatus()功能描述:LCD读忙状态入口参数:无返回值:若忙,则等待,不忙则返回Port */uchar Rstatus(void) Port = 0xFF; Rs = 0;Rw = 1;En = 0;En = 0;En = 1;while (Port & 0x80); /检测忙信号,不忙则退出等待return(Port);/*函数名称:LCD_init()功能描述:LCD初始化入口参数:无返回值:无*/void LCD_init(void) Port = 0;LCD_wcommand(0x38,0); /三次显示模式设置,不检测忙信号delay_ms(3); LCD_wcommand(0x38,0);delay_ms(3); LCD_wcommand(0x38,0);delay_ms(3); LCD_wcommand(0x38,1); /显示模式设置(0X38双行(5*7),0X34单行(5*10),0X30单行(5*7);开始要求每次检测忙信号LCD_wcommand(0x08,1); /关闭显示LCD_wcommand(0x01,1); /显示清屏LCD_wcommand(0x06,1); / 显示光标移动设置LCD_wcommand(0x0C,1); / 显示开及光标设置/*函数名称:LCD_gotoxy()功能描述:定位到(x,y)位置入口参数:x为行(01),y为列(015) 返回值:无*/void LCD_gotoxy(uchar x, uchar y) x &= 0x1; /限制x不能大于1,y不能大于15y &= 0xF; if(!x) LCD_wcommand(0x80|y,1);else LCD_wcommand(0xC0|y,1);/*函数名称:Disp_char()功能描述:显示字符或字符串入口参数:字符或字符串返回值:无*/void Disp_char(uchar *str)while(*str!=0)LCD_wdata(*str);str+;/*函数名称:Disp_number()功能描述:显示四数字入口参数:num:显示的数字 n:数字位数返回值:无*/void Disp_number(uint num,uchar n) uchar a; /个位 uchar b; /十位uchar c; /百位uchar d; /千位/ uchar e; /万位switch(n)case 1:LCD_wdata(num);break;case 2:b=num/10;a=num%10;LCD_wdata(numbera);LCD_wdata(numberb);break;case 3:c=num/100;b=num%100/10;a=num%10;LCD_wdata(numbera);LCD_wdata(numberb);LCD_wdata(numberc);break;case 4:d=num/1000;c=num%1000/100;b=num%1000%100/10;a=num%10;LCD_wdata(numbera);LCD_wdata(numberb);LCD_wdata(numberc);LCD_wda
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号