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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6454|回復(fù): 34
打印 上一主題 下一主題
收起左側(cè)

16x64點(diǎn)陣顯示問(wèn)題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:68643 發(fā)表于 2014-11-11 14:46 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
近期得到一塊16x64的LED屏幕板子,板子上的集成電路有,8塊74hc595、一塊74hc245,一塊74hc123,一塊74hc367、2塊hc74138.參考網(wǎng)上的接口定義和驅(qū)動(dòng),能夠點(diǎn)亮,但出現(xiàn)一下問(wèn)題:只送一個(gè)字的數(shù)據(jù)時(shí),第一個(gè)字顯示正常,第二個(gè)子從第二行開始顯示,第16行在第一行顯示,第三個(gè)子從第三行顯示,第16和15行在第1和第二行顯示,第四個(gè)子從第四行顯示,第16、15和14行在第1、第2和第3行顯示,,同時(shí)送4個(gè)字的數(shù)據(jù)時(shí),中間會(huì)有幾行不亮。試了好幾個(gè)程序都是這樣,不知問(wèn)題出在程序還是板子,本人純屬愛好,望高手幫忙。

IMG_20141111_135302.jpg (1.94 MB, 下載次數(shù): 171)

IMG_20141111_135302.jpg
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:68672 發(fā)表于 2014-11-11 16:22 | 只看該作者
板子沒什么問(wèn)題,是你程序的問(wèn)題,好好查一下,

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:68672 發(fā)表于 2014-11-11 16:23 | 只看該作者
你一次將4個(gè)字的數(shù)據(jù)發(fā)完再鎖存就OK了
回復(fù)

使用道具 舉報(bào)

地板
ID:68643 發(fā)表于 2014-11-11 16:43 | 只看該作者
xing1234 發(fā)表于 2014-11-11 16:23
你一次將4個(gè)字的數(shù)據(jù)發(fā)完再鎖存就OK了

一次將4個(gè)字的數(shù)據(jù)發(fā)完,就會(huì)有幾行不亮,字顯示不全。
回復(fù)

使用道具 舉報(bào)

5#
ID:68643 發(fā)表于 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;  //紅色數(shù)據(jù)
sbit clk=P0^3;  //時(shí)鐘信號(hào)
sbit stcp=P0^2; //鎖存信號(hào)




sbit mr=P0^4;  //

uint counter;
uchar flag;
uchar code display[ ]={
/*-- 文字: 好 --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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,

/*-- 文字: 學(xué) --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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,

/*-- 文字: 習(xí) --*/
/*-- 宋體12; 此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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;  此字體下對(duì)應(yīng)的點(diǎn)陣為:寬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寫一個(gè)字節(jié)的數(shù)據(jù)
{
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演延時(shí)10ms
{
        uchar a,b;
        for(a=x;a>0;a--)
         for(b=200;b>0;b--);
}

void main() //主函數(shù)
{

  
while(1)
{
uchar i,j;


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

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;
     

   
}
回復(fù)

使用道具 舉報(bào)

6#
ID:68643 發(fā)表于 2014-11-11 16:47 | 只看該作者
for(j=0;j<17;j++)應(yīng)為for(j=0;j<16;j++)
回復(fù)

使用道具 舉報(bào)

7#
ID:68643 發(fā)表于 2014-11-11 16:48 | 只看該作者
用這個(gè)程序驅(qū)動(dòng),顯示不全
回復(fù)

使用道具 舉報(bào)

8#
ID:68643 發(fā)表于 2014-11-11 16:49 | 只看該作者
想弄好16x64,在弄32x64這個(gè)大板
回復(fù)

使用道具 舉報(bào)

9#
ID:68672 發(fā)表于 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;
                        }
            }
回復(fù)

使用道具 舉報(bào)

10#
ID:68672 發(fā)表于 2014-11-11 17:32 | 只看該作者
以前的程序,很多是對(duì)你沒用的,取了一段
回復(fù)

使用道具 舉報(bào)

11#
ID:68672 發(fā)表于 2014-11-11 17:35 | 只看該作者
xdata struct j_RAM                  //        顯示緩存
{
    U16  j_ram_Lie[PIN_ZI];        //開顯示緩沖區(qū)
}j_ram_Hang[16];
回復(fù)

使用道具 舉報(bào)

12#
ID:68672 發(fā)表于 2014-11-11 17:37 | 只看該作者
要看你用的什么型號(hào)的片子,可以考慮用定時(shí)器中斷掃描
回復(fù)

使用道具 舉報(bào)

13#
ID:68672 發(fā)表于 2014-11-11 17:40 | 只看該作者
先開一段RAM做顯示緩存,一行一行的掃,一行數(shù)據(jù)全部發(fā)完再鎖存,
回復(fù)

使用道具 舉報(bào)

14#
ID:68643 發(fā)表于 2014-11-11 20:29 | 只看該作者
這是發(fā)送四個(gè)字的顯示

IMG_20141111_165529.jpg (1.68 MB, 下載次數(shù): 155)

IMG_20141111_165529.jpg
回復(fù)

使用道具 舉報(bào)

15#
ID:68643 發(fā)表于 2014-11-11 20:30 | 只看該作者
顯示不全,就是不知道原因
回復(fù)

使用道具 舉報(bào)

16#
ID:68643 發(fā)表于 2014-11-11 20:49 | 只看該作者
就是不明白為什么有幾行會(huì)不亮?
用了幾個(gè)程序都是這樣
回復(fù)

使用道具 舉報(bào)

17#
ID:68643 發(fā)表于 2014-11-11 21:37 | 只看該作者
板子背面

IMG_20141111_165544.jpg (1.89 MB, 下載次數(shù): 130)

IMG_20141111_165544.jpg
回復(fù)

使用道具 舉報(bào)

18#
ID:68672 發(fā)表于 2014-11-12 11:32 | 只看該作者
你第一張圖已經(jīng)說(shuō)是板子是好的,程序問(wèn)題
回復(fù)

使用道具 舉報(bào)

19#
ID:68672 發(fā)表于 2014-11-12 11:35 | 只看該作者
你這個(gè)板子是老板子了,如是你能顯示圖1的話,說(shuō)明你的驅(qū)動(dòng)應(yīng)當(dāng)是OK的,我沒細(xì)看你和程序
回復(fù)

使用道具 舉報(bào)

20#
ID:68672 發(fā)表于 2014-11-12 11:43 | 只看該作者
如果需要,我?guī)啄昵坝袀(gè)LED計(jì)算器的程序可以傳上來(lái),你看看
回復(fù)

使用道具 舉報(bào)

21#
ID:68672 發(fā)表于 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

/*****************關(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í)間:
*/
回復(fù)

使用道具 舉報(bào)

22#
ID:68672 發(fā)表于 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

/*****************關(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í)間:
*/
回復(fù)

使用道具 舉報(bào)

23#
ID:68672 發(fā)表于 2014-11-12 18:04 | 只看該作者
一次發(fā)不了太多
回復(fù)

使用道具 舉報(bào)

24#
ID:68672 發(fā)表于 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

/*****************關(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,

};
回復(fù)

使用道具 舉報(bào)

25#
ID:68672 發(fā)表于 2014-11-13 08:23 | 只看該作者
需要審核所,我以為沒發(fā)得起,反復(fù)發(fā)了幾次,
這程序是以前的,很多對(duì)你沒什么用,比如EEP串口通信等,當(dāng)時(shí)編得不是很好,你取你需要的部分就成
回復(fù)

使用道具 舉報(bào)

26#
ID:68672 發(fā)表于 2014-11-13 08:24 | 只看該作者
ICi是STC5608,晶振18。432
回復(fù)

使用道具 舉報(bào)

27#
ID:68643 發(fā)表于 2014-11-14 11:02 | 只看該作者
xing1234 發(fā)表于 2014-11-13 08:24
ICi是STC5608,晶振18。432

非常感謝你,經(jīng)過(guò)實(shí)驗(yàn),原來(lái)是板子上的74hc123工作不正常引起的,可能是我的程序達(dá)不到原來(lái)板子的刷新頻率,導(dǎo)致74hc123工作不正!,F(xiàn)在把板子上的74hc123去掉,把一塊138的6腳接vcc,另一塊138的4腳接地,讓138正常工作,顯示就正常了。
回復(fù)

使用道具 舉報(bào)

28#
ID:260250 發(fā)表于 2017-12-12 10:41 | 只看該作者
樓主的思路好啊。通過(guò)調(diào)整,把板子搞好了,值得借鑒。向樓主學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

29#
ID:260250 發(fā)表于 2017-12-12 10:43 | 只看該作者
xing1234 發(fā)表于 2014-11-12 18:02
/*版 本:   1.0       */

#include

厲害啊,欣賞欣賞。謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品日韩精品国产精品 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 亚洲女优在线播放 | 亚洲成人国产综合 | 欧美一级免费观看 | 亚洲欧洲日韩 | 久久精品一区二区三区四区 | 久久国产一区 | 国内av在线| 日韩精品亚洲专区在线观看 | 一区二区三区小视频 | 超黄毛片 | 一区二区免费视频 | 亚洲日本一区二区三区四区 | 国产精品久久久av | 黄色大全免费看 | 精品免费国产一区二区三区四区 | 激情婷婷| 男女羞羞视频在线看 | 黄色香蕉视频在线观看 | 久久久久网站 | 欧美日韩国产综合在线 | 自拍偷拍第一页 | 婷婷久久五月天 | 波多野结衣亚洲 | 夜久久 | 一本大道久久a久久精二百 国产成人免费在线 | 三级特黄特色视频 | 欧美国产日韩在线观看成人 | 日本三级做a全过程在线观看 | 精品国产精品三级精品av网址 | 不卡一区二区三区四区 | 成人不卡视频 | 91美女在线观看 | 狠狠的操| 欧美国产视频一区二区 | 99免费在线视频 | 欧美成人hd| 99国产精品久久久 | 瑞克和莫蒂第五季在线观看 | 精品国产一区二区三区久久 |