久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6492|回復: 34
收起左側

16x64點陣顯示問題

[復制鏈接]
ID:68643 發表于 2014-11-11 14:46 | 顯示全部樓層 |閱讀模式
近期得到一塊16x64的LED屏幕板子,板子上的集成電路有,8塊74hc595、一塊74hc245,一塊74hc123,一塊74hc367、2塊hc74138.參考網上的接口定義和驅動,能夠點亮,但出現一下問題:只送一個字的數據時,第一個字顯示正常,第二個子從第二行開始顯示,第16行在第一行顯示,第三個子從第三行顯示,第16和15行在第1和第二行顯示,第四個子從第四行顯示,第16、15和14行在第1、第2和第3行顯示,,同時送4個字的數據時,中間會有幾行不亮。試了好幾個程序都是這樣,不知問題出在程序還是板子,本人純屬愛好,望高手幫忙。
IMG_20141111_135302.jpg
回復

使用道具 舉報

ID:68672 發表于 2014-11-11 16:22 | 顯示全部樓層
板子沒什么問題,是你程序的問題,好好查一下,

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:68672 發表于 2014-11-11 16:23 | 顯示全部樓層
你一次將4個字的數據發完再鎖存就OK了
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 16:43 | 顯示全部樓層
xing1234 發表于 2014-11-11 16:23
你一次將4個字的數據發完再鎖存就OK了

一次將4個字的數據發完,就會有幾行不亮,字顯示不全。
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 16:46 | 顯示全部樓層
把程序附上
#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int
#define hang P1 //行掃描接在P1口


sbit g1=P0^0;  //使能端OE
sbit ds=P0^1;  //紅色數據
sbit clk=P0^3;  //時鐘信號
sbit stcp=P0^2; //鎖存信號




sbit mr=P0^4;  //

uint counter;
uchar flag;
uchar code display[ ]={
/*-- 文字: 好 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,
0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,

/*-- 文字: 好 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,
0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,

/*-- 文字: 學 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x01,0x08,0x10,0x8C,0x0C,0xC8,0x08,0x90,0x7F,0xFE,0x40,0x04,0x8F,0xE8,0x00,0x40,
0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x02,0x80,0x01,0x00,

/*-- 文字: 習 --*/
/*-- 宋體12; 此字體下對應的點陣為:寬x高=16x16 --*/
0x00,0x00,0x3F,0xFC,0x00,0x04,0x08,0x04,0x04,0x04,0x03,0x04,0x01,0x14,0x00,0x64,
0x01,0x84,0x06,0x04,0x38,0x04,0x10,0x04,0x00,0x04,0x00,0x24,0x00,0x14,0x00,0x00,

/*--  文字:  天  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x3F,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x7F,0xFE,0x00,0x80,
0x00,0x80,0x01,0x40,0x02,0x40,0x04,0x20,0x18,0x10,0x70,0x08,0x20,0x04,0x00,0x02,

/*--  文字:  天  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x3F,0xFC,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x7F,0xFE,0x00,0x80,
0x00,0x80,0x01,0x40,0x02,0x40,0x04,0x20,0x18,0x10,0x70,0x08,0x20,0x04,0x00,0x02,

/*--  文字:  向  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x40,0x00,0x20,0x3F,0xFC,0x20,0x04,0x20,0x04,0x27,0xE4,0x24,0x24,0x24,0x24,
0x24,0x24,0x24,0x24,0x27,0xE4,0x24,0x24,0x20,0x04,0x28,0x04,0x10,0x04,0x00,0x00,

/*--  文字:  上  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x1F,0x80,0x00,0x80,
0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x20,0x80,0x7F,0xFE,0x00,0x00,


};



void write_595(uchar shuju) //向595寫一個字節的數據
{
uchar i;
for(i=0;i<8;i++)
{
ds=(~shuju)&0x01;
clk=1;
clk=0;
shuju=shuju>>1;
}
}

void delay_ms(uchar x)  //x=50演延時10ms
{
        uchar a,b;
        for(a=x;a>0;a--)
         for(b=200;b>0;b--);
}

void main() //主函數
{

  
while(1)
{
uchar i,j;


for(i=100;i>0;i--)        //顯示時間

for(j=0;j<17;j++)
{


  
  
write_595(display[j*2+4*32+1]);
write_595(display[j*2+4*32]);
  



write_595(display[j*2+5*32+1]);
write_595(display[j*2+5*32]);
  
  



  
write_595(display[j*2+6*32+1]);
write_595(display[j*2+6*32]);





write_595(display[j*2+7*32+1]);
write_595(display[j*2+7*32]);

g1=0; //154使能


stcp=1;
stcp=0;

hang=j;
     

   
}
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 16:47 | 顯示全部樓層
for(j=0;j<17;j++)應為for(j=0;j<16;j++)
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 16:48 | 顯示全部樓層
用這個程序驅動,顯示不全
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 16:49 | 顯示全部樓層
想弄好16x64,在弄32x64這個大板
回復

使用道具 舉報

ID:68672 發表于 2014-11-11 17:28 | 顯示全部樓層
for (k=0;k<lieshu;k++)    //12           lieshu
            {
                da_k=j_ram_Hang[da_H].j_ram_Lie[k] ;
                for (i=0;i<16;i++)
                {
                    R1_DAT=!(da_k&0x8000);
                    CK_CLK = 1;
                    _nop_();
                    CK_CLK = 0;
                    da_k<<=1;
                        }
            }
回復

使用道具 舉報

ID:68672 發表于 2014-11-11 17:32 | 顯示全部樓層
以前的程序,很多是對你沒用的,取了一段
回復

使用道具 舉報

ID:68672 發表于 2014-11-11 17:35 | 顯示全部樓層
xdata struct j_RAM                  //        顯示緩存
{
    U16  j_ram_Lie[PIN_ZI];        //開顯示緩沖區
}j_ram_Hang[16];
回復

使用道具 舉報

ID:68672 發表于 2014-11-11 17:37 | 顯示全部樓層
要看你用的什么型號的片子,可以考慮用定時器中斷掃描
回復

使用道具 舉報

ID:68672 發表于 2014-11-11 17:40 | 顯示全部樓層
先開一段RAM做顯示緩存,一行一行的掃,一行數據全部發完再鎖存,
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 20:29 | 顯示全部樓層
這是發送四個字的顯示
IMG_20141111_165529.jpg
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 20:30 | 顯示全部樓層
顯示不全,就是不知道原因
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 20:49 | 顯示全部樓層
就是不明白為什么有幾行會不亮?
用了幾個程序都是這樣
回復

使用道具 舉報

ID:68643 發表于 2014-11-11 21:37 | 顯示全部樓層
板子背面
IMG_20141111_165544.jpg
回復

使用道具 舉報

ID:68672 發表于 2014-11-12 11:32 | 顯示全部樓層
你第一張圖已經說是板子是好的,程序問題
回復

使用道具 舉報

ID:68672 發表于 2014-11-12 11:35 | 顯示全部樓層
你這個板子是老板子了,如是你能顯示圖1的話,說明你的驅動應當是OK的,我沒細看你和程序
回復

使用道具 舉報

ID:68672 發表于 2014-11-12 11:43 | 顯示全部樓層
如果需要,我幾年前有個LED計算器的程序可以傳上來,你看看
回復

使用道具 舉報

ID:68672 發表于 2014-11-12 17:58 | 顯示全部樓層
   
/*版 本:   1.0       */

#include <STC12C54.H>
#include <intrins.h>
#include <absacc.h>
#include <math.h>

#define   unchar   unsigned char
#define   unint    unsigned int

/*****************關鍵值*********************/

//COM通信修改項
#define  COM_ADDRES_G   0x00         //廣播通信地址16進制
#define  com_in_data0  0xBE         // 接收開始位
#define  com_in_close  0x0D         // 接收結束位

//新舊屏修改項
//#define  EN_on              1         //掃描開       //0    新舊屏相關
//電信舊屏為0
//熊屏為1


#define  EN_off             !EN_on         //掃描        //1

//改屏字數時修改項
#define  PIN_ZI         5          //屏總字數        //4


#define  RAM_SHU        32*(PIN_ZI/2)         //緩沖數組大小int       //32*(PIN_ZI/2)


#define  H2_ZI          4          //第二行字中數字加入到第幾個字中間

#define  ZHI_HH        17          //數據行數       //4
#define  COM_MAX       77           //com最大接收數
#define  XIAN_id       13           //窗口號放在第幾行

/****************函數申明區************************************/
//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發送控制
//sbit          LED        = P3^7;

//全局變量定義
unchar  da_H;                   //顯示掃描行數
unsigned int xdata ZHUO_DA;
unchar  zi;                     //左移字數累加
unsigned int xdata DAT_RAM2[RAM_SHU];  //顯示掃描緩沖區
unsigned char com_i;                   //5/26
bit           com_q;

unsigned char data COM_R[COM_MAX];         //接收數據緩存    //77
bit           COM_OK;                  //寫入數據完成標志位
bit           Zhi_b;                   //寫入數據完成標志位

unsigned char idata H_ZHI[16];                //每行字數
unsigned char Zhi_h,chisu;                   //當前顯示字區
unsigned char YI_F;                    //移動方向選取
unsigned char idata  COM_DATA[6],COM_ADDRES;  //  4
unsigned int   PAI;                      //排隊等候時間
unsigned char QIE;                     //切換時間

bit           Zhi_ZHI;                   //字移完成標志位
unsigned char   Z_H    ;    //字數最大行數
unsigned char   Z_LMAX    ; // Z_LMAX=PIN_ZI*2    //掃描字數移位確認
unsigned char   SHU_1_14;    //上移綬沖開始位

unsigned int      time_s;
bit           EN_on;      //  輸出EN驅動反向控制位

bit           PIN_ADD_b;      //屏地址更改標志位

bit           S1_b,S2_b,S3_b,in_b,hl_b;      //按鍵狀態標志位
unsigned char   IN_HL;    //輸入數據高電平/低電平有效
unsigned char   IN_time;

//bit             ddd;         //叫號閃爍時間清零標志

unsigned char xdata  YI_DONG_SD[15] ;    //移動速度
unsigned char xdata  YI_DONG_FX[15] ;    //移動方向選取
unsigned char xdata  XIAN_SI_YS[15] ;    //顯示延時
unsigned char xdata  JIAO_HAO_1[15] ;    //叫號1
unsigned char xdata  JIAO_HAO_X[15] ;    //叫號顯示與否標志位
unsigned char xdata  XIAN_SI_CS[15] ;    //顯示次數
unsigned char xdata  TING_LUI_SJ[15] ;    //停留時間
unsigned char xdata  JIAO_HAO_CS[15] ;    //叫號閃動次數

//unsigned int H1_wwww ;                   //第一行字中數字加入到第幾個字中間  //

unsigned char   COM_EN;
//unsigned char       time_d ;
//unsigned int xdata DAT_XIAN_ID[17];  //窗口號顯示掃描緩沖區


unsigned char code Dat_pin[]=
{//橫向取模左高位,數據排列:從左到右從上到下
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,

};

/****************中斷處理程序區**************************************/
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中斷請求標志位

        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)      //接收結束位
        {
            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) ;
     }
     }
}
//數據接收處理
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   ;    //字數最大行數

      shuzhu (z,h) ;   //寫入數據
   }
   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;      //屏地址更改標志位
      }
      else     if(h==1&&com_i==12)
      {
         COM_OK=1;   //寫入數據完成標志位
         COM_EN=0;
      }
   }
   else   if(chao_zi==0x03)     //操作碼參數設置
   {

   //      H1_wwww=0;
        if(h==4&&PIN_ADD_b)    //寫入屏地址          PIN_ADD_b=0;      //屏地址更改標志位
        {

         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;      //屏地址更改標志位
        }
        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;                  //取扇區地址
    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++;                     //字總數0-3 總計4個字
                }
        }
    }
  //  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;
}


//開啟顯示定時掃描
void dingsi(void)
{
        TMOD |= 0x01;
        TH0 = 0xF8;
        TL0 = 0x2f;
        ET0=1;
        TR0=1;
        EA=1;
        PT0=1;      //優先級
}


//程序初始化
void CHU_SHI(void)
{
    unsigned char i,z,an;

    EN    =EN_off;         //關顯示屏
    dingsi();       //開啟顯示掃描定時
    QING_RAM2();      //清顯示緩沖區RAM2內存
    delay(10);         //開機延遲
    COM_OK=0;         //寫入數據完成標志位清零
    Zhi_h=0;          //當前顯示字區默認為0
    Zhi_b=0;          //調用顯示標志位清零

    COM_ADDRES=IAP_DU (0x0f,250);     //本機地址
    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扇區

     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組數據


        WDT_CONTR = 0x3C;      //狗;;
        if(S2_b==0)        //K2_A        按紐2清除A/B組數據
        {
  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);    //顯示當前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);    //顯示當前A值
    }
        delay(20)   ;
    }
    delay(200)   ;
    if(bei!=w)
    {
        QING_RAM2();      //清顯示緩沖區RAM2內存
        delay(10)   ;
        IAP_CACHU (0x0A,0);         //清空EEP   3扇區
        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);    //顯示當前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);    //顯示當前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);    //顯示當前A值
        }


        delay(20)   ;
    }
    delay(200)   ;

        QING_RAM2();      //清顯示緩沖區RAM2內存
        delay(10)   ;
        IAP_CACHU (0x0c,0);         //清空EEP   3扇區
        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);         //開機延遲
                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);    //顯示當前A值
}

/********************8位接收設置**********************/
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;

}
//
/*****************主程序區****************************/
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);         //開機延遲
          dingsi();       //開啟顯示掃描定時

        zi=0;
        Zhi_ZHI=0;
        time_s=0;
        da_H=0;//行掃開始值
        CHU_SHI();      //初始化

        INSZ8();        //開啟串口接收    18.432M-19200---------------

        if(jp5S(3)==1)
        set_IN_HL() ;    //  輸入端高低電平有效位設置
        if(jp5S(2)==1)
        set_IN_time()   ;

        time_bit=0 ;                 //是否有數據需要保存標志位
        A_B=0;                      //顯示A/B組標志位
        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扇區
        IAP_XIE (IN_time,0x0c,204) ;

        }
        if(IN_HL>0)
        hl_b=0;
        else
        hl_b=1;



        in_b=1;    //防止誤動作



        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 ) ;   ////顯示當前值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 ) ;   //顯示當前A值

    while(1)
    {
open:

        WDT_CONTR = 0x3C;          //狗;

        delay(1)   ;
        i=1;
        for(i=0;i<3;i++);
        if(IN_j()==1)   //有數據輸入
        {
             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 ) ;   ////顯示當前值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組數據
        {
            xianshi(11,ucdata_B[1]/10,ucdata_B[1]%10,ucdata_B[0]/10,ucdata_B[0]%10 ) ;   ////顯示當前值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 ) ;   ////顯示當前值B
                 ab_b=0;
                 }
             }
        }
        if(jp5S(2)==1)//按紐2清除A/B組數據
        {
                ucdata_B[0]=0;
                ucdata_B[1]=0;
                ucdata_B[2]=0;
                QING_RAM2();      //清顯示緩沖區RAM2內存
                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 ) ;   ////顯示當前值B
        }
        goto open;
    }
}
/*
程序完成時間:
*/
回復

使用道具 舉報

ID:68672 發表于 2014-11-12 18:02 | 顯示全部樓層

/*版 本:   1.0       */

#include <STC12C54.H>
#include <intrins.h>
#include <absacc.h>
#include <math.h>

#define   unchar   unsigned char
#define   unint    unsigned int

/*****************關鍵值*********************/

//COM通信修改項
#define  COM_ADDRES_G   0x00         //廣播通信地址16進制
#define  com_in_data0  0xBE         // 接收開始位
#define  com_in_close  0x0D         // 接收結束位

//新舊屏修改項
//#define  EN_on              1         //掃描開       //0    新舊屏相關
//電信舊屏為0
//熊屏為1


#define  EN_off             !EN_on         //掃描        //1

//改屏字數時修改項
#define  PIN_ZI         5          //屏總字數        //4


#define  RAM_SHU        32*(PIN_ZI/2)         //緩沖數組大小int       //32*(PIN_ZI/2)


#define  H2_ZI          4          //第二行字中數字加入到第幾個字中間

#define  ZHI_HH        17          //數據行數       //4
#define  COM_MAX       77           //com最大接收數
#define  XIAN_id       13           //窗口號放在第幾行

/****************函數申明區************************************/
//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發送控制
//sbit          LED        = P3^7;

//全局變量定義
unchar  da_H;                   //顯示掃描行數
unsigned int xdata ZHUO_DA;
unchar  zi;                     //左移字數累加
unsigned int xdata DAT_RAM2[RAM_SHU];  //顯示掃描緩沖區
unsigned char com_i;                   //5/26
bit           com_q;

unsigned char data COM_R[COM_MAX];         //接收數據緩存    //77
bit           COM_OK;                  //寫入數據完成標志位
bit           Zhi_b;                   //寫入數據完成標志位

unsigned char idata H_ZHI[16];                //每行字數
unsigned char Zhi_h,chisu;                   //當前顯示字區
unsigned char YI_F;                    //移動方向選取
unsigned char idata  COM_DATA[6],COM_ADDRES;  //  4
unsigned int   PAI;                      //排隊等候時間
unsigned char QIE;                     //切換時間

bit           Zhi_ZHI;                   //字移完成標志位
unsigned char   Z_H    ;    //字數最大行數
unsigned char   Z_LMAX    ; // Z_LMAX=PIN_ZI*2    //掃描字數移位確認
unsigned char   SHU_1_14;    //上移綬沖開始位

unsigned int      time_s;
bit           EN_on;      //  輸出EN驅動反向控制位

bit           PIN_ADD_b;      //屏地址更改標志位

bit           S1_b,S2_b,S3_b,in_b,hl_b;      //按鍵狀態標志位
unsigned char   IN_HL;    //輸入數據高電平/低電平有效
unsigned char   IN_time;

//bit             ddd;         //叫號閃爍時間清零標志

unsigned char xdata  YI_DONG_SD[15] ;    //移動速度
unsigned char xdata  YI_DONG_FX[15] ;    //移動方向選取
unsigned char xdata  XIAN_SI_YS[15] ;    //顯示延時
unsigned char xdata  JIAO_HAO_1[15] ;    //叫號1
unsigned char xdata  JIAO_HAO_X[15] ;    //叫號顯示與否標志位
unsigned char xdata  XIAN_SI_CS[15] ;    //顯示次數
unsigned char xdata  TING_LUI_SJ[15] ;    //停留時間
unsigned char xdata  JIAO_HAO_CS[15] ;    //叫號閃動次數

//unsigned int H1_wwww ;                   //第一行字中數字加入到第幾個字中間  //

unsigned char   COM_EN;
//unsigned char       time_d ;
//unsigned int xdata DAT_XIAN_ID[17];  //窗口號顯示掃描緩沖區


unsigned char code Dat_pin[]=
{//橫向取模左高位,數據排列:從左到右從上到下
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,

};

/****************中斷處理程序區**************************************/
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中斷請求標志位

        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)      //接收結束位
        {
            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) ;
     }
     }
}
//數據接收處理
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   ;    //字數最大行數

      shuzhu (z,h) ;   //寫入數據
   }
   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;      //屏地址更改標志位
      }
      else     if(h==1&&com_i==12)
      {
         COM_OK=1;   //寫入數據完成標志位
         COM_EN=0;
      }
   }
   else   if(chao_zi==0x03)     //操作碼參數設置
   {

   //      H1_wwww=0;
        if(h==4&&PIN_ADD_b)    //寫入屏地址          PIN_ADD_b=0;      //屏地址更改標志位
        {

         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;      //屏地址更改標志位
        }
        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;                  //取扇區地址
    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++;                     //字總數0-3 總計4個字
                }
        }
    }
  //  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;
}


//開啟顯示定時掃描
void dingsi(void)
{
        TMOD |= 0x01;
        TH0 = 0xF8;
        TL0 = 0x2f;
        ET0=1;
        TR0=1;
        EA=1;
        PT0=1;      //優先級
}


//程序初始化
void CHU_SHI(void)
{
    unsigned char i,z,an;

    EN    =EN_off;         //關顯示屏
    dingsi();       //開啟顯示掃描定時
    QING_RAM2();      //清顯示緩沖區RAM2內存
    delay(10);         //開機延遲
    COM_OK=0;         //寫入數據完成標志位清零
    Zhi_h=0;          //當前顯示字區默認為0
    Zhi_b=0;          //調用顯示標志位清零

    COM_ADDRES=IAP_DU (0x0f,250);     //本機地址
    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扇區

     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組數據


        WDT_CONTR = 0x3C;      //狗;;
        if(S2_b==0)        //K2_A        按紐2清除A/B組數據
        {
  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);    //顯示當前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);    //顯示當前A值
    }
        delay(20)   ;
    }
    delay(200)   ;
    if(bei!=w)
    {
        QING_RAM2();      //清顯示緩沖區RAM2內存
        delay(10)   ;
        IAP_CACHU (0x0A,0);         //清空EEP   3扇區
        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);    //顯示當前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);    //顯示當前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);    //顯示當前A值
        }


        delay(20)   ;
    }
    delay(200)   ;

        QING_RAM2();      //清顯示緩沖區RAM2內存
        delay(10)   ;
        IAP_CACHU (0x0c,0);         //清空EEP   3扇區
        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);         //開機延遲
                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);    //顯示當前A值
}

/********************8位接收設置**********************/
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;

}
//
/*****************主程序區****************************/
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);         //開機延遲
          dingsi();       //開啟顯示掃描定時

        zi=0;
        Zhi_ZHI=0;
        time_s=0;
        da_H=0;//行掃開始值
        CHU_SHI();      //初始化

        INSZ8();        //開啟串口接收    18.432M-19200---------------

        if(jp5S(3)==1)
        set_IN_HL() ;    //  輸入端高低電平有效位設置
        if(jp5S(2)==1)
        set_IN_time()   ;

        time_bit=0 ;                 //是否有數據需要保存標志位
        A_B=0;                      //顯示A/B組標志位
        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扇區
        IAP_XIE (IN_time,0x0c,204) ;

        }
        if(IN_HL>0)
        hl_b=0;
        else
        hl_b=1;



        in_b=1;    //防止誤動作



        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 ) ;   ////顯示當前值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 ) ;   //顯示當前A值

    while(1)
    {
open:

        WDT_CONTR = 0x3C;          //狗;

        delay(1)   ;
        i=1;
        for(i=0;i<3;i++);
        if(IN_j()==1)   //有數據輸入
        {
             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 ) ;   ////顯示當前值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組數據
        {
            xianshi(11,ucdata_B[1]/10,ucdata_B[1]%10,ucdata_B[0]/10,ucdata_B[0]%10 ) ;   ////顯示當前值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 ) ;   ////顯示當前值B
                 ab_b=0;
                 }
             }
        }
        if(jp5S(2)==1)//按紐2清除A/B組數據
        {
                ucdata_B[0]=0;
                ucdata_B[1]=0;
                ucdata_B[2]=0;
                QING_RAM2();      //清顯示緩沖區RAM2內存
                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 ) ;   ////顯示當前值B
        }
        goto open;
    }
}
/*
程序完成時間:
*/
回復

使用道具 舉報

ID:68672 發表于 2014-11-12 18:04 | 顯示全部樓層
一次發不了太多
回復

使用道具 舉報

ID:68672 發表于 2014-11-12 18:05 | 顯示全部樓層
#include <STC12C54.H>
#include <intrins.h>
#include <absacc.h>
#include <math.h>

#define   unchar   unsigned char
#define   unint    unsigned int

/*****************關鍵值*********************/

//COM通信修改項
#define  COM_ADDRES_G   0x00         //廣播通信地址16進制
#define  com_in_data0  0xBE         // 接收開始位
#define  com_in_close  0x0D         // 接收結束位

//新舊屏修改項
//#define  EN_on              1         //掃描開       //0    新舊屏相關
//電信舊屏為0
//熊屏為1


#define  EN_off             !EN_on         //掃描        //1

//改屏字數時修改項
#define  PIN_ZI         5          //屏總字數        //4


#define  RAM_SHU        32*(PIN_ZI/2)         //緩沖數組大小int       //32*(PIN_ZI/2)


#define  H2_ZI          4          //第二行字中數字加入到第幾個字中間

#define  ZHI_HH        17          //數據行數       //4
#define  COM_MAX       77           //com最大接收數
#define  XIAN_id       13           //窗口號放在第幾行

/****************函數申明區************************************/
//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發送控制
//sbit          LED        = P3^7;

//全局變量定義
unchar  da_H;                   //顯示掃描行數
unsigned int xdata ZHUO_DA;
unchar  zi;                     //左移字數累加
unsigned int xdata DAT_RAM2[RAM_SHU];  //顯示掃描緩沖區
unsigned char com_i;                   //5/26
bit           com_q;

unsigned char data COM_R[COM_MAX];         //接收數據緩存    //77
bit           COM_OK;                  //寫入數據完成標志位
bit           Zhi_b;                   //寫入數據完成標志位

unsigned char idata H_ZHI[16];                //每行字數
unsigned char Zhi_h,chisu;                   //當前顯示字區
unsigned char YI_F;                    //移動方向選取
unsigned char idata  COM_DATA[6],COM_ADDRES;  //  4
unsigned int   PAI;                      //排隊等候時間
unsigned char QIE;                     //切換時間

bit           Zhi_ZHI;                   //字移完成標志位
unsigned char   Z_H    ;    //字數最大行數
unsigned char   Z_LMAX    ; // Z_LMAX=PIN_ZI*2    //掃描字數移位確認
unsigned char   SHU_1_14;    //上移綬沖開始位

unsigned int      time_s;
bit           EN_on;      //  輸出EN驅動反向控制位

bit           PIN_ADD_b;      //屏地址更改標志位

bit           S1_b,S2_b,S3_b,in_b,hl_b;      //按鍵狀態標志位
unsigned char   IN_HL;    //輸入數據高電平/低電平有效
unsigned char   IN_time;

//bit             ddd;         //叫號閃爍時間清零標志

unsigned char xdata  YI_DONG_SD[15] ;    //移動速度
unsigned char xdata  YI_DONG_FX[15] ;    //移動方向選取
unsigned char xdata  XIAN_SI_YS[15] ;    //顯示延時
unsigned char xdata  JIAO_HAO_1[15] ;    //叫號1
unsigned char xdata  JIAO_HAO_X[15] ;    //叫號顯示與否標志位
unsigned char xdata  XIAN_SI_CS[15] ;    //顯示次數
unsigned char xdata  TING_LUI_SJ[15] ;    //停留時間
unsigned char xdata  JIAO_HAO_CS[15] ;    //叫號閃動次數

//unsigned int H1_wwww ;                   //第一行字中數字加入到第幾個字中間  //

unsigned char   COM_EN;
//unsigned char       time_d ;
//unsigned int xdata DAT_XIAN_ID[17];  //窗口號顯示掃描緩沖區


unsigned char code Dat_pin[]=
{//橫向取模左高位,數據排列:從左到右從上到下
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,

};
回復

使用道具 舉報

ID:68672 發表于 2014-11-13 08:23 | 顯示全部樓層
需要審核所,我以為沒發得起,反復發了幾次,
這程序是以前的,很多對你沒什么用,比如EEP串口通信等,當時編得不是很好,你取你需要的部分就成
回復

使用道具 舉報

ID:68672 發表于 2014-11-13 08:24 | 顯示全部樓層
ICi是STC5608,晶振18。432
回復

使用道具 舉報

ID:68643 發表于 2014-11-14 11:02 | 顯示全部樓層
xing1234 發表于 2014-11-13 08:24
ICi是STC5608,晶振18。432

非常感謝你,經過實驗,原來是板子上的74hc123工作不正常引起的,可能是我的程序達不到原來板子的刷新頻率,導致74hc123工作不正常。現在把板子上的74hc123去掉,把一塊138的6腳接vcc,另一塊138的4腳接地,讓138正常工作,顯示就正常了。
回復

使用道具 舉報

ID:260250 發表于 2017-12-12 10:41 | 顯示全部樓層
樓主的思路好啊。通過調整,把板子搞好了,值得借鑒。向樓主學習。
回復

使用道具 舉報

ID:260250 發表于 2017-12-12 10:43 | 顯示全部樓層
xing1234 發表于 2014-11-12 18:02
/*版 本:   1.0       */

#include

厲害啊,欣賞欣賞。謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国精久久 | 91精品国产色综合久久不卡98 | 亚洲日韩中文字幕一区 | 日日骑| 国产伊人久久久 | 91porn国产成人福利 | 国产一区二区三区免费视频 | 国产午夜三级一区二区三 | 性在线| av手机在线 | 国产精品免费av | 夜夜精品视频 | 91精品久久久久久久久99蜜臂 | 五月婷婷在线播放 | 欧美日韩在线一区二区 | 又黑又粗又长的欧美一区 | 午夜小视频在线播放 | 欧美一区二区三区在线观看 | 一区二区三区精品视频 | 午夜资源 | 免费精品视频一区 | 久久久涩| 国产欧美一区二区三区免费 | 亚洲成人精品视频 | 九色网址| 男人天堂视频在线观看 | 免费黄色网址视频 | aaa在线| 在线一区视频 | 久久精品欧美视频 | 99国产精品久久久久久久 | 欧美乱人伦视频 | 国产精品一区久久久 | 岛国毛片| 久久国产精品免费一区二区三区 | 狠狠色香婷婷久久亚洲精品 | 日韩在线视频一区 | 黄视频网站在线 | 欧美日韩视频在线第一区 | 91视频免费| 黄色片网站在线观看 |