📄 lcd.c
字号:
#include "hal.h"
#define CS_PIN 0x01 //p2_0
#define STD_PIN 0x02 //p2_1
#define SCLK_PIN 0x04 //p2_2
#define STD_H() P2 |= STD_PIN
#define STD_L() P2 &= ~STD_PIN
#define SCLK_H() P2 |= SCLK_PIN
#define SCLK_L() P2 &= ~SCLK_PIN
#define CS_H() P2 |= CS_PIN
#define CS_L() P2 &= ~CS_PIN
#define COMM 0
#define DAT 1
/*--------------------------------------------------------------------------------------------------
Public function prototypes
--------------------------------------------------------------------------------------------------*/
void LCD_SCLK_write (void);
void delay_nus (unsigned char wait);
void LCD_init(void) //液晶初始化
{
unsigned char i=0;
halWait(150);
for(i=0;i<3;i++)
{
LCD_write_char(COMM,0x30); //8位显示
}
LCD_write_char(COMM,0x0c);
LCD_write_char(COMM,0x0f); //显示开,光标开,闪烁开
LCD_write_char(COMM,0x01); //清屏
halWait(10);
LCD_write_char(COMM,0x06);
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
LCD_write_char(COMM,0x30);
LCD_write_char(COMM,0x01);
delay_nus(180);
}
void LCD_set_xy( unsigned char x, unsigned char y ) //写地址函数
{
unsigned char address;
if (y == 0) address = 0x80 + x; //第0行
else if (y == 1) address = 0x90 + x; //第1行
// else if (y == 2) address = 0x88 + x;
// else if (y == 3) address = 0x98 + x;
LCD_write_char(COMM,address);
}
void LCD_SCLK_write(void) //液晶使能
{
SCLK_H();
SCLK_L();
}
void LCD_write_char(unsigned char command,unsigned char data) // 写数据
{
unsigned char i,j;
for(i=0;i<5;i++) //同步信号
{
STD_H(); //1 1 1 1 1
LCD_SCLK_write();
}
STD_L(); //RW
LCD_SCLK_write();
if(command) //RS
STD_H(); //data
else
STD_L(); //command
LCD_SCLK_write();
STD_L(); // 0
LCD_SCLK_write(); //写串口输入方式的头
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
if((0x80&data)>0)
STD_H();
else
STD_L();
LCD_SCLK_write();
data=data<<1;
}
for(i=0;i<4;i++)
{
STD_L(); //0 0 0 0
LCD_SCLK_write();
}
} //end for(j=0
SCLK_L();
}
/*写汉字*/
void LCD_write_hanzi(unsigned int data) // 写数据
{
LCD_write_char(DAT,((0Xff00&data)>>8));
LCD_write_char(DAT,((0xff&data)));
}
/*---------------显示汉字或字符----------------*/
void Display_All (unsigned char *chn)
{
unsigned char i,j;
for (i=0;i<32;i++)
{
LCD_write_char(DAT,chn[i]);
if(i==15)
LCD_write_char(COMM,0x90); //跳到第1行
else if(i==31)
LCD_write_char(COMM,0x80); //跳到第0行
}
}
/*---------------显示汉字----------------*/
void Display_hz (unsigned int data,unsigned char x,unsigned char y)
{
LCD_set_xy(x,y);
LCD_write_char(DAT,((0Xff00&data)>>8));
LCD_write_char(DAT,((0xff&data)));
}
/*-----------------------------------------------------------------------
延时函数
-----------------------------------------------------------------------*/
void delay_nus(unsigned char wait) //N us延时函数
{
do
{
;
}
while(wait--);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -