⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 anayserial.c

📁 W78E516实现高速公路收费站语音费额显示器资料之三:产品的语音,通讯,显示全套源代码程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
                                                        codebuff[16]=rxbuff[6];
                                                        codebuff[17]=rxbuff[7];
                                                        codebuff[18]=rxbuff[8];
                                                        codebuff[19]=rxbuff[9];
                                                        codebuff[20]=rxbuff[10];
                                                        codebuff[21]=rxbuff[11];
                                                        codebuff[22]=0xd4;
                                                        codebuff[23]=0xaa;
                                                        f_normdisp=1;
                                                        f_leddisp=0;
                                                        f_fixdisp=1;
                                                        f_t_delaywr=1;
                                                        pin_wrram=1;
                                                        }
                                                }
                                        }
                                }
                        }
                if((f_handlesound&f_wrramover)==1)
                        {
                        f_handlesound=0;
                        isd_ce=1;
                        cnt_sound++;
                        tmp=length_s/2;
                        tp=length_s%2;
                        if(tp==0)
                                {
                                WDFeed();
                                if(cnt_sound<(tmp+1))
                                        {
                                        i=soundbuff[2*cnt_sound-2];
                                        if(i==0)
                                                {
                                                isd_a9=0;
                                                isd_a8=0;
                                                }
                                        if(i==1)
                                                {
                                                isd_a9=0;
                                                isd_a8=1;
                                                }
                                        if(i==2)
                                                {
                                                isd_a9=1;
                                                isd_a8=0;
                                                }
                                        if(i==3)
                                                {
                                                isd_a9=1;
                                                isd_a8=1;
                                                }
                                        P0=soundbuff[2*cnt_sound-1];
                                        isd_ce=0;
                                        }
                                if(cnt_sound==(tmp+1))
                                        {
                                        cnt_sound=0;
                                        f_wrramover=0;
                                        }
                                }
                        }
                }
        }
void WDFeed(void)
        {
        wdi=1;
        wdi=0;
        }
void serial(void) interrupt 4
        {
        uchr tp=0;
        if(RI==1)
                {
                RI=0;
                if(f_rerx==1)
                        {
                        if(SBUF==start)
                                {
                                f_rerx=0;
                                cnt_rx=0;
                                }
                        }
                else
                        {
                        cnt_rx++; //rxbuff[cnt_rx-1]=SBUF;
                        if(cnt_rx==1)
                                {
                                dispstyle=SBUF;
                                }
                        if(cnt_rx==2)//显示数据会大于256,所以用两个字节来表示数据长度
                                {
                                displength_h=SBUF;
                                }
                        if(cnt_rx==3)
                                {
                                displength_l=SBUF;
                                lengthdisp=displength_h*256+displength_l;
                                if(lengthdisp>384)
                                        {
                                        f_rerx=1;
                                        f_transerr=1;
                                        Tx();
                                        }
                                if(lengthdisp>127)
                                        {
                                        f_over128=1;
                                        }
                                else
                                        {
                                        f_over128=0;
                                        }
                                }
                        if((cnt_rx>3)&&(cnt_rx<(lengthdisp+4)))
                                {
                                if(cnt_rx<132)
                                        {
                                        rxbuff[cnt_rx-4]=SBUF; //0->127
                                        }

                                else
                                        {
                                        CHPCON|=0x10;
                                        rxbuff2[cnt_rx-132]=SBUF; //128->384
                                        CHPCON=0x00;
                                        }
                                }
                        if(cnt_rx==lengthdisp+4)
                                {
                                lengthsound=SBUF;
                                CHPCON|=0x10;
                                }
                        if((cnt_rx>(lengthdisp+4))&&(cnt_rx<(lengthdisp+lengthsound+5)))
                                {
                                soundbuff[cnt_rx-lengthdisp-5]=SBUF;
                                }
                        if(cnt_rx==(lengthsound+lengthdisp+5))
                                {
                                rx_check=SBUF;
                                }
                        if(cnt_rx==(lengthsound+lengthdisp+6))
                                {
                                f_rerx=1;
                                if(SBUF==end)
                                        {
                                        f_anayrx=1;
                                        }
                                else
                                        {
                                        f_transerr=1;
                                        Tx();
                                        }
                                }
                        }
                }
        if(TI==1)
                {
                TI=0;
                if(cnt_tx==1)
                        {
                        SBUF=end;
                        cnt_tx=0;
                        f_transerr=0;
                        f_transsuc=0;
                        }
                if(cnt_tx==2)
                        {
                        cnt_tx--;
                        if(f_transerr==1)
                                {
                                SBUF=txerr;
                                }
                        if(f_transsuc==1)
                                {
                                SBUF=txsuc;
                                }
                        }
                }
        }
void timer0(void) interrupt 1
        {
        TH0=0xfc;//定时1ms
        TL0=0x66;
        TR0=1;
        if(f_t_delaywr==1)
                {
                cnt_delaywr++;
                if(cnt_delaywr==10)
                        {
                        cnt_delaywr=0;
                        f_t_delaywr=0;
                        f_delaywr=1;
                        }
                }
        if(f_t_delayisd==1)
                {
                cnt_delayisd++;
                if(cnt_delayisd==150)
                        {
                        cnt_delayisd=0;
                        f_t_delayisd=0;
                        //f_delayisd=1;
                        f_handlesound=1;
                        }
                }
        }
void int0(void) interrupt 0
        {
        if(isd_ce==0)
                {
                f_t_delayisd=1;
                }
        isd_ce=1;
        }
void Tx(void)
        {
        cnt_tx=2;
        SBUF=0x10;
        }
void rom2ram_hanzi(uchr x,ulng y)
        {
        uchr tp;
        uchr i=0,j=0,m=0;
        uint temp=0;
        //m=(uchr)(y/65536);  //m直接取值会出错。
        temp=(uint)(y/256);
        m=(uchr)(temp/256);
        if(m==0)
                {
                rom_a17=0;
                rom_a16=0;
                }
        if(m==1)
                {
                rom_a17=0;
                rom_a16=1;
                }
        if(m==2)
                {
                rom_a17=1;
                rom_a16=0;
                }
        if(m==3)
                {
                rom_a17=1;
                rom_a16=1;
                }
        temp=y-m*65536;
        for(i=0;i<32;i++)
                {
                j=i/2;
                rom_ce=0;
                tp=XBYTE[temp+i];
                rom_ce=1;
                if((i%2)==0)
                        {
                        if(x<13)
                                {
                                ram_ce=0;
                                nDispRam[12*j+x-2]=tp;
                                }
                        else
                                {
                                ram_ce=0;
                                nDispRam[12*(j+16)+x-2-12]=tp;
                                }
                        ram_ce=1;
                        }
                if((i%2)==1)
                        {
                        if(x<13)
                                {
                                ram_ce=0;
                                nDispRam[12*j+x-1]=tp;
                                }
                        else
                                {
                                ram_ce=0;
                                nDispRam[12*(j+16)+x-1-12]=tp;
                                }
                        ram_ce=1;
                        }
                }
        }
void rom2ram_ascii(uchr x,uchr y)
        {
        uchr i=0;
        uint tp=0;
        if(x<13)
                {
                for(i=0;i<16;i++)
                        {
                        ram_ce=0;
                        //nDispRam[i][x-1]=tp[i];
                        nDispRam[12*i+x-1]=ascii[y*16+i];
                        if(f_fixdisp==1)
                                {
                                tp=12*i+x-1;
                                if(tp==151)
                                        {
                                        nDispRam[tp]=ascii[y*16+i]|0x03;
                                        }
                                if(tp==163)
                                        {
                                        nDispRam[tp]=ascii[y*16+i]|0x03;
                                        }

                                }
                        ram_ce=1;
                        }
                }
        else
                {
                for(i=0;i<16;i++)
                        {
                        ram_ce=0;
                        nDispRam[12*(i+16)+x-1-12]=ascii[y*16+i];
                        if(f_fixdisp==1)
                                {
                                tp=12*(i+16)+x-1-12;
                                if(tp==343)
                                        {
                                        nDispRam[tp]=ascii[y*16+i]|0x03;
                                        }
                                if(tp==355)
                                        {
                                        nDispRam[tp]=ascii[y*16+i]|0x03;
                                        }

                                }
                        ram_ce=1;
                        }
                }
        //ram_ce=1;
        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -