📄 common.c
字号:
void RandomRead(UCHARIDATA Data[],UCHARIDATA Address,UCHARIDATA Num)
{
UCHARIDATA i;
UCHARIDATA *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(0xa0);
Ack();
Send(Address+i);
Ack();
Start();
Send(0xa1);
Ack();
*(PData+i)=Read();
mDelay(20);
Scl=0;
NoAck();
Stop();
}
mDelay(10);
}
//////////////////////Current Address Read//////////////////////////////////
void CurrentAddressRead(UCHARIDATA *pData)
{
UCHARIDATA *pTemp;
pTemp=pData;
Start();
Send(0xa1);
Ack();
*pTemp=Read();
mDelay(20);
Scl=0;
NoAck();
Stop();
}
void SequentialRead(UCHARIDATA Data[],UCHARIDATA Num)
{
UCHARIDATA i;
UCHARIDATA *PData;
PData=Data;
Start(); /*发送启动信号*/
Send(0xa1);
Ack();
for(i=0;i<Num-1;i++)
{
*(PData+i)=Read();
mDelay(20);
Scl=0;
Ack();
}
*(PData+Num-1)=Read();
mDelay(20);
Scl=0;
NoAck();
Stop();
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************AD_DA*******************/
void Delay(UINTDATA time)
{
while(time--);
}
/************************DA****************************/
void DATrans(UINT da)//TLC5615DA转换
{
UCHAR i;
CS_DA = 1;
_nop_();
SPI_CLK=0;
_nop_();
CS_DA = 0;
da<<=6;
for (i=12;i>0;i--)
{
SPI_CLK=0;
_nop_();
DA_DATAIN=(bit)(da&0x8000);
_nop_();
SPI_CLK=1;
da<<=1;
}
CS_DA=1;
SPI_CLK=0;
}
/******************************************************/
/************************AD****************************/
UCHAR ADTrans(void)//TLC549
{
UCHAR i;
UCHAR u;
CS_AD = 0;
Delay(5);
for(i=0;i<8;i++) //read data
{
SPI_CLK=0;
u=(u<<=1)|AD_DATAOUT;
SPI_CLK=1;
_nop_();
}
CS_AD=1;
Delay(20);
//u = SBUF;
return(u); //return ad data
}
/******************************************************/
/*********函数名称:ADCSelChannel********
*
*功能:转换指定通道的模拟量为数字量
*
*说明:
*
*位置:
*
****************************************/
unsigned char ADCSelChannel(void)
{
UCHARIDATA ConvertValue = 0;
UCHARIDATA i;
ADChipSelect = 1; //芯片复位
ADChipSelect = 0;
ADChipSelect = 1;
ADClock = 0;
Wait4us;
ADChipSelect = 0; //芯片起始
Wait4us; //等待延时
for (i = 0; i < 8; i ++) //输入采样转换时钟
{
ADClock = 1;
ADClock = 0;
}
ADChipSelect = 1; //开始转换
Wait10us; //等待转换结束
ADChipSelect = 0; //读取转换结果
Wait4us;
for (i = 0; i < 8; i ++) //
{
ADClock = 1;
//ConvertValue <<= 1;
////////
ACC = ConvertValue;
//////////
ADDataOut = 1;
Wait10us;
if (ADDataOut)
{
ConvertValue = ConvertValue|0x01;
}
else
{
ConvertValue = ConvertValue&0xfe;
}
ADClock = 0;
///
ConvertValue = ConvertValue<<1;
}
ADChipSelect = 1;
return (ConvertValue); //返回转换结果
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************LCD*******************/
void soft_nop()
{
;
}
void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
{
register int i;
for(i=0;i<711;i++)
{
;
}
}
void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
{
soft_10ms();
soft_10ms();
}
void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
{
sys10mscounter=delaytime;
while(sys10mscounter);
}
bit lcd_checkbusy()/*检查LCD 忙*/
{
register lcdstate;
dc=0; /*dc=1为数据,=0 为命令.*/
rw=1; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
soft_nop();
lcdstate=lcdbus;
cs=0;
return((bit)(lcdstate&0x80));
}
void lcd_wrcmd(unsigned char lcdcmd) /*写LCD命令*/
{
lcdusing1=1;
while(lcd_checkbusy());
lcdbus=lcdcmd;
dc=0; /*dc=1为数据,=0 为命令.*/
rw=0; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
soft_nop();
cs=0;
lcdbus=0xff;
lcdusing1=0;
}
void lcd_moveto(char position) /*移动光标到指定位.0-79*/
{
register cmd=0x80;
lcdcounter=position;
if (position > 59)
{
position += 0x18;
}
else
{
if (position > 39)
{
position -= 0x14;
}
else
{
if (position > 19)position += 0x2c;
}
}
cmd=cmd|position;
lcd_wrcmd(cmd);
}
void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
{
//char i;
lcdusing2=1;
while(lcd_checkbusy());
if(lcdcounter==20)
{
lcd_moveto(20);
while(lcd_checkbusy());
}
if(lcdcounter==40)
{
lcd_moveto(40);
while(lcd_checkbusy());
}
if(lcdcounter==60)
{
lcd_moveto(60);
while(lcd_checkbusy());
}
if(lcdcounter==80)
{
lcd_moveto(0);
while(lcd_checkbusy());
lcdcounter=0;
} /*为通用而如此*/
lcdcounter++;
lcdbus=lcddata;
dc=1; /*dc=1为数据,=0 为命令.*/
rw=0; /*rw=1为读,=0为写.*/
cs=1; /*cs=1选通.*/
soft_nop();
cs=0;
lcdbus=0xff;
lcdusing2=0;
}
void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
{
register i=0;
while(strpoint[i]!=0)
{
lcd_wrdata(strpoint[i]);
i++;
}
}
void lcd_init()/*初始化*/
{
lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
lcd_wrcmd(0x01); /*清除显示*/
lcdcounter=0;
}
void lcd_cls()/*清除显示*/
{
lcd_wrcmd(0x01);
lcdcounter=0;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************KBScan*******************/
void KBScan(void)
{
ucdKBScan_Acc = uccRemove[ucdIncrease];
ucdIncrease = ucdIncrease + 1;
if(ucdIncrease >= 3)
{
ucdIncrease = 0;
}
ucdKBScan_Acc = ucdKBScan_Acc|0x38;
P0 = P0&0xc0;
P0 = P0|ucdKBScan_Acc;
for(i = 0; i < 100; i++)
for(j = 0; j < 80; j++)
ucdReceiver = P0;
ucdReceiver = ucdReceiver&0x3f;
if(ucdReceiver == 0x36)
ucdKBScanResult = 0;
else if(ucdReceiver == 0x2e)
ucdKBScanResult = 1;
else if(ucdReceiver == 0x1e)
ucdKBScanResult = 2;
else if(ucdReceiver == 0x35)
ucdKBScanResult = 3;
else if(ucdReceiver == 0x2d)
ucdKBScanResult = 4;
else if(ucdReceiver == 0x1d)
ucdKBScanResult = 5;
else if(ucdReceiver == 0x33)
ucdKBScanResult = 6;
else if(ucdReceiver == 0x2b)
ucdKBScanResult = 7 ;
else if(ucdReceiver == 0x1b)
ucdKBScanResult = 8;
else
ucdKBScanResult = 30;
//return ucdKBScanResult;
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************S*******************/
void TreatLEDDisplayArrayForAD(UCHAR ucADValve)
{
if(ucADValve <= 23)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 0;
ucdLEDDisplayArray[3] = 0;
}
else if(ucADValve > 23 && ucADValve <= 46)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 0;
ucdLEDDisplayArray[3] = 5;
}
else if(ucADValve > 46 && ucADValve <= 69)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 1;
ucdLEDDisplayArray[3] = 0;
}
else if(ucADValve > 69 && ucADValve <= 92)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 1;
ucdLEDDisplayArray[3] = 5;
}
else if(ucADValve > 92 && ucADValve <= 115)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 2;
ucdLEDDisplayArray[3] = 0;
}
else if(ucADValve > 115 && ucADValve <= 138)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 2;
ucdLEDDisplayArray[3] = 5;
}
else if(ucADValve > 138 && ucADValve <= 161)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 3;
ucdLEDDisplayArray[3] = 0;
}
else if(ucADValve > 161 && ucADValve <= 184)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 3;
ucdLEDDisplayArray[3] = 5;
}
else if(ucADValve > 184 && ucADValve <= 207)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 4;
ucdLEDDisplayArray[3] = 0;
}
else if(ucADValve > 207 && ucADValve <= 230)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 4;
ucdLEDDisplayArray[3] = 5;
}
else //if(ucADValve > 230 && ucADValve <= 26)
{
ucdLEDDisplayArray[0] = 19;
ucdLEDDisplayArray[1] = 20;
ucdLEDDisplayArray[2] = 5;
ucdLEDDisplayArray[3] = 0;
}
}
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
/****************S*******************/
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -