找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6486|回复: 34
打印 上一主题 下一主题
收起左侧

16x64点阵显示问题

[复制链接]
跳转到指定楼层
楼主
近期得到一块16x64的LED屏幕板子,板子上的集成电路有,8块74hc595、一块74hc245,一块74hc123,一块74hc367、2块hc74138.参考网上的接口定义和驱动,能够点亮,但出现一下问题:只送一个字的数据时,第一个字显示正常,第二个子从第二行开始显示,第16行在第一行显示,第三个子从第三行显示,第16和15行在第1和第二行显示,第四个子从第四行显示,第16、15和14行在第1、第2和第3行显示,,同时送4个字的数据时,中间会有几行不亮。试了好几个程序都是这样,不知问题出在程序还是板子,本人纯属爱好,望高手帮忙。

IMG_20141111_135302.jpg (1.94 MB, 下载次数: 171)

IMG_20141111_135302.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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个字的数据发完,就会有几行不亮,字显示不全。
回复

使用道具 举报

5#
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;
     

   
}
回复

使用道具 举报

6#
ID:68643 发表于 2014-11-11 16:47 | 只看该作者
for(j=0;j<17;j++)应为for(j=0;j<16;j++)
回复

使用道具 举报

7#
ID:68643 发表于 2014-11-11 16:48 | 只看该作者
用这个程序驱动,显示不全
回复

使用道具 举报

8#
ID:68643 发表于 2014-11-11 16:49 | 只看该作者
想弄好16x64,在弄32x64这个大板
回复

使用道具 举报

9#
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;
                        }
            }
回复

使用道具 举报

10#
ID:68672 发表于 2014-11-11 17:32 | 只看该作者
以前的程序,很多是对你没用的,取了一段
回复

使用道具 举报

11#
ID:68672 发表于 2014-11-11 17:35 | 只看该作者
xdata struct j_RAM                  //        显示缓存
{
    U16  j_ram_Lie[PIN_ZI];        //开显示缓冲区
}j_ram_Hang[16];
回复

使用道具 举报

12#
ID:68672 发表于 2014-11-11 17:37 | 只看该作者
要看你用的什么型号的片子,可以考虑用定时器中断扫描
回复

使用道具 举报

13#
ID:68672 发表于 2014-11-11 17:40 | 只看该作者
先开一段RAM做显示缓存,一行一行的扫,一行数据全部发完再锁存,
回复

使用道具 举报

14#
ID:68643 发表于 2014-11-11 20:29 | 只看该作者
这是发送四个字的显示

IMG_20141111_165529.jpg (1.68 MB, 下载次数: 155)

IMG_20141111_165529.jpg
回复

使用道具 举报

15#
ID:68643 发表于 2014-11-11 20:30 | 只看该作者
显示不全,就是不知道原因
回复

使用道具 举报

16#
ID:68643 发表于 2014-11-11 20:49 | 只看该作者
就是不明白为什么有几行会不亮?
用了几个程序都是这样
回复

使用道具 举报

17#
ID:68643 发表于 2014-11-11 21:37 | 只看该作者
板子背面

IMG_20141111_165544.jpg (1.89 MB, 下载次数: 130)

IMG_20141111_165544.jpg
回复

使用道具 举报

18#
ID:68672 发表于 2014-11-12 11:32 | 只看该作者
你第一张图已经说是板子是好的,程序问题
回复

使用道具 举报

19#
ID:68672 发表于 2014-11-12 11:35 | 只看该作者
你这个板子是老板子了,如是你能显示图1的话,说明你的驱动应当是OK的,我没细看你和程序
回复

使用道具 举报

20#
ID:68672 发表于 2014-11-12 11:43 | 只看该作者
如果需要,我几年前有个LED计算器的程序可以传上来,你看看
回复

使用道具 举报

21#
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;
    }
}
/*
程序完成时间:
*/
回复

使用道具 举报

22#
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;
    }
}
/*
程序完成时间:
*/
回复

使用道具 举报

23#
ID:68672 发表于 2014-11-12 18:04 | 只看该作者
一次发不了太多
回复

使用道具 举报

24#
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,

};
回复

使用道具 举报

25#
ID:68672 发表于 2014-11-13 08:23 | 只看该作者
需要审核所,我以为没发得起,反复发了几次,
这程序是以前的,很多对你没什么用,比如EEP串口通信等,当时编得不是很好,你取你需要的部分就成
回复

使用道具 举报

26#
ID:68672 发表于 2014-11-13 08:24 | 只看该作者
ICi是STC5608,晶振18。432
回复

使用道具 举报

27#
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正常工作,显示就正常了。
回复

使用道具 举报

28#
ID:260250 发表于 2017-12-12 10:41 | 只看该作者
楼主的思路好啊。通过调整,把板子搞好了,值得借鉴。向楼主学习。
回复

使用道具 举报

29#
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 单片机教程网

快速回复 返回顶部 返回列表