📄 display_4x20.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;
unsigned char row, col;
char buff[1];
row = disp_count/20;
col = disp_count%20;
//gotoxy(row,col);
switch (row)
{
case 0 : set_cursor(ROW1+col);
break;
case 1 : set_cursor(ROW2+col);
break;
case 2 : set_cursor(ROW3+col);
break;
case 3 : set_cursor(ROW4+col);
break;
}
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 == 0x08)
{
disp_count--;
Disp_msg(" ",1);
disp_count--;
}
else
{ buff[0]=c;
Disp_msg(buff,1);
}
return c;
//return ch;
}*/
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 == 0x28)
{
//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 Disp_cur_rev(void)
{
disp_inst();
FIO1PIN2 = 0x10;
disp_enable();
delay_Ms(1);
} */
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;
}
//putchar(" ");
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 + -