|
/*版 本: 1.0 */
#include <STC12C54.H>
#include <intrins.h>
#include <absacc.h>
#include <math.h>
#define unchar unsigned char
#define unint unsigned int
/*****************關(guān)鍵值*********************/
//COM通信修改項(xiàng)
#define COM_ADDRES_G 0x00 //廣播通信地址16進(jìn)制
#define com_in_data0 0xBE // 接收開始位
#define com_in_close 0x0D // 接收結(jié)束位
//新舊屏修改項(xiàng)
//#define EN_on 1 //掃描開 //0 新舊屏相關(guān)
//電信舊屏為0
//熊屏為1
#define EN_off !EN_on //掃描 //1
//改屏字?jǐn)?shù)時(shí)修改項(xiàng)
#define PIN_ZI 5 //屏總字?jǐn)?shù) //4
#define RAM_SHU 32*(PIN_ZI/2) //緩沖數(shù)組大小int //32*(PIN_ZI/2)
#define H2_ZI 4 //第二行字中數(shù)字加入到第幾個(gè)字中間
#define ZHI_HH 17 //數(shù)據(jù)行數(shù) //4
#define COM_MAX 77 //com最大接收數(shù)
#define XIAN_id 13 //窗口號(hào)放在第幾行
/****************函數(shù)申明區(qū)************************************/
//sfr AUXR = 0x8e;
void IAP_XIE (unsigned char IAP_DATA,unsigned char ADDH,unsigned char ADDL);
unsigned char IAP_DU (unsigned char ADDH,unsigned char ADDL);
void IAP_CACHU (unsigned char ADDH,unsigned char ADDL);
void INSZ8(void);
void com_out(void);
unsigned char hextoasc(unsigned char ascc); //輸入hex碼值,輸出 ascii碼
unsigned char ASC_TO_HEX(unsigned char ascH,unsigned char ascL); //輸出hex碼值,輸入 ascii碼
void CHU_SHI(void);
/* ISP_IAP_寄存器 */
sfr ISP_DATA = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD = 0xe5;
sfr ISP_TRIG = 0xe6;
sfr ISP_CONTR = 0xe7;
//IO端口定義
sbit AA = P1^0;
sbit BB = P1^1;
sbit CC = P1^2;
sbit EN = P1^4; //34
sbit DD = P1^3;
sbit R1_DAT = P1^5; //33
sbit ST_RCK = P1^6; //1.6 C5
sbit CK_CLK = P1^7; //1.7
sbit LED = P3^5; // P3^5;
sbit K2_A = P3^2;
sbit K3_B = P3^4; //----------------------------
sbit IN_1 = P3^7;
//sbit RE = P3^5; //485發(fā)送控制
//sbit LED = P3^7;
//全局變量定義
unchar da_H; //顯示掃描行數(shù)
unsigned int xdata ZHUO_DA;
unchar zi; //左移字?jǐn)?shù)累加
unsigned int xdata DAT_RAM2[RAM_SHU]; //顯示掃描緩沖區(qū)
unsigned char com_i; //5/26
bit com_q;
unsigned char data COM_R[COM_MAX]; //接收數(shù)據(jù)緩存 //77
bit COM_OK; //寫入數(shù)據(jù)完成標(biāo)志位
bit Zhi_b; //寫入數(shù)據(jù)完成標(biāo)志位
unsigned char idata H_ZHI[16]; //每行字?jǐn)?shù)
unsigned char Zhi_h,chisu; //當(dāng)前顯示字區(qū)
unsigned char YI_F; //移動(dòng)方向選取
unsigned char idata COM_DATA[6],COM_ADDRES; // 4
unsigned int PAI; //排隊(duì)等候時(shí)間
unsigned char QIE; //切換時(shí)間
bit Zhi_ZHI; //字移完成標(biāo)志位
unsigned char Z_H ; //字?jǐn)?shù)最大行數(shù)
unsigned char Z_LMAX ; // Z_LMAX=PIN_ZI*2 //掃描字?jǐn)?shù)移位確認(rèn)
unsigned char SHU_1_14; //上移綬沖開始位
unsigned int time_s;
bit EN_on; // 輸出EN驅(qū)動(dòng)反向控制位
bit PIN_ADD_b; //屏地址更改標(biāo)志位
bit S1_b,S2_b,S3_b,in_b,hl_b; //按鍵狀態(tài)標(biāo)志位
unsigned char IN_HL; //輸入數(shù)據(jù)高電平/低電平有效
unsigned char IN_time;
//bit ddd; //叫號(hào)閃爍時(shí)間清零標(biāo)志
unsigned char xdata YI_DONG_SD[15] ; //移動(dòng)速度
unsigned char xdata YI_DONG_FX[15] ; //移動(dòng)方向選取
unsigned char xdata XIAN_SI_YS[15] ; //顯示延時(shí)
unsigned char xdata JIAO_HAO_1[15] ; //叫號(hào)1
unsigned char xdata JIAO_HAO_X[15] ; //叫號(hào)顯示與否標(biāo)志位
unsigned char xdata XIAN_SI_CS[15] ; //顯示次數(shù)
unsigned char xdata TING_LUI_SJ[15] ; //停留時(shí)間
unsigned char xdata JIAO_HAO_CS[15] ; //叫號(hào)閃動(dòng)次數(shù)
//unsigned int H1_wwww ; //第一行字中數(shù)字加入到第幾個(gè)字中間 //
unsigned char COM_EN;
//unsigned char time_d ;
//unsigned int xdata DAT_XIAN_ID[17]; //窗口號(hào)顯示掃描緩沖區(qū)
unsigned char code Dat_pin[]=
{//橫向取模左高位,數(shù)據(jù)排列:從左到右從上到下
0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6,0xD6, // -0-
0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x18,0x38,0x78,0x18,0x18,0x18, // -1-
0x18,0x18,0x18,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18,0x30, // -2-
0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C,0x06, // -3-
0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC,0xFE, // -4-
0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC,0x0E, // -5-
0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC,0xC6, // -6-
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C,0x18, // -7-
0x30,0x30,0x30,0x30,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C,0xC6, // -8-
0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,0x00,
0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E,0x06, // -9-
0x06,0x06,0x0C,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x38,0x6C,0xC6,0xC6,0xFE, // -A-
0xC6,0xC6,0xC6,0xC6,0x00,0x00,0x00,0x00,
0x00,0x00,0xFC,0x66,0x66,0x66,0x7C,0x66, // -B-
0x66,0x66,0x66,0xFC,0x00,0x00,0x00,0x00,
0x00,0x00,0x3C,0x66,0xC2,0xC0,0xC0,0xC0, // -C-
0xC0,0xC2,0x66,0x3C,0x00,0x00,0x00,0x00,
0x00,0x00,0xF8,0x6C,0x66,0x66,0x66,0x66, // -D-
0x66,0x66,0x6C,0xF8,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68, // -E-
0x60,0x62,0x66,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0xFE,0x66,0x62,0x68,0x78,0x68, // -F-
0x60,0x60,0x60,0xF0,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ---
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
/****************中斷處理程序區(qū)**************************************/
void extern0_ISR() interrupt 0 {}
void timer0_ISR () interrupt 1
{
unchar i,j,k; //12M 1.5MS中斷一次
unint da_k;
TL0 = 0x78;
TH0 = 0xfa;
TR0 = 0;
// EA = 0;
TF0 = 0; //time0中斷請(qǐng)求標(biāo)志位
if(da_H>15)
da_H=0;
j=da_H*PIN_ZI;
for (k=0;k<PIN_ZI;k++) //12
{
da_k=DAT_RAM2[j+k];
for (i=0;i<16;i++)
{
if(da_k&0x8000)
R1_DAT = 0;
else
R1_DAT = 1;
_nop_();
CK_CLK = 1;
_nop_();
CK_CLK = 0;
da_k<<=1;
}
}
EN =EN_off; //0
if(da_H>7)
{
DD=1;
}
else
{
DD=0;
}
if(da_H&0x01)
AA=1;
else
AA=0;
if(da_H&0x02)
BB=1;
else
BB=0;
if(da_H&0x04)
CC=1;
else
CC=0;
ST_RCK = 1;
EN =EN_on;
ST_RCK = 0;
R1_DAT = 0;
da_H++; //行加
TR0 = 1;
// EA = 1;
time_s++;
}
//通信中斷
void serial_ISR () interrupt 4
{
unsigned char i,SBUF_lcd;
if(RI==1)
{
SBUF_lcd = SBUF;
if(SBUF_lcd==com_in_close) //接收結(jié)束位
{
i=ASC_TO_HEX(COM_R[0],COM_R[1]);
if((i==COM_ADDRES_G)||(i==COM_ADDRES))
com_out(); //寫屏
for(i=0;i<com_i;i++)
COM_R[i]=0;
SBUF_lcd=0;
com_i=0;
com_q=0;
}
if(com_q)
{
COM_R[com_i]=SBUF_lcd;
if(com_i<COM_MAX)
com_i++;
}
if(SBUF_lcd==com_in_data0) //接收開始位
{
com_q=1;
com_i=0;
}
}
RI=0;
}
void timer2_ISR () interrupt 5{} /* not used */
unsigned char hextoasc(unsigned char ascc) //輸入hex碼值,輸出 ascii碼
{
if(ascc>47&&ascc<58)
return (ascc-48);
// if(ascc>64&&ascc<71)
if(ascc>64&&ascc<92)
return (ascc-55);
}
unsigned char ASC_TO_HEX(unsigned char ascH,unsigned char ascL) //輸出hex碼值,輸入 ascii碼
{
unsigned char da;
da=hextoasc(ascH);
da<<=4;
da|=hextoasc(ascL);
return da;
}
void shuzhu (unchar z,unchar h)
{
unsigned char i;
unsigned int b;
b=z*32;
if(z>H_ZHI[h])
H_ZHI[h]=z;
h++;
if(h>13)
h=13;
if(COM_EN)
{
for(i=0;i<32;i++)
{
if(b<256)
IAP_XIE (COM_R[i],h,b) ;
b++;
}
}
}
void chan_shu(unchar pp,unchar ma,unchar da)
{
unchar i;
if(COM_EN)
{
if(pp<6)
{
i=pp*20;
i+=ma;
IAP_XIE (da,0x0e,i) ;
}
else
{
pp-=6;
i=pp*20;
i+=ma;
IAP_XIE (da,0x0f,i) ;
}
}
}
//數(shù)據(jù)接收處理
void com_out(void )
{
unsigned char i,h,z,an,chao_zi,pp;
unsigned int com_k;
unsigned char com_x;
z=ASC_TO_HEX(COM_R[6],COM_R[7]);
h=ASC_TO_HEX(COM_R[4],COM_R[5]);
chao_zi=ASC_TO_HEX(COM_R[2],COM_R[3]);
if(chao_zi==0x04||chao_zi==0x05)
{
com_x=ASC_TO_HEX(COM_R[com_i-2],COM_R[com_i-1]);
com_k=0;
for(i=0;i<com_i-2;i++)
{
com_k+=ASC_TO_HEX(COM_R[i],COM_R[i+1]);
i++;
}
com_k%=0xff;
if(com_x!=com_k)
return ;
}
if(chao_zi==0x04) //操作碼清EEP //操作碼1寫屏
{
//if(h==0)
if(!h&&(com_i==10||com_i==12)) //=0
{
COM_EN=1;
EN =EN_off;
TR0 = 0;
ET0=0; //time0中斷允許控制位
for(i=0;i<13;i++) //5608eep為0x00--0x0F 共4K
{
IAP_CACHU (i,0); //清空EEP
i++;
}
for(i=0;i<ZHI_HH;i++)
H_ZHI[i]=0;
}
else // if(h==1) //
if(h==1&&(com_i==8||com_i==12))
{
for(i=0;i<ZHI_HH;i++)
{
IAP_XIE (H_ZHI[i],0x0d,210+i) ;
}
}
}
else if(chao_zi==0x01) //操作碼清EEP //操作碼1寫屏
{
if(com_i<60)
{
for(i=8;i<72;i++)
COM_R[i]= 0x00;
}
an=0 ;
for(i=8;i<72;i++)
{
COM_R[an]= ASC_TO_HEX(COM_R[i],COM_R[i+1]);
i++;
an++;
}
if(h>Z_H)
Z_H = h ; //字?jǐn)?shù)最大行數(shù)
shuzhu (z,h) ; //寫入數(shù)據(jù)
}
else if(chao_zi==0x05) //操作碼清EEP //操作碼1寫屏
{
if(!h&&com_i==12) //=0
{
EN =EN_off;
COM_EN=1;
TR0 = 0;
ET0=0; //time0中斷允許控制位
IAP_CACHU (0x0f,0); //清空EEP
PIN_ADD_b=1; //屏地址更改標(biāo)志位
}
else if(h==1&&com_i==12)
{
COM_OK=1; //寫入數(shù)據(jù)完成標(biāo)志位
COM_EN=0;
}
}
else if(chao_zi==0x03) //操作碼參數(shù)設(shè)置
{
// H1_wwww=0;
if(h==4&&PIN_ADD_b) //寫入屏地址 PIN_ADD_b=0; //屏地址更改標(biāo)志位
{
z=ASC_TO_HEX(COM_R[6],COM_R[7]);
IAP_XIE (z,0x0F,250) ;
COM_ADDRES= IAP_DU (0x0f,250);
PIN_ADD_b=0; //屏地址更改標(biāo)志位
}
else
if(COM_EN) //寫入屏地址
{
if(h==0x0d) //寫入屏地址
{
z=ASC_TO_HEX(COM_R[6],COM_R[7]);
IAP_XIE (z,0x0F,251) ;
}
else
{
pp=ASC_TO_HEX(COM_R[8],COM_R[9]);
chan_shu(pp,h,z) ;
}
}
}
INSZ8();
}
void IAP_FUWEI (void)
{
ISP_CONTR=0x00;
ISP_CMD=0x00;
ISP_TRIG=0x00;
ISP_ADDRH=0xff;
ISP_ADDRL=0xff;
//ISP_DATA=0xff;
}
/*讀*/
unsigned char IAP_DU (unsigned char ADDH,unsigned char ADDL)
{
ISP_ADDRH=ADDH;
ISP_ADDRL=ADDL;
ISP_CMD=0x01;
ISP_CONTR=0x84;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
IAP_FUWEI();
return ISP_DATA;
}
/*寫*/
void IAP_XIE (unsigned char IAP_DATA,unsigned char ADDH,unsigned char ADDL)
{
ISP_ADDRH=ADDH;
ISP_ADDRL=ADDL;
ISP_DATA=IAP_DATA;
ISP_CMD=0x02;
ISP_CONTR=0x84;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
IAP_FUWEI();
}
/*擦除*/
void IAP_CACHU (unsigned char ADDH,unsigned char ADDL)
{
ISP_ADDRH=ADDH;
ISP_ADDRL=ADDL;
ISP_CMD=0x03;
ISP_CONTR=0x84;
ISP_TRIG=0x46;
ISP_TRIG=0xB9;
IAP_FUWEI();
}
/*****************延遲DELAY******************** **/
void delay(unsigned int a) //1-50ms /24M
{
unsigned int i;
for(;a>0;a--)
for(i=0;i<9988;i++)
WDT_CONTR = 0x3C; //狗;;
}
void XIE_RAM2 (unchar zhi_ju,unchar DAT_R,unchar di,bit a)
{
unsigned char shuzhu,dat_i,i,ADDH,w;
unsigned int k,da_k;
di=0;
if(zi>=DAT_R)
{
Zhi_ZHI=1;
return ;
}
i=0;
ADDH = zhi_ju; //取扇區(qū)地址
for(dat_i=0;dat_i<16;dat_i++)
{
for(shuzhu=0;shuzhu<PIN_ZI;shuzhu++) // PIN_ZI
{
if(a)
{
if(shuzhu==di)
{
k=(COM_DATA[0]*16)+dat_i;
DAT_RAM2[i]=Dat_pin[k];
DAT_RAM2[i]<<=8;
k=(COM_DATA[1]*16)+dat_i;
DAT_RAM2[i]|=Dat_pin[k];
i++;
}
else if(shuzhu==di+1)
{
k=(COM_DATA[2]*16)+dat_i;
DAT_RAM2[i]=Dat_pin[k];
DAT_RAM2[i]<<=8;
k=(COM_DATA[3]*16)+dat_i;
DAT_RAM2[i]|=Dat_pin[k];
i++;
}
else if(shuzhu==di+2)
{
k=(COM_DATA[4]*16)+dat_i;
DAT_RAM2[i]=Dat_pin[k];
DAT_RAM2[i]<<=8;
k=(COM_DATA[5]*16)+dat_i;
DAT_RAM2[i]|=Dat_pin[k];
i++;
}
/*
else if(shuzhu==4)
{
DAT_RAM2[i]=0;
i++;
}
*/
else
goto xei_2;
}
else
{
xei_2:
da_k=shuzhu*32;
k= dat_i+dat_i+da_k; //
if(k<256)
{
DAT_RAM2[i]=IAP_DU (ADDH,k);
}
else
{
w=k-256;
DAT_RAM2[i]=IAP_DU (ADDH+1,w);
}
DAT_RAM2[i]<<=8;
k++;
if(k<256)
{
DAT_RAM2[i]|=IAP_DU (ADDH,k);
}
else
{
w=k-256;
DAT_RAM2[i]|=IAP_DU (ADDH+1,w);
}
i++; //字總數(shù)0-3 總計(jì)4個(gè)字
}
}
}
// zi+=4;
}
QING_RAM2()
{
unsigned char dat_i;
for(dat_i=0;dat_i<RAM_SHU;dat_i++)
DAT_RAM2[dat_i]=0;
// for(dat_i=0;dat_i<16;dat_i++)
// DAT_XIAN_ID[dat_i]=0;
}
//開啟顯示定時(shí)掃描
void dingsi(void)
{
TMOD |= 0x01;
TH0 = 0xF8;
TL0 = 0x2f;
ET0=1;
TR0=1;
EA=1;
PT0=1; //優(yōu)先級(jí)
}
//程序初始化
void CHU_SHI(void)
{
unsigned char i,z,an;
EN =EN_off; //關(guān)顯示屏
dingsi(); //開啟顯示掃描定時(shí)
QING_RAM2(); //清顯示緩沖區(qū)RAM2內(nèi)存
delay(10); //開機(jī)延遲
COM_OK=0; //寫入數(shù)據(jù)完成標(biāo)志位清零
Zhi_h=0; //當(dāng)前顯示字區(qū)默認(rèn)為0
Zhi_b=0; //調(diào)用顯示標(biāo)志位清零
COM_ADDRES=IAP_DU (0x0f,250); //本機(jī)地址
z= IAP_DU (0x0f,251);
// if(z)
EN_on=1; //顯示屏亮度--1-----------------------------------------------------------
// else
// EN_on=0;
for(i=0;i<14;i++)
{
if(i<6)
{
z=i*20;
an=0x0e;
}
else
{
z=(i-6)*20;
an=0x0f;
}
}
Z_LMAX=PIN_ZI*2;
SHU_1_14=RAM_SHU-PIN_ZI;
}
void chunchu_A( sw,sb,sg,add1)
{
IAP_CACHU (add1,0); //清空EEP 3扇區(qū)
IAP_XIE (sw,add1,200) ;
IAP_XIE (sb,add1,201) ;
IAP_XIE (sg,add1,202) ;
}
unsigned char jp(unsigned char an)
{
unsigned char i;
switch(an)
{
case 2: //K2_A組
WDT_CONTR = 0x3C; //狗;;
if(S2_b==0) //K2_A
{
EXIT1 :
if(K2_A==0)
{
for(i=0;i<100;i++) ;
if(K2_A!=0)
goto EXIT1;
S2_b=1;
return 1;
}
}
else
{
if(K2_A==1)
{
S2_b=0;
return 0;
}
}
break;
case 3: //K3_B組
if(S3_b==0)
{
EXIT2 :
if(K3_B==0)
{
for(i=0;i<100;i++) ;
if(K3_B!=0)
goto EXIT2;
S3_b=1;
return 1;
}
}
else
{
if(K3_B==1)
{
S3_b=0;
return 0;
}
}
break;
}
}
unsigned char jp5S(unsigned char an)
{
unsigned char n;
unsigned int i;
switch(an)
{
case 2: //K2_A組 按紐2清除A/B組數(shù)據(jù)
WDT_CONTR = 0x3C; //狗;;
if(S2_b==0) //K2_A 按紐2清除A/B組數(shù)據(jù)
{
EXIT21 :
if(K2_A==0)
{
for(n=0;n<5;n++)
{
for(i=0;i<6000;i++) ;
delay(36); //延遲
// WDT_CONTR = 0x3C; //狗;;
if(K2_A!=0)
goto EXIT21;
for(i=0;i<6000;i++) ;
delay(36); //延遲
if(K2_A!=0)
goto EXIT21;
for(i=0;i<6000;i++) ;
delay(36); //延遲
if(K2_A!=0)
goto EXIT21;
}
for(i=0;i<100;i++) ;
if(K2_A!=0)
goto EXIT21;
S2_b=1;
return 1;
}
}
else
{
if(K2_A==1)
{
S2_b=0;
return 0;
}
}
break;
case 3: //K3_B組
if(S3_b==0)
{
EXIT32 :
if(K3_B==0)
{
for(n=0;n<5;n++)
{
for(i=0;i<6000;i++) ;
delay(36); //延遲
if(K3_B!=0)
goto EXIT32;
for(i=0;i<6000;i++) ;
delay(36); //延遲
if(K3_B!=0)
goto EXIT32;
for(i=0;i<6000;i++) ;
delay(36); //延遲
if(K3_B!=0)
goto EXIT32;
}
S3_b=1;
return 1;
}
}
else
{
if(K3_B==1)
{
S3_b=0;
return 0;
}
}
break;
}
}
void set_IN_HL(void)
{
unsigned char i,w,bei;
w= IAP_DU (0x0A,204);
bei=w;
if(w>0)
w=1;
COM_DATA[0] =12;
COM_DATA[1] =0;
COM_DATA[2] =0;
COM_DATA[3] =0;
COM_DATA[5] =0;
COM_DATA[4] =w; //最后一位
XIE_RAM2(1,16,0,1); //顯示當(dāng)前A值
for(i=0;i<50;i++)
{
if(jp(3)==1)
{
w=!w;
COM_DATA[0] =12;
COM_DATA[1] =0;
COM_DATA[2] =0;
COM_DATA[3] =0;
COM_DATA[5] =0;
COM_DATA[4] =w; //最后一位
XIE_RAM2(1,16,0,1); //顯示當(dāng)前A值
}
delay(20) ;
}
delay(200) ;
if(bei!=w)
{
QING_RAM2(); //清顯示緩沖區(qū)RAM2內(nèi)存
delay(10) ;
IAP_CACHU (0x0A,0); //清空EEP 3扇區(qū)
IAP_XIE (w,0x0A,204) ;
}
}
void set_IN_time(void)
{
unsigned char i,w,bei;
w= IAP_DU (0x0c,204);
bei=w;
// if(w>0)
// w=1;
COM_DATA[0] =13;
COM_DATA[1] =0;
COM_DATA[2] =0;
COM_DATA[3] =0;
COM_DATA[5] =0;
COM_DATA[4] =w; //最后一位
XIE_RAM2(1,16,0,1); //顯示當(dāng)前A值
for(i=0;i<100;i++)
{
if(jp(3)==1)
{
w++;
COM_DATA[0] =13;
COM_DATA[1] =0;
COM_DATA[2] =0;
COM_DATA[3] =0;
COM_DATA[5] =0;
COM_DATA[4] =w; //最后一位
XIE_RAM2(1,16,0,1); //顯示當(dāng)前A值
}
else if(jp(2)==1)
{
w--;
COM_DATA[0] =13;
COM_DATA[1] =0;
COM_DATA[2] =0;
COM_DATA[3] =0;
COM_DATA[5] =0;
COM_DATA[4] =w; //最后一位
XIE_RAM2(1,16,0,1); //顯示當(dāng)前A值
}
delay(20) ;
}
delay(200) ;
QING_RAM2(); //清顯示緩沖區(qū)RAM2內(nèi)存
delay(10) ;
IAP_CACHU (0x0c,0); //清空EEP 3扇區(qū)
IAP_XIE (w,0x0c,204) ;
}
unsigned char IN_j(void)
{
unsigned int i;
if(in_b==0)
{
EXIT3 :
WDT_CONTR = 0x3C; //狗;;
if(IN_1==hl_b)
{
for(i=0;i<6000;i++) ;
delay(IN_time); //延遲
if(IN_1!=hl_b)
goto EXIT3;
if(IN_1==hl_b)
for(i=0;i<6000;i++) ;
delay(IN_time); //開機(jī)延遲
if(IN_1!=hl_b)
goto EXIT3;
in_b=1;
return 1;
}
}
else
{
if(IN_1!=hl_b)
{
in_b=0;
return 0;
}
}
}
void xianshi(unchar a0,unchar a1,unchar a2,unchar a3,unchar a4 )
{
COM_DATA[1]=a0 ;
COM_DATA[2]=a1 ;
COM_DATA[3]=a2 ;
COM_DATA[4]=a3;
COM_DATA[5]=a4 ;
COM_DATA[0]=16 ;
XIE_RAM2(Zhi_h+1,H_ZHI[Zhi_h],JIAO_HAO_1[Zhi_h],JIAO_HAO_1[Zhi_h]);
// XIE_RAM2(1,16,0,1); //顯示當(dāng)前A值
}
/********************8位接收設(shè)置**********************/
void INSZ8(void)
{
SCON = 0x50; // 晶振18.432M
PCON |=0x80;
TMOD |= 0X20;
TMOD &= 0XEF;
TH1 = 0XF6; //9600 晶振18.432M
TL1 = 0xf6;
TR1=1;
IE |= 0x90;
// RE = 0;
}
//
/*****************主程序區(qū)****************************/
void main(void)
{
unsigned char idata i,ab_ch;
unsigned int idata time_f;
unsigned char idata ucdata_B[3];
bit A_B,time_bit,ab_b;
delay(1); //開機(jī)延遲
dingsi(); //開啟顯示掃描定時(shí)
zi=0;
Zhi_ZHI=0;
time_s=0;
da_H=0;//行掃開始值
CHU_SHI(); //初始化
INSZ8(); //開啟串口接收 18.432M-19200---------------
if(jp5S(3)==1)
set_IN_HL() ; // 輸入端高低電平有效位設(shè)置
if(jp5S(2)==1)
set_IN_time() ;
time_bit=0 ; //是否有數(shù)據(jù)需要保存標(biāo)志位
A_B=0; //顯示A/B組標(biāo)志位
IN_HL= IAP_DU (0x0A,204); //讀出輸入端高低電平為有效位
IN_time= IAP_DU (0x0c,204);
if(IN_time>200)
{
IN_time=5;
IAP_CACHU (0x0c,0); //清空EEP 3扇區(qū)
IAP_XIE (IN_time,0x0c,204) ;
}
if(IN_HL>0)
hl_b=0;
else
hl_b=1;
in_b=1; //防止誤動(dòng)作
xianshi(10,11,16,16,16 ) ; //B
delay(100) ;
i=IAP_DU (0x04,200);
if(i>99)
ucdata_B[0]=0;
else
ucdata_B[0]= i ;
i=IAP_DU (0x04,201);
if(i>99)
ucdata_B[1]=0;
else
ucdata_B[1]= i ;
i=IAP_DU (0x04,202);
if(i>99)
ucdata_B[2]=0;
else
ucdata_B[2]= i ;
xianshi(ucdata_B[2]%10,ucdata_B[1]/10,ucdata_B[1]%10,ucdata_B[0]/10,ucdata_B[0]%10 ) ; ////顯示當(dāng)前值B
/*
delay(200) ;
xianshi(10,16,16,16,16 ) ; //A
delay(200) ;
i=IAP_DU (0x03,200);
if(i>99)
ucdata[0]=0;
else
ucdata[0]= i ;
i=IAP_DU (0x03,201);
if(i>99)
ucdata[1]=0;
else
ucdata[1]= i ;
i=IAP_DU (0x03,202);
if(i>99)
ucdata[2]=0;
else
ucdata[2]= i ;
*/
// xianshi(ucdata[2]%10,ucdata[1]/10,ucdata[1]%10,ucdata[0]/10,ucdata[0]%10 ) ; //顯示當(dāng)前A值
while(1)
{
open:
WDT_CONTR = 0x3C; //狗;
delay(1) ;
i=1;
for(i=0;i<3;i++);
if(IN_j()==1) //有數(shù)據(jù)輸入
{
if(ucdata_B[0]>=99)
{
ucdata_B[0]=0;
if(ucdata_B[1]>=99)
{
ucdata_B[1]=0;
if(ucdata_B[2]>=99)
ucdata_B[2]=0;
else
ucdata_B[2]++;
}
else
ucdata_B[1]++;
}
else
ucdata_B[0]++;
xianshi(ucdata_B[2]%10,ucdata_B[1]/10,ucdata_B[1]%10,ucdata_B[0]/10,ucdata_B[0]%10 ) ; ////顯示當(dāng)前值B
time_f=0;
time_s=0;
time_bit=1;
ab_b=0;
}
if(time_s>60000&&time_bit)
{
time_f++;
time_s=0;
if(time_f>5) //
{
time_bit=0;
time_f=0;
chunchu_A(ucdata_B[0],ucdata_B[1],ucdata_B[2],0x04);
}
}
if(jp5S(3)==1)//按紐3顯示B組數(shù)據(jù)
{
xianshi(11,ucdata_B[1]/10,ucdata_B[1]%10,ucdata_B[0]/10,ucdata_B[0]%10 ) ; ////顯示當(dāng)前值B
ab_b=1;
ab_ch=0;
}
else
{
if(ab_b)
{
ab_ch++;
if(ab_ch>100)
{
chunchu_A(ucdata_B[0],ucdata_B[1],ucdata_B[2],0x04);
xianshi(ucdata_B[2]%10,ucdata_B[1]/10,ucdata_B[1]%10,ucdata_B[0]/10,ucdata_B[0]%10 ) ; ////顯示當(dāng)前值B
ab_b=0;
}
}
}
if(jp5S(2)==1)//按紐2清除A/B組數(shù)據(jù)
{
ucdata_B[0]=0;
ucdata_B[1]=0;
ucdata_B[2]=0;
QING_RAM2(); //清顯示緩沖區(qū)RAM2內(nèi)存
delay(10) ;
chunchu_A(ucdata_B[0],ucdata_B[1],ucdata_B[2],0x04);
xianshi(ucdata_B[2]%10,ucdata_B[1]/10,ucdata_B[1]%10,ucdata_B[0]/10,ucdata_B[0]%10 ) ; ////顯示當(dāng)前值B
}
goto open;
}
}
/*
程序完成時(shí)間:
*/
|
|