📄 lcd.c
字号:
#include <lcd.h>
// 4 bit mode 16x2 LCD
/*
void lcd_send(unsigned char action ,cmd) // Sends a command or data to LCD
void lcd_clear(unsigned char state) // Clear LCD Contents
void lcd_cursor( unsigned char state)
void lcd_displayinit(void)
void lcd_printf(unsigned char *dstring) // Prints a string on LCD at current cursor position
void lcd_gotoxy(unsigned char cursor_position,linenumber) // Moves the cursor to the specified position
void lcd_backlight ( unsigned char action ) ; // turns backlight on / off
*/
void lcd_send(unsigned char action ,cmd) // Sends a command or data to LCD
{
unsigned char delay;
//sending msb
nibble=cmd&0x0F0; // Mask the lower nibble to get higher nibble of command passed
LCD_E=HIGH; // Enable LCD
LCD_RS= action; // Sending Command so RS=0
LCD_D7=D7; LCD_D6=D6; // Setting higher Nibble Data Bits
LCD_D5=D5; LCD_D4=D4;
for(delay=0;delay<=50;delay++); // Delay for LCD to accept data
// Delay for LCD to accept data
LCD_E=LOW; // Disable LCD
LCD_D7=0;LCD_D6=0;LCD_D5=0;LCD_D4=0;// Reset Ouput Port Buffer
nibble=cmd<<4; // Extract the lower nibble of command passed
LCD_E=HIGH; // Enable LCD
LCD_D7=D7; LCD_D6=D6; // Setting higher Nibble Data Bits
LCD_D5=D5; LCD_D4=D4;
for(delay=0;delay<=50;delay++); // Delay for LCD to accept data
LCD_E=LOW; // Disable LCD
LCD_D7=0;LCD_D6=0;LCD_D5=0;LCD_D4=0;
}
void lcd_clear(unsigned char state) // Clear LCD Contents
{
unsigned int delay; // start up delay
switch(state){
case ALL : lcd_send(COMMAND ,0x01); // FULL DISPLAY CLEAR
break; // Delay for LCD to accept data
case LINE1 : lcd_gotoxy(1,LINE1);
lcd_printf(" " ); // LINE 1 CLEAR
break;
case LINE2 : lcd_gotoxy(1,LINE2);
lcd_printf(" " ); // LINE 2 CLEAR
}
for(delay=0;delay<=1300;delay++);
}
//----------------TO MAKE CURSOR ON AND OFF on LCD SCREEN---------------
// ARGUMENTS ARE ON = FOR CURSOR ON
// OFF = FOR CURSOR OFF
//
//--------------------------------------------------------------------
void lcd_cursor( unsigned char state)
{
switch(state){
case OFF : lcd_send(COMMAND ,0x0C); // CURSOR OFF
break;
case ON : lcd_send(COMMAND ,0x0E); // CURSOR ON
}
}
//----------------LCD DISPLAY INITLIZATION -----------------------------
void lcd_displayinit(void)
{
unsigned char i,j;
unsigned int delay;
for(delay=0;delay<=3000;delay++); // start up delay
for(j=0;j<=3;j++){
lcd_send(COMMAND ,0x03);
for(delay=0;delay<=1500;delay++);
}
lcd_send(COMMAND ,0x02); //;return to Home pos.
for(delay=0;delay<=1500;delay++);
for(j=0;j<=3;j++){ // 4 bit mode 5x7 char 16 X 2 line
lcd_send(COMMAND ,0x28);
for(delay=0;delay<=1500;delay++);
}
lcd_send(COMMAND ,0x0c); // display on ,cursor off
for(delay=0;delay<=1500;delay++);
lcd_send(COMMAND ,0x06); // entry mode set
for(delay=0;delay<=1500;delay++);
lcd_send(COMMAND ,0x80); // set ddram adress
for(delay=0;delay<=1500;delay++);
lcd_send(COMMAND ,0x01); // clear display
for(delay=0;delay<=1500;delay++);
lcd_send(COMMAND ,0x40); // store custom charecter
for(i=0;i<8;i++) lcd_send(DATA,custom_char_map_1[i]); // Send 1st Custom Charecter
for(i=0;i<8;i++) lcd_send(DATA,custom_char_map_2[i]); // Send 2nd Custom Charecter
for(i=0;i<8;i++) lcd_send(DATA,custom_char_map_3[i]); // Send 3rd Custom Charecter
for(i=0;i<8;i++) lcd_send(DATA,custom_char_map_4[i]); // Send 4th Custom Charecter
for(i=0;i<8;i++) lcd_send(DATA,custom_char_map_5[i]); // Send 5th Custom Charecter
for(i=0;i<8;i++) lcd_send(DATA,custom_char_map_6[i]); // Send 6th Custom Charecter
for(i=0;i<8;i++) lcd_send(DATA,custom_char_map_7[i]); // Send 7th Custom Charecter
}
void lcd_printf(unsigned char *dstring) // Prints a string on LCD at current cursor position
{
unsigned char digit_cnt=0;
while(dstring[digit_cnt]!='\0')
lcd_send( DATA ,dstring[digit_cnt++]);
}
void lcd_gotoxy(unsigned char cursor_position,linenumber) // Moves the cursor to the specified position
{
if (LCDTYPE==16*2) {
cursor_position=cursor_position+127+(64 * (linenumber-1)); // Calculate the value to be passed to LCD unit
}
if (LCDTYPE==20*4) {
cursor_position=display_address[linenumber-1]; // Calculate the value to be passed to LCD unit
}
lcd_send(COMMAND ,cursor_position); // Send the value to LCD
}
void lcd_print_num(unsigned long number) // Prints a string on LCD at current cursor position
{
unsigned char joker;
bit zerovalid=0;
if (number > 99999) {
joker=number/100000; //Extracting 100000th Decimal
lcd_send( DATA ,joker+48);
number = number - ( joker * 100000) ;
zerovalid=1;
}
if (number > 9999) {
joker=number/10000; //Extracting 10000th Decimal
lcd_send( DATA ,joker+48);
number = number - ( joker * 10000) ;
zerovalid=1;
}
if (number > 999) {
joker=number/1000; //Extracting 1000th Decimal
lcd_send( DATA ,joker+48);
number = number - ( joker * 1000) ;
zerovalid=1;
} else { if (zerovalid==1) lcd_send(DATA,48); else lcd_send( DATA ,32); }
if (number > 99) {
joker=number/100; //Extracting 100th Decimal
lcd_send( DATA ,joker+48);
number = number - ( joker * 100) ;
zerovalid=1;
} else { if (zerovalid==1) lcd_send(DATA,48); else lcd_send( DATA ,32); }
if (number >9 ) {
joker=(number%100)/10;
lcd_send( DATA ,joker+48); //Extracting 10th Decimal
zerovalid=1;
} else { if (zerovalid==1) lcd_send(DATA,48); else lcd_send( DATA ,32); }
joker=(number%10);
lcd_send( DATA ,joker+48); //Extracting Units Decimal
}
void lcd_backlight ( unsigned char action )
{
switch(action) {
case ON : // Back Light to be turned ON
lcd_backlight_count=0xFFFF; // Reset backlight turn off timer
BACKLIGHT=ON; // Back light ON
break;
case OFF : // Back Light to be turned ON
BACKLIGHT=OFF; // Back light OFF
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -