?? display.c
字號:
#include "public.h"
void display(void)
{
//做成7x5
make7_5text(m_RecData.cDirect);
//做成7x11
make7_11text();
//滾動
movetext();
//顯示
showtext();
}
//buffer做成(7x11)
void make7_11text(void)
{
uchar cDispVal=0; //顯示值
uchar cDataHigh=0;
uchar cDataLow=0;
uchar cAsciiHigh=0;
uchar cAsciiLow=0;
if(P1_7==0){ // "F0 F1 F2 F3 F4"
if(m_cFuncCnt==0){
if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
cAsciiHigh = 'F';
cAsciiLow = '0';
}else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
cDispVal = data5045.cF0+1;
cDataHigh = cDispVal/10;
cDataLow = cDispVal%10;
cAsciiHigh = __toascii(cDataHigh);
cAsciiLow = __toascii(cDataLow);
}
}else if(m_cFuncCnt==1){
if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
cAsciiHigh = 'F';
cAsciiLow = '1';
}else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
cDispVal = data5045.cF1+1;
cDataHigh = cDispVal/10;
cDataLow = cDispVal%10;
cAsciiHigh = __toascii(cDataHigh);
cAsciiLow = __toascii(cDataLow);
}
}else if(m_cFuncCnt==2){
if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
cAsciiHigh = 'F';
cAsciiLow = '2';
}else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
cDispVal = data5045.cF2+1;
cDataHigh = cDispVal/10;
cDataLow = cDispVal%10;
cAsciiHigh = __toascii(cDataHigh);
cAsciiLow = __toascii(cDataLow);
}
}else if(m_cFuncCnt==3){
if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
cAsciiHigh = 'F';
cAsciiLow = '3';
}else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
cDispVal = data5045.cF3;
cDataHigh = cDispVal/10;
cDataLow = cDispVal%10;
cAsciiHigh = __toascii(cDataHigh);
cAsciiLow = __toascii(cDataLow);
}
}else if(m_cFuncCnt==4){
if((m_cSettingFuncFlg==1)&&(m_cSettingSubFuncFlg==0)){
cAsciiHigh = 'F';
cAsciiLow = '4';
}else if((m_cSettingFuncFlg==0)&&(m_cSettingSubFuncFlg==1)){
cDispVal = data5045.cF4;
cDataHigh = cDispVal/10;
cDataLow = cDispVal%10;
cAsciiHigh = __toascii(cDataHigh);
cAsciiLow = __toascii(cDataLow);
}
}
make7_11buf(cAsciiHigh, cAsciiLow);
}else{ // 顯示樓層(-1~-9,1-48,B1~B9)
if((m_RecData.cCurFloor>=0) && (m_RecData.cCurFloor<=8)){ //-1~-9
cDataHigh = (9-m_RecData.cCurFloor)/10;
cDataLow = (9-m_RecData.cCurFloor)%10;
cAsciiHigh = '-';
cAsciiLow = __toascii(cDataLow);
}else if((m_RecData.cCurFloor>=9) && (m_RecData.cCurFloor<=56)){ //1-48
cDataHigh = (m_RecData.cCurFloor-8)/10;
cDataLow = (m_RecData.cCurFloor-8)%10;
cAsciiHigh = __toascii(cDataHigh);
cAsciiLow = __toascii(cDataLow);
}else if((m_RecData.cCurFloor>=69) && (m_RecData.cCurFloor<=77)){//B1~B9
cDataHigh = (m_RecData.cCurFloor-68)/10;
cDataLow = (m_RecData.cCurFloor-68)%10;
cAsciiHigh = 'B';
cAsciiLow = __toascii(cDataLow);
}else{ //2005.01.20 初始時無數(shù)據(jù)則顯示"--"
cAsciiHigh = '-';
cAsciiLow = '-';
}
make7_11buf(cAsciiHigh, cAsciiLow);
}
}
// cFlg: 0--下箭頭 1--上箭頭 2--空白
void make7_5text(uchar cFlg)
{
uchar i;
// if((m_cMakeNewFlg==0) && (P1_7!=0))
// return;
/*
m_cSrcDirect[0]=0xFF;
m_cSrcDirect[1]=0xFF;
m_cSrcDirect[2]=0xFF;
m_cSrcDirect[3]=0xFF;
m_cSrcDirect[4]=0xFF;
*/
if(P1_7==1){ //跳線未接通
if(cFlg == 0){ // 下箭頭
for(i=0; i<7; i++){
//改為直接修正
// m_cSrcDirect[i]=PRDDown[i];
}
}else if(cFlg == 1){ // 上箭頭
for(i=0; i<7; i++){
//改為直接修正
// m_cSrcDirect[i]=PRDUp[i];
}
}else if(cFlg == 0xFF){ // 空白
for(i=0; i<7; i++){
// m_cSrcDirect[i]=0xFF;
m_cDispDirect[i]=0xFF;
}
}
}else{ //跳線接通
for(i=0; i<5; i++){
// m_cSrcDirect[i]=0xFF;
m_cDispDirect[i]=0xFF;
}
}
}
// 單字節(jié)與雙字節(jié)不同的現(xiàn)實方式
// 當cSpecialFlg=0時,若cText=0x48,則顯示樓層為48;
// 當cSpecialFlg=1時,按特殊功能顯示
void make7_11buf(uchar cTextHigh, uchar cTextLow)
{
uchar cIndexHigh=getindex(cTextHigh);
uchar cIndexLow =getindex(cTextLow);
uchar i;
if(cIndexHigh != 0){ // 雙字符
m_c7_11singledoubleFlg=1;
for(i=0; i<7; i++){
m_cSrcFloorHigh[i]=PR[cIndexHigh][i];
m_cSrcFloorLow[i]=PR[cIndexLow][i];
}
}else{ // 單字符
m_c7_11singledoubleFlg=0;
for(i=0; i<7; i++){
m_cSrcFloorHigh[i]=0xFF;
m_cSrcFloorLow[i]=PR[cIndexLow][i];
}
}
}
void movetext(void)
{
uchar i=0;
uchar j=0;
uchar cTemp=0;
if(data5045.cF2==0){ //固定顯示
for(i=0; i<DIRECT_DISP_BYTENUM; i++){ //7x5
// m_cDispDirect[i] = m_cSrcDirect[i];
if(m_RecData.cDirect==0){ //下
m_cDispDirect[i]=PRDDown[i];
}else if(m_RecData.cDirect==1){ //上
m_cDispDirect[i]=PRDUp[i];
}else if(m_RecData.cDirect==0xFF){ //無(確保無到站動作即可)
m_cDispDirect[i]=0xFF;
}
}
for(i=0; i<FLOOR_DISP_BYTENUM; i++){ //7x11
m_cDispFloorHigh[i] = m_cSrcFloorHigh[i];
m_cDispFloorLow[i] = m_cSrcFloorLow[i];
}
}else if(data5045.cF2==1){ //箭頭滾動
m_cDispDirect[0]=0xFF;
m_cDispDirect[1]=0xFF;
m_cDispDirect[2]=0xFF;
m_cDispDirect[3]=0xFF;
m_cDispDirect[4]=0xFF;
m_cDispDirect[5]=0xFF;
m_cDispDirect[6]=0xFF;
if(m_cNewLineFlg==1){
m_cMoveCnt++;
m_cNewLineFlg=0;
//整組移動完成
if(m_cMoveCnt>6){
m_cWholeMoveOKFlg=1;
// m_cMoveCnt=0;
}
}
if(m_RecData.cDirect==0){ //下向(7x5)
for(i=0; i<m_cMoveCnt; i++){
// m_cDispDirect[i] = m_cSrcDirect[6+1-m_cMoveCnt+i];
m_cDispDirect[i] = PRDDown[6+1-m_cMoveCnt+i];
}
}else if(m_RecData.cDirect==1){ //上向
for(i=0; i<m_cMoveCnt; i++){
// m_cDispDirect[6-i] = m_cSrcDirect[m_cMoveCnt-1-i];
m_cDispDirect[6-i] = PRDUp[m_cMoveCnt-1-i];
}
}else if(m_RecData.cDirect==0xFF){ //無方向
for(i=0; i<7; i++){
// m_cDispDirect[i] = m_cSrcDirect[i];
m_cDispDirect[i] = 0xFF;
}
}
for(i=0; i<FLOOR_DISP_BYTENUM; i++){ //7x11
m_cDispFloorHigh[i] = m_cSrcFloorHigh[i];
m_cDispFloorLow[i] = m_cSrcFloorLow[i];
}
}else if(data5045.cF2==2){ //數(shù)字滾動
for(i=0; i<7; i++){
m_cDispFloorHigh[i]=0xFF;
m_cDispFloorLow[i]=0xFF;
}
if(m_cNewLineFlg==1){
m_cMoveCnt++;
m_cNewLineFlg=0;
//整組移動完成
if(m_cMoveCnt>6){
m_cWholeMoveOKFlg=1;
// m_cMoveCnt=0;
}
}
if(m_RecData.cDirect==0){ //下向(7x11)
for(i=0; i<m_cMoveCnt; i++){
m_cDispFloorHigh[i] = m_cSrcFloorHigh[6+1-m_cMoveCnt+i];
m_cDispFloorLow[i] = m_cSrcFloorLow[6+1-m_cMoveCnt+i];
}
}else if(m_RecData.cDirect==1){ //上向
for(i=0; i<m_cMoveCnt; i++){
m_cDispFloorHigh[6-i] = m_cSrcFloorHigh[m_cMoveCnt-1-i];
m_cDispFloorLow[6-i] = m_cSrcFloorLow[m_cMoveCnt-1-i];
}
}else if(m_RecData.cDirect==0xFF){ //無方向
for(i=0; i<FLOOR_DISP_BYTENUM; i++){ //7x11
m_cDispFloorHigh[i] = m_cSrcFloorHigh[i];
m_cDispFloorLow[i] = m_cSrcFloorLow[i];
}
}
for(i=0; i<DIRECT_DISP_BYTENUM; i++){ //7x5
if(m_RecData.cDirect==0){ //下
m_cDispDirect[i]=PRDDown[i];
}else if(m_RecData.cDirect==1){ //上
m_cDispDirect[i]=PRDUp[i];
}else if(m_RecData.cDirect==0xFF){ //無(確保無到站動作即可)
m_cDispDirect[i]=0xFF;
}
}
}
}
void showtext(void)
{
uchar i;
uchar j;
uchar cDirect_Floor3=0xFF;
uchar cFloor8=0xFF;
uchar cDarkNum=0; //變暗的數(shù)字設(shè)置
if(m_cLockDarkFlg==1){
cDarkNum=60;
}else{
cDarkNum=30;
}
for(i=0; i<7; i++){
cDirect_Floor3=0xFF;
cFloor8=0xFF;
//方向
// cDirect_Floor3 = m_cDispDirect[i]&0x1F;
for(j=0;j<=cDarkNum;j++)
{_nop_();}
PA377=0xff;
PB377=0xff;
PC377=0xff;
//樓層數(shù)
if(m_cFireFlg==1){
cDirect_Floor3=m_cDispDirect[i]&0x1F;
cDirect_Floor3 = cDirect_Floor3|((PR_FIRE[i][0]<<5)&0xE0);
cFloor8=(PR_FIRE[i][0]>>3)&0x1F;
cFloor8=cFloor8|((PR_FIRE[i][1]<<5)&0xE0);
}else if(m_cRepairFlg==1){
cDirect_Floor3=m_cDispDirect[i]&0x1F;
cDirect_Floor3 = cDirect_Floor3|((PR_REPAIRE[i][0]<<5)&0xE0);
cFloor8=(PR_REPAIRE[i][0]>>3)&0x1F;
cFloor8=cFloor8|((PR_REPAIRE[i][1]<<5)&0xE0);
}else if(m_cLockFlg==1){
cDirect_Floor3=m_cDispDirect[i]&0x1F;
cDirect_Floor3 = cDirect_Floor3|((PR_LOCK[i][0]<<5)&0xE0);
cFloor8=(PR_LOCK[i][0]>>3)&0x1F;
cFloor8=cFloor8|((PR_LOCK[i][1]<<5)&0xE0);
}else{
//方向
cDirect_Floor3 = m_cDispDirect[i]&0x1F;
if(m_c7_11singledoubleFlg==1){ //雙字
cDirect_Floor3 = cDirect_Floor3|((m_cDispFloorHigh[i]<<5)&0xE0);
cFloor8=(m_cDispFloorHigh[i]>>3)&0x03;
cFloor8=cFloor8|0x04;
cFloor8=cFloor8|((m_cDispFloorLow[i])<<3);
}else{ //單字
cDirect_Floor3=cDirect_Floor3|0xE0;
cFloor8=(m_cDispFloorLow[i])&0x1F;
cFloor8=cFloor8|0xE0;
}
}
PA377=~(0x01<<i); //行
PB377=cDirect_Floor3;
PC377=cFloor8;
}
for(j=0;j<=cDarkNum;j++)
{_nop_();}
PA377=0xff;
PB377=0xff;
PC377=0xff;
}
//取得字庫索引
uchar getindex(uchar szText)
{
uchar ret=0;
switch(szText){
case '0': ret=0; break;
case '1': ret=1; break;
case '2': ret=2; break;
case '3': ret=3; break;
case '4': ret=4; break;
case '5': ret=5; break;
case '6': ret=6; break;
case '7': ret=7; break;
case '8': ret=8; break;
case '9': ret=9; break;
case 'B': ret=10; break;
case 'F': ret=11; break;
case '-': ret=12; break;
}
return ret;
}
// 16進制數(shù)字轉(zhuǎn)換為ASCII
uchar __toascii(uchar c)
{
uchar ret;
if(c>9)
ret=0x37+c;
else
ret=0x30+c;
return ret;
}
/*
//取得索引值為cIdx的數(shù)據(jù)
uchar GetArrayData(uchar *pData, uchar cIdx)
{
uchar ret=0x00;
// uchar cMoveBit = cIdx; //移動位數(shù)
ret = ((*pData)>>cIdx) & 0x01;
return ret;
}
void SetArrayData(uchar *pData, uchar cIdx, uchar cVal)
{
uchar cTemp= cVal;
// uchar cMoveBit = cIdx; //移動位數(shù)
if(cVal==1){
cTemp = cTemp<<cIdx;
*pData = (*pData)|cTemp;
}else{
Set0Data(pData, cIdx);
}
}
void Set0Data(uchar *pData, uchar cMOD)
{
switch(cMOD){
case 0: *pData = (*pData)&0xFE; break; // 1111,1110
case 1: *pData = (*pData)&0xFD; break; // 1111,1101
case 2: *pData = (*pData)&0xFB; break; // 1111,1011
case 3: *pData = (*pData)&0xF7; break; // 1111,0111
case 4: *pData = (*pData)&0xEF; break; // 1110,1111
case 5: *pData = (*pData)&0xDF; break; // 1101,1111
case 6: *pData = (*pData)&0xBF; break; // 1011,1111
case 7: *pData = (*pData)&0x7F; break; // 0111,1111
default: break;
}
}
*/
void led(void) //can總線正在通訊狀態(tài)和通訊錯誤狀態(tài)顯示燈賦值片斷。
{
uchar commerr_flg=0;
if((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x80)==0x80) //總線狀態(tài)為關(guān)閉時
{//P3_1=0;
commerr_flg=1;
/*
P2_7=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P2_7=1;
*/
can_init();
}
if((XBYTE[((P2&0xe0)|0x0F)*256]&0x01)!=0x00) //總線狀態(tài)為復位時
{//P3_1=0;
commerr_flg=1;
/*
P2_7=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P2_7=1;
*/
can_init();
}
if((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x40)==0x40) //錯誤寄存器為1時
{//P3_1=0;
commerr_flg=1;
/*
P2_7=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
P2_7=1;
*/
can_init();
}
if((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x02)==0x02){ //數(shù)據(jù)溢出時
commerr_flg=1;
XBYTE[((P2&0xe0)|0x0F)*256+1]=0x0C;
}
if(commerr_flg==0){
if(((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x20)==0x20)||((XBYTE[((P2&0xe0)|0x0F)*256+2]&0x10)==0x10))//正在發(fā)送或正在接收時
{P3_0=0;}
else
{P3_0=1;}
}else{
P3_0=0;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -