- #include "LCD1602.h"
- #include "Delay.h"
- /*----------------------------
- //向LCD1602写入指令或数据
- //RS=0:写命令
- //RS=1:写数据
- //Content:向LCD1602写入的内容
- -----------------------------*/
- void LCD_Write(uchar RS,uchar Content)
- {
- LCD_RS=RS; //选择写命令或写数据模式
- LCD_RW=0;
- P0=Content; //将要写的数据送到数据总线上
- Delay_us(2); //稍作延时以待数据稳定
- LCD_EN=1; //使能端给一高脉冲,因为初始化函数中已经将lcden置0
- Delay_us(5);
- LCD_EN=0; //将使能端置0以完成高脉冲
- Delay_us(10); //稍作延时
- }
- /*----------------------------
- //向LCD1602写入一个字符 如LCD_ShowChar(1,0,'a');
- //x:1,第一行,2第二行
- //y:1到16
- //dat:向LCD1602写入的字符
- -----------------------------*/
- void LCD_ShowChar(uchar x,uchar y,uchar dat)
- {
- uchar Adr; //LCD地址变量
- switch(x)
- {
- case 1:Adr=0x80+y;break; //显示屏第一行
- case 2:Adr=0x80+0x40+y;break; //显示屏第二行
- default:break;
- }
- LCD_Write(0,Adr);
- LCD_Write(1,dat);
- }
- /*----------------------------
- //向LCD1602写入字符串
- //x:1,第一行,2第二行
- //y:1到16
- *dat:指向字符串的首地址
- -----------------------------*/
- void LCD_ShowStr(uchar x,uchar y,uchar *dat)
- {
- uchar i=0;
- uchar pdat; //指针地址变量
- pdat= *dat; //把数组首地址付给指针变量
- while(pdat!='\0') //等待读完数组
- {
- LCD_ShowChar(x,y+i,pdat);
- pdat=*(++dat); //指针加一后把地址赋给dat
- i++;
- }
- }
- /*----------------------------
- //显示1个数字
- //x,y :起点坐标
- //num:数值(0~99)
- -----------------------------*/
- void LCD_ShowNum(uchar x,uchar y,uchar num)
- {
- if(num<100)
- {
- LCD_ShowChar(x,y+0,num/10+'0');
- LCD_ShowChar(x,y+1,num%10+'0');
- }
- }
- /*----------------------------
- //初始化LCD1602
- -----------------------------*/
- void LCD_Init()
- {
- LCD_RS=0;
- LCD_RW=0;
- LCD_EN=0;
- LCD_Write(0,0x38); //设置16*2显示,5*7点阵,八位数据接口//看资料
- LCD_Write(0,0x0c); //设置开显示,不显示光标
- LCD_Write(0,0x06); //写一个字符后地址指针加1
- LCD_Write(0,0x01); //显示清0,数据指针清0
- Delay(5); //延时5ms,使之更稳定
- }
复制代码
|