📄 display.c.bak
字号:
/*-----------------------------------------------------------------------/
函数名称:lcd_ascii_16x24()
功能:显示ascii,大小为16×24
参数:显示的起始位置、显示的数字、移动的位数、左半部字模存储区、
右半部字模存储区
返回值:无
/-----------------------------------------------------------------------*/
void lcd_ascii_16x24(unsigned char x,unsigned char y,unsigned char num,
const unsigned char *zimo,unsigned char bit_move,unsigned char *left_mode,
unsigned char *right_mode,unsigned int page)
{
unsigned int i;
unsigned char m;
unsigned char k;
if(bit_move==0){
for(m=0;m<2;m++){
lcd_start(x+m+page,y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
sei();
for(i=24*m;i<24*(m+1);i++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~zimo[i+48*num]);
}
cli();
}
}
else{
for(m=0;m<2;m++){
k=0;
for(i=m*24;i<24*(m+1);i++){
left_mode[k++]=zimo[i+48*num];
}
lcd_move_left_yang(left_mode,right_mode,24,bit_move);
lcd_start(x+page+m-1,y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
for(k=0;k<24;k++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~left_mode[k]);
}
lcd_start(x+page+m,y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
for(k=0;k<24;k++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~right_mode[k]);
}
if(page==first_page){
page=secon_page;
}
else if(page==secon_page){
page=first_page;
}
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_ascii_16x16()
功能:显示ascii,大小为16×16
参数:显示的起始位置、显示的数字、移动的位数、左半部字模存储区、
右半部字模存储区
返回值:无
/-----------------------------------------------------------------------*/
void lcd_ascii_16x16(unsigned char x,unsigned char y,unsigned char num,
const unsigned char *zimo,unsigned char bit_move,unsigned char *left_mode,
unsigned char *right_mode,unsigned int page)
{
unsigned int i;
unsigned char m;
unsigned char k;
if(bit_move==0){
for(m=0;m<2;m++){
lcd_start(x+m+page,y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
sei();
for(i=16*m;i<16*(m+1);i++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~zimo[i+32*num]);
}
cli();
}
}
else{
for(m=0;m<2;m++){
k=0;
for(i=m*16;i<16*(m+1);i++){
left_mode[k++]=zimo[i+32*num];
}
lcd_move_left_yang(left_mode,right_mode,16,bit_move);
lcd_start(x+page+m-1,y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
for(k=0;k<16;k++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~left_mode[k]);
}
lcd_start(x+page+m,y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
for(k=0;k<16;k++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~right_mode[k]);
}
if(page==first_page){
page=secon_page;
}
else if(page==secon_page){
page=first_page;
}
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_bmp()
功能:显示图形,大小为col×row
参数:显示的起始位置、图形所占列数、图形所占行数、显示的汉字个数、字模地址、
移动的位数、左半部字模存储区、右半部字模存储区
返回值:无
/-----------------------------------------------------------------------*/
void lcd_bmp(unsigned char bmp_x,unsigned char bmp_y,unsigned char col,unsigned char row,
unsigned char num,const unsigned char *zimo,unsigned char bit_move,
unsigned char *left_mode,unsigned char *right_mode,unsigned int page)
{
unsigned int bmp_i;
unsigned int bmp_m;
unsigned int bmp_k;
unsigned int bmp_n;
if(LCD_fault()==0)return;
for(bmp_n=0;bmp_n<num;bmp_n++){
if(bit_move==0){
for(bmp_m=0;bmp_m<col;bmp_m++){
lcd_start(bmp_x+bmp_m+page+col*bmp_n,bmp_y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
sei();
for(bmp_i=row*bmp_m;bmp_i<row*(bmp_m+1);bmp_i++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(zimo[bmp_i+col*row*bmp_n]);
}
cli();
}
}
else{
for(bmp_m=0;bmp_m<col;bmp_m++){
bmp_k=0;
for(bmp_i=bmp_m*row;bmp_i<row*(bmp_m+1);bmp_i++){
left_mode[bmp_k++]=zimo[bmp_i+col*row*bmp_n];
}
lcd_move_left_yang(left_mode,right_mode,row,bit_move);
lcd_start(bmp_x+page+col*bmp_n+bmp_m-1,bmp_y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
sei();
for(bmp_k=0;bmp_k<row;bmp_k++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(left_mode[bmp_k]);
}
cli();
lcd_start(bmp_x+page+bmp_m+col*bmp_n,bmp_y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
sei();
for(bmp_k=0;bmp_k<row;bmp_k++){
LCD_READ_idel_timeout();
LCD_READ_busy_timeout();
LCD_WRITE_DATA(right_mode[bmp_k]);
}
cli();
if(page==first_page){
page=secon_page;
}
else if(page==secon_page){
page=first_page;
}
}
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_ascii_string()
功能:显示ascii字符串,大小为8×16或16x32
参数:显示的起始位置、显示的字符串、移动的位数、字符类型、显示的层数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_ascii_string(unsigned char string_x,unsigned char string_y,const unsigned char *string,
unsigned char bit_move,unsigned char ch_size,unsigned int page)
{
unsigned char lcd_i;
unsigned char ascii_mode;
if(LCD_fault()==0)return;
for(lcd_i=0;;lcd_i++){
if(string[lcd_i]==0x00){
return;
}
else if((string[lcd_i]==0x2e)||(string[lcd_i]==0x3a)){
ascii_mode=10;
}
else if(string[lcd_i]==0x2d){
ascii_mode=11;
}
else if((string[lcd_i]==0x20)&&(ch_size==0)){
ascii_mode=11;
}
else if((string[lcd_i]==0x20)&&(ch_size==1)){
ascii_mode=11;
}
else if((string[lcd_i]==0x20)&&(ch_size==2)){
ascii_mode=10;
}
else{
ascii_mode=string[lcd_i]-0x30;
}
if(ch_size==0){
lcd_ascii_16x24(string_x,string_y,ascii_mode,ascii_1624,
bit_move,zimode_left,zimode_right,page);
}
if(ch_size==2){
//lcd_ascii_16x16(string_x,string_y,ascii_mode,ascii_1616_2,
//bit_move,zimode_left,zimode_right,page);
}
if((ch_size==0)||(ch_size==2))string_x+=2;
else if(ch_size==1)string_x+=4;
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_line()
功能:显示一条直线
参数:显示的起始位置、结束位置
返回值:无
/-----------------------------------------------------------------------*/
void lcd_line(unsigned char start_x,unsigned char start_y,
unsigned char end_x,unsigned int page)
{
unsigned char i;
unsigned int temp;
unsigned char hi,lo;
temp=start_y*AP+start_x+page;
hi=(unsigned char)(temp>>8);
lo=(unsigned char)temp;
LCD_WRITE_COM(CSRRGT);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(lo);
LCD_WRITE_DATA(hi);
LCD_WRITE_COM(MWRITE);
for(i=0;i<end_x;i++){
LCD_WRITE_DATA(0xff);
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_back()
功能:显示背景
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_back(void)
{
if(LCD_fault()==0)return;
lcd_bmp(9,5,24,28,1,zgzq_w,0,zimode_left,zimode_right,secon_page);//显示中国重汽
lcd_bmp(0,28,6,118,1,volt,0,zimode_left,zimode_right,first_page);//显示电压
lcd_bmp(34,24,6,121,1,oil,0,zimode_left,zimode_right,secon_page);//显示油压
lcd_bmp(35,159,5,24,1,km,4,zimode_left,zimode_right,secon_page);//km
lcd_line(0,146,40,secon_page);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_vol_indi()
功能:显示油压、电压指示
参数:起始位置,起始刻度、结束刻度、显示的层数
返回值:
/-----------------------------------------------------------------------*/
void lcd_vol_indi(unsigned char x,unsigned char y,unsigned char
start_num, unsigned char end_num,unsigned int page)
{
unsigned int temp;
unsigned char hi,lo;
char indi_m;
char indi_i;
if(LCD_fault()==0)return;
if(start_num<end_num){
for(indi_m=start_num;indi_m<end_num;indi_m++){
temp=(y-indi_m)*AP+x+page;
hi=(unsigned char)(temp>>8);
lo=(unsigned char)temp;
LCD_WRITE_COM(CSRRGT);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(lo);
LCD_WRITE_DATA(hi);
LCD_WRITE_COM(MWRITE);
sei();
for(indi_i=0;indi_i<5;indi_i++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~vo_indi_fill[(98-indi_m)*5+indi_i]);
}
cli();
}
}
else if(start_num>end_num){
for(indi_m=end_num;indi_m<start_num;indi_m++){
temp=(y-indi_m)*AP+x+page;
hi=(unsigned char)(temp>>8);
lo=(unsigned char)temp;
LCD_WRITE_COM(CSRRGT);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(lo);
LCD_WRITE_DATA(hi);
LCD_WRITE_COM(MWRITE);
sei();
for(indi_i=0;indi_i<5;indi_i++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~vo_indi_clr[(98-indi_m)*5+indi_i]);
}
cli();
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_oil_indi()
功能:显示油压、电压指示
参数:起始位置,起始刻度、结束刻度、显示的层数
返回值:
/-----------------------------------------------------------------------*/
void lcd_oil_indi(unsigned char oil_x,unsigned char oil_y,unsigned
char start_num,unsigned char end_num,unsigned int page)
{
unsigned int temp;
unsigned char hi,lo;
char indi_m;
char indi_i;
if(LCD_fault()==0)return;
if(start_num<end_num){
for(indi_m=start_num;indi_m<end_num;indi_m++){
temp=(oil_y-indi_m)*AP+oil_x+page;
hi=(unsigned char)(temp>>8);
lo=(unsigned char)temp;
LCD_WRITE_COM(CSRRGT);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(lo);
LCD_WRITE_DATA(hi);
LCD_WRITE_COM(MWRITE);
sei();
for(indi_i=0;indi_i<4;indi_i++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~oil_indi_fill[(98-indi_m)*4+indi_i]);
}
cli();
}
}
else if(start_num>end_num){
for(indi_m=end_num;indi_m<start_num;indi_m++){
temp=(oil_y-indi_m)*AP+oil_x+page;
hi=(unsigned char)(temp>>8);
lo=(unsigned char)temp;
LCD_WRITE_COM(CSRRGT);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(lo);
LCD_WRITE_DATA(hi);
LCD_WRITE_COM(MWRITE);
sei();
for(indi_i=0;indi_i<4;indi_i++){
while(LCD_READ_busy()==0x00);
while(LCD_READ_busy()==0x40);
LCD_WRITE_DATA(~oil_indi_clr[(98-indi_m)*4+indi_i]);
}
cli();
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_failure_cyc()
功能:故障的循环显示
参数:起始故障值、故障缓存区
返回值:返回下一个故障值
/-----------------------------------------------------------------------*/
unsigned char lcd_failure_cyc(unsigned char failure_value,unsigned char *fail)
{
unsigned char fa_i;
for(fa_i=failure_value;fa_i<20;fa_i++){
if(fail[fa_i]==1){
return fa_i;
}
}
return 0;
}
/*-----------------------------------------------------------------------/
函数名称:lcd_failure()
功能:显示故障
参数:起始位置 故障值
返回值:
/-----------------------------------------------------------------------*/
void lcd_failure(unsigned char head_x,unsigned char head_y,int failure)
{
//lcd_display_OFF(0x56);
switch (failure) {
case 0: //工作正常
lcd_clr_row(9,38,25,108,first_page);
//lcd_display_ON(0x56);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -