📄 function.c
字号:
//#include "sys.h"
#include "user.h"
#include "ShowLcd.h"
#define MCUCALLPC 0x5b
#define RECEIVEFILEOK 0x55
//extern UCHAR arrayNum; //???????
extern UCHAR groupCurrent; //已采集得数据组数
UCHAR AddressL,AddressH;
UCHAR UIData[8] = {0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30};//比基站数据多两个字节,估计当时是为了凑足EEPROM的整数地址 //save the data from the cell
bit receiveFlag,responseFlag,sendFlag;
data UCHAR *p;
typedef struct
{
UCHAR cellStack[CELLMAXNUM];
UCHAR length;
UCHAR point;
}ASTACK;
ASTACK cellInfo;
void UserInit()
{
cellInfo.length = 0;
cellInfo.point = 0;
cellInfo.cellStack[0] = 0;
receiveFlag = 0;
responseFlag = 0;
sendFlag = 0;
SEND_RECEIVE = 1; //send status
}
void Write_Display(UCHAR *Display_Addr)
{
UCHAR tmp;
Write_Addr(0);
for(tmp = 0;tmp < 16;tmp ++)
{
Write_Data(Display_Addr[tmp]);
Delay(1);
}
Delay(100);
Write_Addr(16);
for(tmp = 16;tmp < 32;tmp ++)
{
Write_Data(Display_Addr[tmp]);
Delay(1);
}
}
void PC_CellDisplay()
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(selectString);
}
void EEPQ_Display()
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(EEPQMover);
}
void EEPnum_Display()
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(EEPnum);
}
void NUM_GROUG_DISPLAY()
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(GROUP);
}
void Err_Display()
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(ErorrMessage);
}
void TOPC_display(void)
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(TOPCSMessage);
}
void DELROM_display(void)
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(delterom);
}
void CELLCALL_display(void)
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(CALLCELLMessage);
}
void EEPROMquery_display(void)
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(EEPROMQURRYMess);
}
void EEPROMDELE_display(void)
{
Init_LCD();
Delay(50);
LCDClr();
Delay(50);
Write_Display(backspack);
Delay(50);
Write_Display(EEPROMMessage);
}
//the frequency of MCU is 12MHz;
void Delay(UCHAR n)
{
UCHAR i;
for(i=0;i<n;i++)
{
_nop_();
_nop_();
}
}
void Delay5s()
{
UCHAR tmp;
for(tmp=0;tmp<255;tmp++)
{
Delay(255);
}
for(tmp=0;tmp<255;tmp++)
{
Delay(255);
}
}
void Init_LCD(void)
{
Delay(3);
Write_Com(0x28); /*设置工作方式*/
Delay(3);
Write_Com(0x06); /*设置输入方式*/
Delay(3);
Write_Com(0x0d); /*设置显示方式*/
Delay(3);
Write_Com(0x01); /*清屏*/
Delay(3);
}
void LCDClr(void)
{
Write_Com(0x01); //0x01
Delay(3);
Write_Com(0x02); //0x02
}
void Write_Com(UCHAR Com)
{
UCHAR tmp;
LCD_RS = 0;
LCD_R_W = 1;
do
{
P0 = 0xf0 | P0; /*读BF,AC高四位*/
LCD_E = 1;
LCD_E = 1;
tmp = P0;
LCD_E = 0;
LCD_E = 0;
LCD_E = 1; /*读BF,AC低4位*/
LCD_E = 1;
LCD_E = 0;
LCD_E = 0;
}
while(tmp & 0x80);
LCD_R_W = 0;
P0 = (P0 & 0x0f) | (Com & 0xf0);
LCD_E = 1;
LCD_E = 1;
LCD_E = 0;
LCD_E = 0;
P0 = (P0 & 0x0f) | (Com << 4);
LCD_E = 1;
LCD_E = 1;
LCD_E = 0;
LCD_E = 0;
}
void Write_Addr(UCHAR Dis_Addr)
{
if((Dis_Addr >=0) && (Dis_Addr <16))
Write_Com((Dis_Addr ) | 0x80);
else if((Dis_Addr >=16) && (Dis_Addr <32))
Write_Com(((Dis_Addr-16) + 0x40) | 0x80 );
}
void Write_Data(UCHAR Ddata)
{
UCHAR tmp;
LCD_RS = 0;
LCD_R_W = 1;
do
{
P0 = 0xf0 | P0; /*读BF,AC高四位*/
LCD_E = 1;
LCD_E = 1;
tmp = P0;
LCD_E = 0;
LCD_E = 0;
LCD_E = 1; /*读BF,AC低4位*/
LCD_E = 1;
LCD_E = 0;
LCD_E = 0;
}
while(tmp & 0x80);
LCD_RS = 1;
LCD_R_W = 0;
P0 = (P0 & 0x0f) | (Ddata & 0xf0);
LCD_E = 1;
LCD_E = 1;
LCD_E = 0;
LCD_E = 0;
P0 = (P0 & 0x0f) | (Ddata << 4);
LCD_E = 1;
LCD_E = 1;
LCD_E = 0;
LCD_E = 0;
}
void LCDChar(UCHAR position,UCHAR asc)
{
Write_Addr(position);
Write_Data(asc);
}
void LCDString(UCHAR position,UCHAR *parrow,UCHAR num)
{
UCHAR tmp;
if(position<16)
{
Write_Addr(position);
for(tmp=0;tmp<num;tmp++)
{
Write_Data(parrow[tmp]);
}
}
if(position>=16)
{
Write_Addr(position);
for(tmp=0;tmp<num;tmp++)
{
Write_Data(parrow[tmp]);
}
}
}
UCHAR Kb_Scan(void)
{
UCHAR Sccode=0;
UCHAR Recode=0;
bit keyOn = 0;
P2 = 0x0f;/*发0x00行扫描码,列线输入*/
if(((P2&0x0f) != 0x0f)&& (keyOn == 0))/*若有键按下*/
{
Delay(200);/*延时去抖*/
if(((P2&0x0f) != 0x0f)&& (keyOn == 0))
{
Sccode = 0x7f;/*逐行扫描初值*/
while(((Sccode&0x08) !=0 ) && (keyOn == 0))/*扫描完毕*/
{
P2 = Sccode;/*输出行扫描码*/
if((P2&0x0f) !=0x0f )/*本行有键按下*/
{
keyOn = 1;
Recode = (P2&0x0f)|0xf0;/*|0xe1;*/ //modify 2nd,mar
Sccode = ~Sccode;
Recode = ~Recode;
}
else
Sccode = (Sccode>>1)|0x80;/*行扫描码右移*/
}
}
// goto END;
}
/* END:*/ keyOn = 0;
return(Sccode+Recode);/*返回特征字节码*/
}
void CommunicatePC(void) //communicate with PC
{
TOPC = 1;
Delay(255);
SerialInit();
Write_Display(dataGetProcess);
Delay5s();
if(SendAllToPC())
{
Write_Display(connectUnsuccess);
Delay5s();
}
else
{
Write_Display(overString);
Delay5s();
}
}
bit SendAllToPC(void) //发送EEPROM中的所有数据到PC
{
UINT EEPaddr;
UINT addTmp;
bit com_good;
UCHAR temp;
UCHAR TIMECALL=10;
Write_Display(communicateToPC);//"COMMUNICATING WITH PC.... ";
Delay5s();
do
{
if (TIMECALL==0)
{
com_good=1;
break;
}
Delay(200);
SBUF = MCUCALLPC;
while(TI == 0)
{
Write_Display(TRANSing);
}
TI = 0;
while(RI == 0)
{
Write_Display(RECIEVing);
}
RI = 0;
temp= SBUF;
TIMECALL--;
com_good=0;
}while(temp!= MCUCALLPC);//0x5b
if(com_good)
return com_good;
else
{
Write_Display(connectSuccess);
Delay5s();
Write_Display(dataGetProcess);
Delay5s();
for(EEPaddr = 0; EEPaddr < (8*EEPROMSIZE); ) //发送全部的数据
{
addTmp = EEPaddr;
AddressL= (UCHAR)(addTmp&0x00ff);
AddressH= (UCHAR)(addTmp>>8);
Read_I2c_Page(UIData,8);
addTmp = EEPaddr;
for(temp=0; temp<8; temp++) //发送已经读取的数据
{
SBUF = UIData[temp];
while(TI == 0);
TI = 0;
}
temp = (addTmp%10) + 0x30;
LCDChar(31,temp);
addTmp /= 10;
temp = (addTmp%10) + 0x30;
LCDChar(30,temp);
addTmp /= 10;
temp = (addTmp%10) + 0x30;
LCDChar(29,temp);
addTmp /= 10;
temp = (addTmp%10) + 0x30;
LCDChar(28,temp);
EEPaddr+=8;
}
SBUF = RECEIVEFILEOK; //发送结束标志
while(TI == 0);
TI = 0;
}
return com_good;
}
void SerialInit(void)
{
EA = 0;
SCON = 0x50;//RECIEVE DISABLE,MODE1,R/T
TR1 = 1;
RI = 0;
TI = 0;
}
void Read_I2c_Page(UCHAR * Tmp_Data,UCHAR num_array)
{
UCHAR num;
StartIic;
Write_8bit(Iic_Write);
Write_8bit(AddressH);
Write_8bit(AddressL);
StartIic;
Write_8bit(Iic_Read);
for(num=0;num<num_array-1;num++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -