⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display_4x20r.c

📁 lpc2368 source files
💻 C
字号:
/**********     VERSION 1.00V        *************/
/**********  DEVELOPED BY RAVINDRANATH G *************/
/**********  DATED : 30/01/08        *************/
//******************************************************************************/

#include "lpc23xx.h"
#include "display_4x20.h"
#include "KeyBoard.h"
#include "rtc.h"
#include "adc.h"

#include <rt_sys.h>
#pragma import(__use_c99_library)
#include <stdio.h>
struct __FILE {
int handle;
/* Whatever you need here (if the only file you are using
is the stdoutput using printf for debugging, no file
handling is required) */
};

unsigned int disp_count,row_count,col_count;
unsigned char backlit,*row_no;
unsigned char lcdscrolllen,lcdscrolldata[80];
//*******************************************************
void blon(void)
{
	backlit = 1;
	FIO1CLR = 0X01 << 9;//OFF
}

void bloff(void)
{
	backlit = 0;
	FIO1SET = 0X01 << 9;//ON 
}
void bltoggle(void)
{
//	FIO1MASK = 0x00000000;
	if(backlit == 0)
	{
		backlit = 1;
		blon();  
	}
	else
	{
		backlit = 0;
		bloff();  
	}
} 


/*int fputc(int c, FILE *f)
{
 	unsigned char  lcd_i;
	char buff[1];
 	

	if (c == 0x0a)
    {
        for (lcd_i=disp_count%20;lcd_i<20;lcd_i++)
        {
            Disp_msg(" ",1);
        }
    }
    else if(c == 0x0d)
    {
        disp_count = disp_count - (disp_count%20);
    }
	else if (c == 138)
    {
			Disp_cur_rev();
    }
    else if ((c != F1 ) && (c != F2) && (c != F3) && (c != F4) && (c != F5) &&
            (c != SHIFT) && (c != ESC)  && (c != ENTER) && 
            (c != ENT)&& (c != ESCAPE))	//  && (c != CTRL)
    {	buff[0]=c;
		Disp_msg(buff,1);
		lcdscrolldata[lcdscrolllen++] = c;
    }
	
	if ((disp_count % 20) == 0)
    {
        switch (disp_count / 20)
        {
           case 0    :  set_cursor(ROW1);
                        break;
           case 1    :  set_cursor(ROW2);
                        break;
           case 2    :  set_cursor(ROW3);
                        break;
           case 3    :  set_cursor(ROW4);
                        break;
        }
    }

    return c;
}*/

int fputc(int c, FILE *f)
{
    unsigned char lcd_i;
	
	
	if(c == '\n')
    {
        for (lcd_i=lcdscrolllen%20;lcd_i<20;lcd_i++,lcdscrolllen++)
        {
            disp_data();
            FIO1PIN2 = ' ';
            disp_enable();
            lcdscrolldata[lcdscrolllen] = ' ';
        }
    }
//    else if(c == 0x0d)
//    {
//        lcdscrolllen = lcdscrolllen - (lcdscrolllen%20);
//    }
    else if(c == 0x138)
    {
        //lcdscrolllen = lcdscrolllen - (lcdscrolllen%20);
		Disp_cur_rev();
    }
    else if ((c != F1 ) && (c != F2) && (c != F3) && (c != F4) && (c != F5) &&
            (c != SHIFT) && (c != ESC)  && (c != ENTER) && 
            (c != ENT)&& (c != ESCAPE))	//  && (c != CTRL)
    {
        disp_data();
        FIO1PIN2 = c;
        disp_enable();
        lcdscrolldata[lcdscrolllen] = c;
        lcdscrolllen++;
    }
    if (lcdscrolllen > 80)
        lcdscrolllen = 0;
    if (lcdscrolllen == 80)
    {
        set_cursor(ROW1);
        disp_data();
        for (lcd_i = 20;lcd_i<40;lcd_i++)
        {
             lcdscrolldata[lcd_i - 20] = lcdscrolldata[lcd_i];
             FIO1PIN2 = lcdscrolldata[lcd_i];
             disp_enable();
             del_us();
        }     
        set_cursor(ROW2);
        disp_data();
        for (lcd_i = 40;lcd_i<60;lcd_i++)
        {
             lcdscrolldata[lcd_i - 20] = lcdscrolldata[lcd_i];
             FIO1PIN2 = lcdscrolldata[lcd_i];
             disp_enable();
             del_us();
        }     
        set_cursor(ROW3);
        disp_data();
        for (lcd_i = 60;lcd_i<80;lcd_i++)
        {
             lcdscrolldata[lcd_i - 20] = lcdscrolldata[lcd_i];
             FIO1PIN2 = lcdscrolldata[lcd_i];
             disp_enable();
             del_us();
        }     
        set_cursor(ROW4);
        disp_data();
        for (lcd_i = 60;lcd_i<80;lcd_i++)
        {
             lcdscrolldata[lcd_i] = ' ';
             FIO1PIN2 = lcdscrolldata[lcd_i];
             disp_enable();
             del_us();
        }     
        lcdscrolllen = 60;
    }
    if ((lcdscrolllen % 20) == 0)
    {
        switch (lcdscrolllen / 20)
        {
           case 0    :  set_cursor(ROW1);
                        break;
           case 1    :  set_cursor(ROW2);
                        break;
           case 2    :  set_cursor(ROW3);
                        break;
           case 3    :  set_cursor(ROW4);
                        break;
        }
    }

    return c;
}

void del_us(void)
{
   unsigned int del;

   for(del=200; del > 0; del--);
}

void disp_data(void)
{
    FIO1SET = 0x01 << 8;  //disp_rs  = 1;
	//del_us();
}

void disp_inst(void)
{
	FIO1CLR = 0x01 << 8;  //disp_rs  = 0;
	//del_us();
}

void disp_enable(void)
{
	FIO1CLR = 0x01 << 10;//DISP_EN = 0
	del_us();
	del_us();
	FIO1SET = 0x01 << 10;//DISP_EN = 1
}

void Disp_initial(void)
{ 
    disp_inst();
	{
	    FIO1PIN2 = 0x38;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x38;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x38;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x38;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x08;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x01;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x06;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x38;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x0f;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x06;
	    disp_enable();
	    delay_Ms(30);
	    FIO1PIN2 = 0x00;
	    disp_enable();
	    delay_Ms(30);
	}
}

void Disp_msg(char *msg1,char msg_i1)
{
    unsigned char msg_i;

    disp_data();
    msg_i=0;
    while(msg_i <msg_i1)
    {
        FIO1PIN2 = msg1[msg_i];
        disp_enable();
        del_us();
        del_us();
        del_us();
        msg_i++;
//		disp_count++;
//		if(disp_count >79)
//    	disp_count = 0;
    }
}

void Disp_erase(void)
{
    disp_inst();
    FIO1PIN2 = 0x01;
    disp_enable();
    delay_Ms(5);
}

void clrscr(void)
{
    unsigned char lcd_i;
	disp_inst();
    FIO1PIN2 = 0x01;
    disp_enable();
    delay_Ms(5);
    lcdscrolllen = 0;
    for (lcd_i=0;lcd_i<80;lcd_i++)
        lcdscrolldata[lcd_i] =  ' ';
//	disp_count = 0;
}

void set_cursor(unsigned char cursor)
{
    disp_inst();
    FIO1PIN2 = cursor + 0x80;
    disp_enable();
    delay_Ms(1);
//	switch (cursor)
//    {
//       case ROW1:	disp_count = 0;
//                    break;
//       case ROW2:	disp_count = 20;
//                    break;
//       case ROW3:	disp_count = 40;
//                    break;
//       case ROW4:	disp_count = 60;
//                    break;
//    } 
}

void gotoxy(char row,char col)
{
    lcdscrolllen = (((row-1) * 20) + (col));
    switch (lcdscrolllen / 20)
    {
       case 0    :  set_cursor(ROW1+(lcdscrolllen%20));
	   				//disp_count = 0+(lcdscrolllen%20);
                    break;
       case 1    :  set_cursor(ROW2+(lcdscrolllen%20));
	   				//disp_count = 20+(lcdscrolllen%20);
                    break;
       case 2    :  set_cursor(ROW3+(lcdscrolllen%20));
	   				//disp_count = 40+(lcdscrolllen%20);
                    break;
       case 3    :  set_cursor(ROW4+(lcdscrolllen%20));
	   				//disp_count = 60+(lcdscrolllen%20);
                    break;
    }
}

/*void gotoxy(char row,char col)
{
    disp_count = (((row-1) * 20) + (col-1));
    switch (disp_count / 20)
    {
       case 0    :  set_cursor(ROW1+(disp_count%20));
                    break;
       case 1    :  set_cursor(ROW2+(disp_count%20));
                    break;
       case 2    :  set_cursor(ROW3+(disp_count%20));
                    break;
       case 3    :  set_cursor(ROW4+(disp_count%20));
                    break;
    }
}*/


/*void Disp_cur_rev(void)
{
//    unsigned char lcd_i;
	disp_inst();
    FIO1PIN2 = 0x10;
    disp_enable();
    delay_Ms(1);
	
//	disp_count--;
//	disp_data();
//	FIO1PIN2 = ' ';
//	disp_enable();
//	
//    switch (disp_count / 20)
//    {
//       case 0    :  set_cursor(ROW1+(disp_count%20));
//                    break;
//       case 1    :  set_cursor(ROW2+(disp_count%20));
//                    break;
//       case 2    :  set_cursor(ROW3+(disp_count%20));
//                    break;
//       case 3    :  set_cursor(ROW4+(disp_count%20));
//                    break;
//    }

//	lcdscrolllen--;
//    lcdscrolldata[lcdscrolllen++] = ' ';
//	set_cursor(ROW1);
//	disp_data();
//    for (lcd_i = 0;lcd_i<lcdscrolllen;lcd_i++)
//    {
//        FIO1PIN2 = lcdscrolldata[lcd_i];
//        disp_enable();
//        del_us();
//    }     


}*/ 

void Disp_cur_rev(void)
{
    if (lcdscrolllen != 0)
    {
        lcdscrolllen--;
        switch (lcdscrolllen / 20)
        {
            case 0    :  //set_cursor(ROW1+(lcdscrolllen%20));
						 gotoxy(1,(lcdscrolllen%20));//+1
                         break;
            case 1    :  //set_cursor(ROW2+(lcdscrolllen%20));
						 gotoxy(2,(lcdscrolllen%20));
                           break;
            case 2    :  //set_cursor(ROW3+(lcdscrolllen%20));
						 gotoxy(3,(lcdscrolllen%20));
                         break;
            case 3    :  //set_cursor(ROW4+(lcdscrolllen%20));
						gotoxy(4,(lcdscrolllen%20));
                        break;
        }
        disp_data();
        FIO1PIN2 = ' ';
        disp_enable();
	
		//lcdscrolllen--;
        lcdscrolldata[lcdscrolllen++] = ' ';
        
        switch (lcdscrolllen / 20)
        {
            case 0    :  //set_cursor(ROW1+(lcdscrolllen%20));
						 gotoxy(1,(lcdscrolllen%20));//+1
                         break;
            case 1    :  //set_cursor(ROW2+(lcdscrolllen%20));
						 gotoxy(2,(lcdscrolllen%20));
                           break;
            case 2    :  //set_cursor(ROW3+(lcdscrolllen%20));
						 gotoxy(3,(lcdscrolllen%20));
                         break;
            case 3    :  //set_cursor(ROW4+(lcdscrolllen%20));
						gotoxy(4,(lcdscrolllen%20));
                        break;
        }
    }
}

unsigned char loc_0[]={0x0e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f}; //full
unsigned char loc_1[]={0x0e,0x1b,0x11,0x1f,0x1f,0x1f,0x1f,0x1f}; //75%
unsigned char loc_2[]={0x0e,0x1b,0x11,0x11,0x1f,0x1f,0x1f,0x1f}; //50%
unsigned char loc_3[]={0x0e,0x1b,0x11,0x11,0x11,0x11,0x1f,0x1f}; //25%
unsigned char loc_4[]={0x0e,0x1b,0x11,0x11,0x11,0x11,0x11,0x1f}; //0%
unsigned char loc_5[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char loc_6[]={0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0x1f};
unsigned char loc_7[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f};

void cgram_load(void)
{
    unsigned char cgi;

    disp_inst();
    FIO1PIN2 = 0x40;
    disp_enable();
    delay_Ms(30);

    disp_data();

    for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_0[cgi];
        disp_enable();
        del_us();
    }

    for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_1[cgi];
        disp_enable();
        del_us();
    }

    for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_2[cgi];
        disp_enable();
        del_us();
    }

    for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_3[cgi];
        disp_enable();
        del_us();
    }

    for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_4[cgi];
        disp_enable();
        del_us();
    }

    /*for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_5[cgi];
        disp_enable();
        del_us();
    }

    for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_6[cgi];
        disp_enable();
        del_us();
    }

    for(cgi=0;cgi<8;cgi++)
    {
        FIO1PIN2 = loc_7[cgi];
        disp_enable();
        del_us();
    }
    */
}
void Disp_cur_col(char col_i)
{
    disp_inst();
    
    FIO1PIN2 = col_i + 0x80;
    disp_enable();
    delay_Ms(30);

}

char bat_chk(void)
{  
	float adc_val[4];
	unsigned char blvl,i2_db;
	init_ADC(1);
	blvl=0;

	for(i2_db=0;i2_db<4;i2_db++)
	{
		adc_val[i2_db] = read_ADC(1);
		adc_val[i2_db] = adc_val[i2_db] * 10.89/1024; //10.89  12.23 
		delay_Ms(1);
	}
   adc_val[0] = adc_val[0]+adc_val[1]+adc_val[2]+adc_val[3];
   adc_val[0] = adc_val[0]/4 + 0.48;
    // adc_val[0] = adc_val[0]/4 ;
	 adc_val[0] = adc_val[0]-0.20;
	 gotoxy(2,1);
	printf("BATTERY VOLTAGE=%2.2f\n",adc_val[0]);
		
 	
//		 if (adc_val[0] > 8.0)  blvl = 8;
//	else if (adc_val[0] > 7.6)	blvl = 7;
//	else if (adc_val[0] > 7.2)	blvl = 6;
//	else if (adc_val[0] > 6.8)	blvl = 5;
//	else if (adc_val[0] > 6.4)	blvl = 4;
//	else if (adc_val[0] > 6.0)	blvl = 3;
		 if (adc_val[0] > 8.0)  blvl = 4;
	else if (adc_val[0] > 7.5)	blvl = 3;
	else if (adc_val[0] > 7.0)	blvl = 2;
	else if (adc_val[0] > 6.5)	blvl = 1;
	else if (adc_val[0] > 6.0)	blvl = 0;

  

    set_cursor(ROW1);
    switch(blvl)
    {
        case 4  :   Disp_cur_col(19);                    
                    disp_data();
                    FIO1PIN2 = 0x00;
                    disp_enable();
                    del_us();
                    //low_bat_flag = 0;
                    //lb_led       = 0;
                    break;

        case 3  :   Disp_cur_col(19);                    
                    disp_data();
                    FIO1PIN2 = 0x01;
                    disp_enable();
                    del_us();
                    //low_bat_flag = 0;
                    //lb_led       = 0;
                    break;

        case 2  :   Disp_cur_col(19);
                    disp_data();
                    FIO1PIN2 = 0x02;
                    disp_enable();
                    del_us();
                    //low_bat_flag = 0;
                    //lb_led       = 0;
                    break;

        case 1  :   Disp_cur_col(19);
                    disp_data();
                    FIO1PIN2 = 0x03;
                    disp_enable();
                    del_us();
                    //low_bat_flag = 0;
                    //DATAOUT_B = DATAOUT_B & 0xbf;
                    //lb_led       = 0;
                    break;

        case 0  :   //Disp_erase();
                    //set_cursor(ROW1);
                    //Disp_msg("LOW BATTERY     ",16);
                    disp_data();
                    FIO1PIN2 = 0x04;
                    disp_enable();
                    del_us();
                    set_cursor(ROW2);
                    Disp_msg("RECHARGE BATTERY    ",20);
                    buzzer();
                    buzzer();
                    buzzer();
                    buzzer();
					buzzer();
                    buzzer();
                    buzzer();
                    buzzer();
                    //low_bat_flag = 1;
                    //DATAOUT_B = DATAOUT_B | 0x40;
                    //lb_led       = 1;
                    break;
    }
	
	return blvl;      
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -