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

📄 anayserial.c

📁 W78E516实现高速公路收费站语音费额显示器资料之三:产品的语音,通讯,显示全套源代码程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
/**************************************************************/
/**文件名:anayserial.c                                      **/
/**                                                          **/
/**文件描述: 通过RS232接收上位机的数据,对该数据进行分析;     **/
/**          显示相应的内容,发出相应的语音.                  **/
/**          数据类型分为:机器内码形式,点阵形式,固定语句形式 **/
/**                                                          **/
/**创建人: 陈芸    时间: 2007年07月17日                      **/
/**                                                          **/
/**版本号: 01                                                **/
/**修改记录                                                  **/
/**************************************************************/

#include<reg52.h>
#include<absacc.h>
#include<def_pin.h>
#include<def_para.h>
#include<def_code.h>

void WDFeed(void);
void Tx(void);
void rom2ram_hanzi(uchr x,ulng y);
void rom2ram_ascii(uchr x,uchr y);

void main(void)
        {
        uchr cnt_zi=0,tmpi=0,tmpq=0,tmpw=0,tp=0,tmp=0;
        uint i=0;
        ulng tmpoffset=0;
        uchr style=0,length_h=0,length_l=0,chk=0,length_s=0;
        uint length_d=0;
        bit f_over=0;

        //片内扩展DATA设置
        CHPENR=0x87;
        CHPENR=0x59;
        CHPCON=0x00;  //CHPCON|=0x10;//片内外部存储器写允许   //CHPCON=0x00; ----则片内外部存储器写禁止
        //串口初始化
        TMOD=0x21;  //定时器0,方式1;定时器1,方式2
        TH1=0X0fd;
        TL1=0x0fd;
        PCON=0x00;
        SCON=0x50;

        //定时器初始化
        TH0=0xfc;//定时1ms
        TL0=0x66;
        //外部中断初始化
        IT0=1;
        //设置中断优先级
        PS=1;
        PX0=1;
        PT0=1;
        //开中断
        EA=1;
        ES=1;
        ET0=1;
        ET1=1;
        EX0=1;
        TR1=1;
        TR0=1;

        pin_wrram=1;
        pin_full=1;
        while(1)
                {
                WDFeed();
                if(f_delaywr==1)
                        {
                        f_delaywr=0;
                        //硬件写置1
                        pin_wrram=1;
                        if(f_normdisp==1)
                                {
                                f_normdisp=0;
                                cnt_zi=0;
                                tmpi=0;
                                for(i=0;i<lengthnorm;i++)
                                        {
                                        tp=codebuff[i];
                                        if(tp>0x80) //汉字
                                                {
                                                tmpi++;
                                                cnt_zi++;
                                                if(tmpi==2)
                                                        {
                                                        tmpi=0;
                                                        tmpq=codebuff[i-1]-0xa0;
                                                        tmpw=codebuff[i]-0xa0;
                                                        tmpoffset=(ulng)((tmpq-1)*94+(tmpw-1))*32;
                                                        WDFeed();
                                                        CHPCON=0x00;
                                                        rom2ram_hanzi(cnt_zi,tmpoffset);
                                                        }
                                                }
                                        else  //ASCII 码
                                                {
                                                if(tmpi!=0)
                                                        {
                                                        tmpi=0;
                                                        break;
                                                        }
                                                else
                                                        {
                                                        cnt_zi++;
                                                        WDFeed();
                                                        //分析ASCii码
						        CHPCON=0x00;
                                                        tp=codebuff[i];
                                                        rom2ram_ascii(cnt_zi,tp);
                                                        }
                                                }
                                        }
                                
                                }
                        if(f_leddisp==1)
                                {
                                f_leddisp=0;
                                if(f_over==1)
                                        {
                                        for(i=0;i<128;i++)
                                                {
                                                CHPCON=0x00;
                                                ram_ce=0;
                                                nDispRam[i]=rxbuff[i];
                                                ram_ce=1;
                                                }
                                        for(i=0;i<(length_d-128);i++)
                                                {
                                                CHPCON|=0x10;
                                                tmpi=rxbuff2[i];
                                                CHPCON=0x00;
                                                ram_ce=0;
                                                nDispRam[128+i]=tmpi;
                                                ram_ce=1;
                                                }
                                        for(i=0;i<(lengthled-length_d);i++)
                                                {
                                                ram_ce=0;
                                                nDispRam[length_d+i]=0;
                                                ram_ce=1;
                                                }
                                        }
                                else
                                        {
                                        for(i=0;i<length_d;i++)
                                                {
                                                ram_ce=0;
                                                nDispRam[i]=rxbuff[i];
                                                ram_ce=1;
                                                }
                                        for(i=0;i<(lengthled-length_d);i++)
                                                {
                                                ram_ce=0;
                                                nDispRam[i+length_d]=0;
                                                ram_ce=1;
                                                }
                                        }
                                }
                        f_fixdisp=0;
                        f_normdisp=0;
                        f_leddisp=0;
                        f_wrramover=1;
                        pin_wrram=0;
                        }
                if(f_anayrx==1) //接收完数据后,对所接收的数据进行分析
                        {
                        f_anayrx=0;
                        f_over=f_over128;
                        length_d=lengthdisp;
                        length_s=lengthsound;
                        style=dispstyle;
                        length_h=displength_h;
                        length_l=displength_l;
                        chk=rx_check;
                        check=0;
                        check^=style;
                        check^=length_h;
                        check^=length_l;
                        if(f_over==1)
                                {
                                for(i=0;i<128;i++)
                                        {
                                        check^=rxbuff[i];
                                        }
                                for(i=0;i<(length_d-127);i++)
                                       {
                                       check^=rxbuff2[i];
                                       }
                                }
                        else
                                {
                                for(i=0;i<length_d;i++)
                                        {
                                        check^=rxbuff[i];
                                        }
                                }
                        check^=length_s;
                        for(i=0;i<length_s;i++)
                                {
                                check^=soundbuff[i];
                                }
                        if(check!=chk)
                                {
                                f_transerr=1;
                                Tx();
                                }
                        else
                                {
                                f_transsuc=1;
                                Tx();
                                //分析语音部分
                                tp=length_s%2;
                                if(tp==0)
                                        {
                                        if(length_s==0x0)
                                                {
                                                f_handlesound=0;
                                                isd_ce=1;
                                                }
                                        else
                                                {
                                                //save sound
                                                for(i=0;i<length_s;i++)
                                                        {
                                                        tp=i%2;
                                                        if(tp==0)
                                                                {
                                                                if(soundbuff[i]>3)
                                                                        {
                                                                        f_err=1;
                                                                        break;
                                                                        }
                                                                }
                                                        }
                                                if(f_err==1)
                                                        {
                                                        f_handlesound=0;
                                                        }
                                                else
                                                        {
                                                        f_handlesound=1;
                                                        }
                                                }
                                        }
                                else
                                        {
                                        f_handlesound=0;
                                        }
                                if(style==full)
                                        {
                                        //全屏
                                        }
                                if(style==norm)
                                        {
                                        if((length_d<lengthnorm)||(length_d==lengthnorm))
                                                {
                                                if(length_d==0)
                                                        {
                                                        //清屏
                                                        pin_wrram=1;
                                                        f_wrramover=1;
                                                        }
                                                else
                                                        {
                                                        for(i=0;i<lengthnorm;i++)
                                                                {
                                                                if(i<length_d)
                                                                        {
                                                                        codebuff[i]=rxbuff[i];
                                                                        }
                                                                else
                                                                        {
                                                                        codebuff[i]=0x0;
                                                                        }
                                                                }
                                                        f_normdisp=1;
                                                        f_leddisp=0;
                                                        f_fixdisp=0;
                                                        f_t_delaywr=1;
                                                        pin_wrram=1;
                                                        }
                                                }
                                        }
                                if(style==led)
                                        {
                                        if((length_d<lengthled)||(length_d==lengthled))
                                                {
                                                if(length_d==0)
                                                        {
                                                        //清屏
                                                        pin_wrram=1;
                                                        f_wrramover=1;
                                                        }
                                                else
                                                        {
                                                        f_normdisp=0;
                                                        f_leddisp=1;
                                                        f_fixdisp=0;
                                                        f_t_delaywr=1;
                                                        pin_wrram=1;
                                                        }
                                                }

                                        }
                                if(style==fix)
                                        {
                                        for(i=0;i<12;i++)
                                                {
                                                if(rxbuff[i]>0x7f)
                                                        {
                                                        f_err=1;
                                                        break;
                                                        }
                                                }
                                        if(f_err==0)
                                                {
                                                if(length_d==12)
                                                        {
                                                        codebuff[0]=0xbd;
                                                        codebuff[1]=0xf0;
                                                        codebuff[2]=0xb6;
                                                        codebuff[3]=0xee;
                                                        codebuff[4]=rxbuff[0];
                                                        codebuff[5]=rxbuff[1];
                                                        codebuff[6]=rxbuff[2];
                                                        codebuff[7]=rxbuff[3];
                                                        codebuff[8]=rxbuff[4];
                                                        codebuff[9]=rxbuff[5];
                                                        codebuff[10]=0xd4;
                                                        codebuff[11]=0xaa;
                                                        codebuff[12]=0xd3;
                                                        codebuff[13]=0xe0;
                                                        codebuff[14]=0xb6;
                                                        codebuff[15]=0xee;

⌨️ 快捷键说明

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