📄 display.c
字号:
//显示模块
#include "main.h"
#include "config.h"
#include "display.h"
const prog_char NumData[10][4]={ //0~9 10个数字
{ 0x18,0x08,0x18,0x08 },//0L
{ 0x00,0x08,0x08,0x00 },//1L
{ 0x08,0x18,0x10,0x08 },//2L
{ 0x08,0x18,0x08,0x08 },//3L
{ 0x10,0x18,0x08,0x00 },//4L
{ 0x18,0x10,0x08,0x08 },//5L
{ 0x18,0x10,0x18,0x08 },//6L
{ 0x08,0x08,0x08,0x00 },//7L
{ 0x18,0x18,0x18,0x08 },//8L
{ 0x18,0x18,0x08,0x08 },//9L
};
const prog_char OutStateData[5][4]={ //激光功率状态
{ 0x00,0x00,0x00,0x00 },//0
{ 0x80,0x00,0x00,0x00 },//1
{ 0x80,0x80,0x00,0x00 },//2
{ 0x80,0x80,0x80,0x00 },//3
{ 0x80,0x80,0x80,0x80 },//4
};
const prog_char TherapyDymData[4][4]={ //治疗中...动画显示
{ 0x04,0x00,0x00,0x00 },//治疗中
{ 0x04,0x04,0x00,0x00 },//治疗中.
{ 0x04,0x04,0x04,0x00 },//治疗中..
{ 0x04,0x04,0x04,0x04 },//治疗中...
};
const prog_char BatteryCapData[5][4]={ //“电量状态”
{ 0x00,0x00,0x00,0x00 },//0
{ 0x00,0x00,0x00,0x01 },//1
{ 0x01,0x00,0x00,0x01 },//2
{ 0x01,0x01,0x00,0x01 },//3
{ 0x01,0x01,0x01,0x01 },//4
};
const prog_char ChargeStayData[4] ={ 0x02,0x00,0x00,0x00 };//显示“充电中”
const prog_char BottomData[4]={ 0x00,0x02,0x02,0x00 }; //显示“纳普源“,“电池壳”
const prog_char OutAdjustData[4]={ 0x00,0x00,0x00,0x40 };//显示文字“功率调整”
/*************
const uchar *maph= &NumData[0][0],
*mapl= &NumData[0][0],
*mapcha= &ChargeStayData[0],
*mapbot= &BottomData[0],
*mapbat= &BatteryCapData[0][0],
*mapout= &OutStateData[0][0],
*mapthe= &TherapyDymData[0][0],
*mapouta= &OutAdjustData[0];
********/
void Show_State(void)
{
// (x|=(1<<y)) //将x中的y位置1
// (x&=~(1<<y)) //将x中的y位清0
//(x^=(1<<y)) //将x中的y位取反
static char Bit=1;
switch (Bit)
{
case 1:
PORTC|=(1<<0);
DDRC|=(1<<0);
DDRC&=~(1<<3);
PORTD=~Seg[0];
break;
case 2:
PORTC&=~(1<<0);
PORTD=Seg[0];
break;
case 3:
PORTC|=(1<<1);
DDRC|=(1<<1);
DDRC&=~(1<<0);
PORTD=~Seg[1];
break;
case 4:
PORTC&=~(1<<1);
PORTD=Seg[1];
break;
case 5:
PORTC|=(1<<2);
DDRC|=(1<<2);
DDRC&=~(1<<1);
PORTD=~Seg[2];
break;
case 6:
PORTC&=~(1<<2);
PORTD=Seg[2];
break;
case 7:
PORTC|=(1<<3);
DDRC|=(1<<3);
DDRC&=~(1<<2);
PORTD=~Seg[3];
break;
case 8:
PORTC&=~(1<<3);
PORTD=Seg[3];
break;
default:
break;
}
if(++Bit>8)
{
Bit=1;
}
}
void Time_Display(uchar TimeDelay) //用于显示当前系统时间,2位,单位:分钟
{
//uchar mh,ml;
uchar i;
const unsigned char *maph= &NumData[0][0],*mapl= &NumData[0][0];
//mh=Time_minu/10;
//ml=Time_minu%10;
maph+=mh*4;
mapl+=ml*4;
for(i=0;i<4;i++)
{Seg[i]=(pgm_read_byte(maph++)<<2)+pgm_read_byte(mapl++);}
DelayMs(TimeDelay);
}
void Time_Display_Test(void) //作测试 用于显示当前系统时间,2位,单位:分钟
{
uchar mh,ml;
//mh=Time_minu/10;
//ml=Time_minu%10;
mh=Time_sec/10;
ml=Time_sec%10;
switch(ml)
{
case 0x00: //显示个位“0”
Seg[0]=0x18;
Seg[1]=0x08;
Seg[2]=0x18;
Seg[3]=0x08;
break;
case 0x01: //显示个位“1”
Seg[0]=0x00;
Seg[1]=0x08;
Seg[2]=0x08;
Seg[3]=0x00;
break;
case 0x02: //显示个位“2”
Seg[0]=0x08;
Seg[1]=0x18;
Seg[2]=0x10;
Seg[3]=0x08;
break;
case 0x03: //显示个位“3”
Seg[0]=0x08;
Seg[1]=0x18;
Seg[2]=0x08;
Seg[3]=0x08;
break;
case 0x04: //显示个位“4”
Seg[0]=0x10;
Seg[1]=0x18;
Seg[2]=0x08;
Seg[3]=0x00;
break;
case 0x05: //显示个位“5”
Seg[0]=0x18;
Seg[1]=0x10;
Seg[2]=0x08;
Seg[3]=0x08;
break;
case 0x06: //显示个位“6”
Seg[0]=0x18;
Seg[1]=0x10;
Seg[2]=0x18;
Seg[3]=0x08;
break;
case 0x07: //显示个位“7”
Seg[0]=0x08;
Seg[1]=0x08;
Seg[2]=0x08;
Seg[3]=0x00;
break;
case 0x08: //显示个位“8”
Seg[0]=0x18;
Seg[1]=0x18;
Seg[2]=0x18;
Seg[3]=0x08;
break;
case 0x09: //显示个位“9”
Seg[0]=0x18;
Seg[1]=0x18;
Seg[2]=0x08;
Seg[3]=0x08;
break;
default:
break;
}
DelayMs(10);
switch(mh)
{
case 0x00: //显示个位“0”
Seg[0]=0x18<<2;
Seg[1]=0x08<<2;
Seg[2]=0x18<<2;
Seg[3]=0x08<<2;
break;
case 0x01: //显示个位“1”
Seg[0]=0x00<<2;
Seg[1]=0x08<<2;
Seg[2]=0x08<<2;
Seg[3]=0x00<<2;
break;
case 0x02: //显示个位“2”
Seg[0]=0x08<<2;
Seg[1]=0x18<<2;
Seg[2]=0x10<<2;
Seg[3]=0x08<<2;
break;
case 0x03: //显示个位“3”
Seg[0]=0x08<<2;
Seg[1]=0x18<<2;
Seg[2]=0x08<<2;
Seg[3]=0x08<<2;
break;
case 0x04: //显示个位“4”
Seg[0]=0x10<<2;
Seg[1]=0x18<<2;
Seg[2]=0x08<<2;
Seg[3]=0x00<<2;
break;
case 0x05: //显示个位“5”
Seg[0]=0x18<<2;
Seg[1]=0x10<<2;
Seg[2]=0x08<<2;
Seg[3]=0x08<<2;
break;
case 0x06: //显示个位“6”
Seg[0]=0x18<<2;
Seg[1]=0x10<<2;
Seg[2]=0x18<<2;
Seg[3]=0x08<<2;
break;
case 0x07: //显示个位“7”
Seg[0]=0x08<<2;
Seg[1]=0x08<<2;
Seg[2]=0x08<<2;
Seg[3]=0x00<<2;
break;
case 0x08: //显示个位“8”
Seg[0]=0x18<<2;
Seg[1]=0x18<<2;
Seg[2]=0x18<<2;
Seg[3]=0x08<<2;
break;
case 0x09: //显示个位“9”
Seg[0]=0x18<<2;
Seg[1]=0x18<<2;
Seg[2]=0x08<<2;
Seg[3]=0x08<<2;
break;
default:
break;
}
DelayMs(10);
}
void POWERState_Display(uchar TimeDelay)
{
//AllState=0x04;
uchar i;
const unsigned char *mapbot= &BottomData[0],*mapbat= &BatteryCapData[0][0];
switch(AllState&0b00000111)
{
case 0x00: //显示“纳普源“、“电池壳”、“电量状态(0格)”、“电量不足”
for(i=0;i<4;i++)
{
Seg[i]=pgm_read_byte(mapbat+i)+pgm_read_byte(mapbot+i);
if(i==3)Seg[i]+=0x02;
}
break;
case 0x01: //显示“纳普源“、“电池壳”、“电量状态(1格)”
for(i=0;i<4;i++)
{
Seg[i]=pgm_read_byte(mapbat+4+i)+pgm_read_byte(mapbot+i);
}
break;
case 0x02: //显示“纳普源“、“电池壳”、“电量状态(2格)”
for(i=0;i<4;i++)
{
Seg[i]=pgm_read_byte(mapbat+8+i)+pgm_read_byte(mapbot+i);
}
break;
case 0x03: //显示“纳普源“、“电池壳”、“电量状态(3格)”
for(i=0;i<4;i++)
{
Seg[i]=pgm_read_byte(mapbat+12+i)+pgm_read_byte(mapbot+i);
}
break;
case 0x04: //显示“纳普源“、“电池壳”、“电量状态(4格)”
for(i=0;i<4;i++)
{
Seg[i]=pgm_read_byte(mapbat+16+i)+pgm_read_byte(mapbot+i);
}
break;
}
DelayMs(TimeDelay);
}
//工作状态显示函数
void WORKState_Display(uchar TimeDelay,uchar n,uchar m) //TimeDelay-显示延时;n-功率状态;m-电池容量状态
{
uchar i,mh,ml,SegTemp[4];
const unsigned char *mapout= &OutStateData[0][0],*mapthe= &TherapyDymData[0][0],*mapbat= &BatteryCapData[0][0],*mapbot= &BottomData[0],*mapouta= &OutAdjustData[0];
const unsigned char *maph= &NumData[0][0],*mapl= &NumData[0][0];
times++;
mh=Time_minu/10;//mh=Time_sec/10;
ml=Time_minu%10;//ml=Time_sec%10;
maph+=mh*4;
mapl+=ml*4;
for(i=0;i<4;i++)
{
SegTemp[i]=pgm_read_byte(mapout+n*4+i)+pgm_read_byte(mapbat+m*4+i)+pgm_read_byte(mapbot+i)+(pgm_read_byte(maph+i)<<2)+pgm_read_byte(mapl+i)+pgm_read_byte(mapouta+i);//应老板要求加mapouta的功率调整显示
if((m==0)&&(i==3))SegTemp[i]+=0x02;
}
//if(m==0)SegTemp[i]+=0x02;
if(times<25)//显示“治疗中”,功率状态,容量状态
{
for(i=0;i<4;i++)
Seg[i]=SegTemp[i]+pgm_read_byte(mapthe+i);
}
else if(times>=25&×<50)
{
for(i=0;i<4;i++)
Seg[i]=SegTemp[i]+pgm_read_byte(mapthe+4+i);
}
else if(times>=50&×<75)
{
for(i=0;i<4;i++)
Seg[i]=SegTemp[i]+pgm_read_byte(mapthe+8+i);
}
else if(times>=75&×<100)
{
for(i=0;i<4;i++)
Seg[i]=SegTemp[i]+pgm_read_byte(mapthe+12+i);
}
else times=0;
DelayMs(TimeDelay);
}
//工作状态/功率调整显示函数
void ADJUSTState_Display(uchar TimeDelay,uchar n,uchar m)//TimeDelay-显示延时;n-功率状态;m-电池容量状态
{
uchar i;
const unsigned char *mapout= &OutStateData[0][0],*mapbat= &BatteryCapData[0][0],*mapbot= &BottomData[0],*mapouta= &OutAdjustData[0];
times++;
for(i=0;i<4;i++)
{
Seg[i]=pgm_read_byte(mapout+n*4+i)+pgm_read_byte(mapbat+m*4+i)+pgm_read_byte(mapbot+i)+pgm_read_byte(mapouta+i);
if((m==0)&&(i==3))Seg[i]+=0x02;
}
DelayMs(TimeDelay);
}
void ChargePOWERState_Display(uchar TimeDelay) //TimeDelay-显示延时;n-功率状态;m-电池容量状态 //用于显示当前系统是否处于“充电中...”,如果为充电中状态时,循环显示电量状态
{ //POWER/RA5键-PB6//待机过程中充电
uchar i,mh,ml,SegTemp[4];
const uchar *maph= &NumData[0][0],
*mapl= &NumData[0][0],
*mapcha= &ChargeStayData[0],
*mapbot= &BottomData[0],
*mapbat= &BatteryCapData[0][0],
*mapout= &OutStateData[0][0],
*mapthe= &TherapyDymData[0][0],
*mapouta= &OutAdjustData[0];
ChargeTimes++;
mh=Time_sec/10;
ml=Time_sec%10;
maph+=mh*4;
mapl+=ml*4;
for(i=0;i<4;i++)
{
SegTemp[i]=pgm_read_byte(mapcha+i)+pgm_read_byte(mapbot+i);
}
if(ChargeTimes<25) //显示“纳普源“、“电池壳”、“电量状态(0格)”、“充电中...”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+i);}
}
else if(ChargeTimes>=25&&ChargeTimes<50) //显示“纳普源“、“电池壳”、“电量状态(1格)”、“充电中...”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+4+i);}
}
else if(ChargeTimes>=50&&ChargeTimes<75) ////显示“纳普源“、“电池壳”、“电量状态(2格)”、“充电中...”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+8+i);}
}
else if(ChargeTimes>=75&&ChargeTimes<100) //显示“纳普源“、“电池壳”、“电量状态(3格)”、“充电中...”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+12+i);}
}
else if(ChargeTimes>=100&&ChargeTimes<125) //显示“纳普源“、“电池壳”、“电量状态(4格)”、“充电中...”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+16+i);}
}
else ChargeTimes=0;
DelayMs(TimeDelay);
}
void ChargeWORKState_Display(uchar TimeDelay,uchar n,uchar m) //TimeDelay-显示延时;n-功率状态;m-电池容量状态
{ //WORK键-PC4//工作过程中充电
uchar i,mh,ml,SegTemp[4];
const uchar *maph= &NumData[0][0],
*mapl= &NumData[0][0],
*mapcha= &ChargeStayData[0],
*mapbot= &BottomData[0],
*mapbat= &BatteryCapData[0][0],
*mapout= &OutStateData[0][0],
*mapthe= &TherapyDymData[0][0],
*mapouta= &OutAdjustData[0];
ChargeTimes++;
mh=Time_minu/10;//mh=Time_sec/10;
ml=Time_minu%10;//ml=Time_sec%10;
maph+=mh*4;
mapl+=ml*4;
for(i=0;i<4;i++)
{
SegTemp[i]=pgm_read_byte(mapout+n*4+i)+pgm_read_byte(mapbot+i)+(pgm_read_byte(maph+i)<<2)+pgm_read_byte(mapl+i)+pgm_read_byte(mapcha+i)+pgm_read_byte(mapouta+i);
}
if(ChargeTimes<25) //显示“电量状态(0格)”、“充电中...”、“治疗中”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+i)+pgm_read_byte(mapthe+i);}
}
else if(ChargeTimes>=25&&ChargeTimes<50) //显示“电量状态(1格)”、“充电中...”、“治疗中.”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+4+i)+pgm_read_byte(mapthe+4+i);}
}
else if(ChargeTimes>=50&&ChargeTimes<75) //显示“电量状态(2格)”、“充电中...”、“治疗中..”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+8+i)+pgm_read_byte(mapthe+8+i);}
}
else if(ChargeTimes>=75&&ChargeTimes<100) //显示“电量状态(3格)”、“充电中...”、“治疗中...”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+12+i)+pgm_read_byte(mapthe+12+i);}
}
else if(ChargeTimes>=100&&ChargeTimes<125) //显示“纳普源“、“电池壳”、“电量状态(4格)”、“充电中...”
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+16+i)+pgm_read_byte(mapthe+i);} //显示“电量状态(4格)”、“充电中...”、“治疗中...”
}
else ChargeTimes=0;
DelayMs(TimeDelay);
}
void ChargeADJUSTState_Display(uchar TimeDelay,uchar n,uchar m)//TimeDelay-显示延时;n-功率状态;m-电池容量状态
{ //ADJUST_P键-PC5//调整过程中充电
uchar i,mh,ml,SegTemp[4];
const uchar *maph= &NumData[0][0],
*mapl= &NumData[0][0],
*mapcha= &ChargeStayData[0],
*mapbot= &BottomData[0],
*mapbat= &BatteryCapData[0][0],
*mapout= &OutStateData[0][0],
*mapthe= &TherapyDymData[0][0],
*mapouta= &OutAdjustData[0];
ChargeTimes++;
mh=Time_sec/10;
ml=Time_sec%10;
maph+=mh*4;
mapl+=ml*4;
for(i=0;i<4;i++)
{
SegTemp[i]=pgm_read_byte(mapout+n*4+i)+pgm_read_byte(mapbot+i)+pgm_read_byte(mapouta+i)+pgm_read_byte(mapcha+i);
}
if(ChargeTimes<25) //显示“电量状态(0格)”、“充电中...”、“当前功率状态”、功率调整
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+i);}
}
else if(ChargeTimes>=25&&ChargeTimes<50) //显示“电量状态(1格)”、“充电中...”、“当前功率状态”、功率调整
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+4+i);}
}
else if(ChargeTimes>=50&&ChargeTimes<75) //显示“电量状态(2格)”、“充电中...”、“当前功率状态”、功率调整
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+8+i);}
}
else if(ChargeTimes>=75&&ChargeTimes<100) //显示“电量状态(3格)”、“充电中...”、“当前功率状态”、功率调整
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+12+i);}
}
else if(ChargeTimes>=100&&ChargeTimes<125) //显示“电量状态(4格)”、“充电中...”、“当前功率状态”、功率调整
{
for(i=0;i<4;i++)
{Seg[i]=SegTemp[i]+pgm_read_byte(mapbat+16+i);}
}
else ChargeTimes=0;
DelayMs(TimeDelay);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -