📄 lcd._c
字号:
#include <iom128v.h>
#include <macros.h>
#include "stdtypes.h"
#include "lcd.h"
UNS8 XPOS, YPOS;//定义位置全局变量
void delay(UNS16 num)
{
//UNS8 i;
//for(i=0;i<100;i++)
while(num--);
}
//判断LCD是否忙?
void lcd_idle(void)
{
LCD_R
LCD_I
LCD_EN
while((LCD_PORT & 0x80)==0x80);
LCD_NE
}
/*LCD读命令和数据函数*/
//ins_data =1 data ,=0 instruction
//address 8bit
UNS8 LCD_read(UNS8 ins_data)
{
delay(400);
lcd_idle();
LCD_R
if (ins_data==1)
{
LCD_D
}
else
{
LCD_I
}
return LCD_PORT;
}
/*LCD写命令函数*/
//ins_data =1 data ,=0 instruction
//address 8bit
void LCD_write_ins(UNS8 data)
{
lcd_idle();
LCD_W
LCD_I
LCD_PORT = data;
LCD_EN
delay(1);
LCD_NE
delay(2000);
}
/*LCD写数据函数*/
//ins_data =1 data ,=0 instruction
//address 8bit
void LCD_write_data(UNS8 data)
{
//lcd_idle();
LCD_W
LCD_D
LCD_PORT = data;
LCD_EN
delay(1);
LCD_NE
delay(100);
}
//LCD 初始化
void LCD_init(void)
{
LCD_write_ins(0x01);//Clear Display
LCD_write_ins(0x38);//Function set
LCD_write_ins(0x38);//Function set
LCD_write_ins(0x38);//Function set
LCD_write_ins(0x38);//Function set
LCD_write_ins(0x06);//Entry mode set
LCD_write_ins(0x0D);//Display on / off control
//Write data to CG RAM / DD RAM
/*LCD_write_data(0x49);//I
LCD_write_data(0x20);//空格
LCD_write_data(0x4C);//L
LCD_write_data(0x4F);//0
LCD_write_data(0x56);//V
LCD_write_data(0x45);//E
LCD_write_data(0x20);//空格
LCD_write_data(0x59);//Y
LCD_write_data(0x4F);//0
LCD_write_data(0x55);//U
LCD_write_data(0x20);//空格
LCD_write_data(0x21);//!
*/
//LCD_write_str(0, 0, "RobinLee ");
//LCD_write_str(0, 1, " 123456");
}
void LCD_pos(void)// 改变LCD的显示位置
{
XPOS &= 0x0F;
YPOS &= 0x03;
if(YPOS==0x00)
LCD_write_ins(XPOS|0x80);
else if(YPOS==0x01)
LCD_write_ins((XPOS+0x40)|0x80);
}
void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数
{
unsigned char address;
if (y == 0) address = 0x80 + x;
else address = 0xc0 + x;
LCD_write_ins( address);
}
void LCD_fill(UNS8 n)//LCD填充
{
for(YPOS=0;YPOS<2;YPOS++)
for(XPOS=0;XPOS<16;XPOS++)
{
LCD_pos();
LCD_write_data(n);
}
}
void LCD_write_str(UNS8 x,UNS8 y,UNS8 *s)
{
YPOS=y;
for(XPOS=x;XPOS<16;XPOS++)
{
LCD_pos();
LCD_write_data(*s);
s++;
//delay(2000);
}
}
/***************************************************显示数组里面的值by Robin
void LCD_write_row(UNS8 x,UNS8 y,char row[16])
{
UNS8 m;
YPOS=y;
for(XPOS=x;XPOS<16;XPOS++)
{
LCD_pos();
for(m=1;m<=16;m++)
{LCD_write_data(row[m]);}
//delay(2000);
}
}
*/
void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
{
LCD_set_xy( X, Y ); //写地址
LCD_write_data( data);
}
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
{
LCD_set_xy( X, Y ); //写地址
while (*s) // 写显示字符
{
LCD_write_data( *s );
s ++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -