1602LCD显示
2017-01-23 13:26
239 查看
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include<intrins.h> sbit RS = P2^4; //定义端口 sbit RW = P2^5; sbit EN = P2^6; #define RS_CLR RS=0 #define RS_SET RS=1 #define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0 #define EN_SET EN=1 #define DataPort P0 /*------------------------------------------------ uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS ------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); } /*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) { //大致延时1mS DelayUs2x(245); DelayUs2x(245); } } /*------------------------------------------------ 判忙函数 ------------------------------------------------*/ bit LCD_Check_Busy(void) { DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80); } /*------------------------------------------------ 写入命令函数 ------------------------------------------------*/ void LCD_Write_Com(unsigned char com) { // while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; } /*------------------------------------------------ 写入数据函数 ------------------------------------------------*/ void LCD_Write_Data(unsigned char Data) { //while(LCD_Check_Busy()); //忙则等待 DelayMs(5); RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; } /*------------------------------------------------ 清屏函数 ------------------------------------------------*/ void LCD_Clear(void) { LCD_Write_Com(0x01); DelayMs(5); } /*------------------------------------------------ 写入字符串函数 ------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { LCD_Write_Com(0x80 + x); //表示第一行 } else { LCD_Write_Com(0xC0 + x); //表示第二行 } while (*s) { LCD_Write_Data( *s); s ++; } } /*------------------------------------------------ 写入字符函数 ------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) { if (y == 0) { LCD_Write_Com(0x80 + x); } else { LCD_Write_Com(0xC0 + x); } LCD_Write_Data( Data); } /*------------------------------------------------ 初始化函数 ------------------------------------------------*/ void LCD_Init(void) { LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/ } /*------------------------------------------------ 主函数 ------------------------------------------------*/ /*void main(void)//静态显示 { LCD_Init(); LCD_Clear();//清屏 while (1) { LCD_Write_String(0,0,"name:zhu ya bei"); LCD_Write_String(0,1,"num :208140239"); while(1); } }*/ /*void main(void)//动态显示 { unsigned char i; unsigned char *p; LCD_Init(); while (1) { i = 5; p = "china"; LCD_Clear(); LCD_Write_String(2,0,"Welcome to"); DelayMs(250); while (*p) { LCD_Write_Char(i,1,*p); i ++; p ++; DelayMs(250); } DelayMs(250); } }*/ void main(void)//滚动显示 { unsigned char i; LCD_Init(); LCD_Clear();//清屏 LCD_Write_String(0,0,"Happy new year,have a good day O_o!"); //LCD_Write_String(0,1,"a lucky day ^_^"); while (1) { for(i = 0; i <5; i++) { DelayMs(100); } LCD_Write_Com(0x18);//左平移画面 0x1C 是右平移 } } /*void main(void)//移动显示 { unsigned char i; unsigned char *pa,*pb; LCD_Init(); LCD_Write_Com(0x0f);//光标开,光标闪烁开 while (1) { pa = "Welcome to china"; pb = "Have a good day!"; LCD_Clear(); LCD_Write_String(0,0,pa); //显示2行信息 LCD_Write_String(0,1,pb); for(i=0;i<8;i++) //延时2s左右 DelayMs(250); LCD_Clear(); //清屏显示其他信息 i = 0; while(*pa) //循环输入方式显示2行信息 { LCD_Write_Char(i,0,*pa); i ++; pa ++; DelayMs(250); } i=0; while(*pb) { LCD_Write_Char(i,1,*pb); i ++; pb ++; DelayMs(250); } DelayMs(250); } }*/
相关文章推荐
- C51 1602lcd 显示16进制值——学习小记
- 单片机练习 - 使用1602LCD显示DS18B20的温度值
- LCD 1602 稳定显示 [李园7舍_404]
- u-boot支持LCD显示(基于TQ2440)
- 1602液晶显示实验报告
- u-boot-2009.08在mini2440上的移植(七)---增加LCD显示功能
- ATMEGA16读取DS18B20温度,1602显示,并用proteus仿真,成功。
- tiny6410裸机实验第9章--------------LCD(显示字母)
- 如何使linux的启动信息显示到LCD上面
- ARM cortex a 的 LCD显示
- 使用stm32在lcd上随意显示汉字
- LCD显示--Ht1621b芯片显示屏驱动
- DS18B20温度传感器利用LCD显示室内温度
- LCD主流显示接口介绍
- U-boot中通过ENV设置显示设备(如LCD)参数的方法与格式
- Qt 之 LcdNumber时间显示
- 【Tiny6410 And Linux】—(6.2)—LCD 驱动测试程序(BMP 显示位图)——原理
- WinCE下的LCD显示驱动开发
- 51单片机复习程序例举004--HD44780控制的1602LCD
- Linux-2.6.32.2内核在mini2440上的移植----通过LCD显示内核启动信息及修改Linux LOGO