📄 lcd.c
字号:
/*//////////////////////////////////*/
/* */
/* Pressure_Control */
/* Version_1.1 */
/* AHTL_2007_5 */
/* */
/* */
/* LCD.C */
/* */
/*//////////////////////////////////*/
#include <reg52.H>
#include <lcd.h>
//
// 2 X 16 LCD display port and BCD port each bit function
//
// LCD PORT BCD PORT
//
// P17 P16 P15 P14 P13 P12 P11 P10 ___ NC SEL1
// | | | | | | |_________ NC SEL2
// | | | | | |_____________ RS NC
// | | | | |_________________ Enable1 NC
// | | | |_____________________ D4 D4
// | | |_________________________ D5 D5
// | |_____________________________ D6 D6
// |_________________________________ D7 D7
//
//
void delay50us();
void set_display(char);
void write_char (char);
/*-------------------------------------------------------------------------*/
void _init_display()
{
set_display(0x2c); //4 bit mode ,2 row ,5 X 10 size
set_display(0x0f);
set_display(0x06);
_delay500us(120);
}
/*-------------------------------------------------------------------------*/
void set_display(char v)
{
unsigned char junk;
junk=v;
junk &=0xf0;
junk |=0x0b;
DispPort=junk;
junk &=0xf3;
DispPort=junk;
junk=(v<<4);
junk &=0xf0;
junk |=0x0b;
DispPort=junk;
junk &=0xf3;
DispPort=junk;
delay50us();
delay50us();
}
/*-------------------------------------------------------------------------*/
void _cursor_sw(char v)
{
if(v)
set_display(0x0f); //cursor is on and blinking
else
set_display(0x0c); //cursor is off and not blinking
}
/*-------------------------------------------------------------------------*/
void _cursor_pos(char r, char c)
{
if(r)
c += 0x40;
set_display(c | 0x80);
}
/*-------------------------------------------------------------------------*/
void _clear_display (void)
{
set_display(0x01);
_delay500us(120);
}
/*-------------------------------------------------------------------------*/
void _disp_msge (char r, char c, char *msge)
{
unsigned char i=0;
switch (r)
{
case 1 :
c += 0x40;
case 0 :
set_display(c | 0x80);
while (msge[i] != 0)
write_char(msge[i++]);
}
}
/*-------------------------------------------------------------------------*/
void write_char (char temp)
{
char junk;
junk=temp;
junk &=0xf0;
junk |=0x0f;
DispPort=junk;
junk &=0xf7;
DispPort=junk;
junk=(temp<<4);
junk &=0xf0;
junk |=0x0f;
DispPort=junk;
junk &=0xf7;
DispPort=junk;
delay50us();
delay50us();
}
/*-------------------------------------------------------------------------
void _display_bit4 (char r,char c,char v)
{
_cursor_pos (r,c);
write_char((char)('0'+(v%10)));
_cursor_pos (r,c);
}
/*-------------------------------------------------------------------------*/
void _display_bit8 (char r,char c,char v)
{
_cursor_pos (r,c);
write_char((char)('0'+(v/10)));
write_char((char)('0'+(v%10)));
_cursor_pos (r,c);
}
/*-------------------------------------------------------------------------
void _display_bit12 (char r,char c,unsigned int v)
{
_cursor_pos (r,c);
write_char('0'+(v/100));
v %= 100;
write_char((char)('0'+((char)v/10)));
write_char((char)('0'+((char)v%10)));
_cursor_pos (r,c);
}
/*-------------------------------------------------------------------------
void _display_bit16 (char r,char c,unsigned int v)
{
_cursor_pos (r,c);
write_char('0'+(v/1000));
v %= 1000;
write_char('0'+(v/100));
v %= 100;
write_char((char)('0'+((char)v/10)));
write_char((char)('0'+((char)v%10)));
_cursor_pos (r,c);
}
/*-------------------------------------------------------------------------*/
unsigned char _hex2tobcd (char v)
{
char retu;
retu = (v/10)*16+v%10;
return retu;
}
/*-------------------------------------------------------------------------
unsigned int _hex4tobcd (unsigned int v_temp)
{
unsigned int retu;
unsigned int v;
v=v_temp;
retu = (v/1000)<<12;
v %= 1000;
retu = retu + ((v/100)<<8);
v %= 100;
retu = retu + ((v/10)*16)+(v%10);
return retu;
}
/*-------------------------------------------------------------------------
unsigned int _hex3tobcd (unsigned int v_temp)
{
unsigned int retu;
unsigned int v;
v=v_temp;
retu =(v/100)<<8;
v %= 100;
retu = retu + ((v/10)*16)+(v%10);
return retu;
}
/*-------------------------------------------------------------------------*/
void delay50us()
{
unsigned char temp;
temp=20;
while(temp)
temp--;
}
/*-------------------------------------------------------------------------*/
void _delay500us(char t)
{
unsigned int i;
while(t)
{
i=124;
while(i)
i--;
t--;
}
}
/*-------------------------------------------------------------------------
void delay_20ms(unsigned char i)
{
unsigned int j;
while(i--)
{
j=20000;
while(j--);
}
}
/*-------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -