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

📄 lcddram.bak

📁 最先进的信号机程序,经过很多重要场合测试通过
💻 BAK
📖 第 1 页 / 共 2 页
字号:
#include <absacc.h>
#include <reg51.h>
//sbit cs_dram=P3^2;
sbit busy=P1^5;

extern unsigned int xdata data_address;
extern unsigned int xdata address;
extern unsigned int xdata tr_flagaddr;

extern unsigned char xdata now_day_planid;
extern unsigned char xdata timeid;
extern unsigned char xdata now_schemeid;
extern unsigned char xdata now_step_schid;
extern unsigned char xdata step_counter;
extern unsigned char xdata now_step_uncount;
extern unsigned char xdata  led83[30],led82[5];
extern unsigned char xdata step_num;
       unsigned int  xdata utemp;
unsigned char cpu_fpga_set(unsigned char flag,unsigned int ptr,unsigned int len)
{
  unsigned int i;
  data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1;
  address=data_address;
  data_address=data_address+len;            //应答数据长度1字节
  if(data_address>0xa07f0)data_address=data_address-0xa7f0+0xa080;
  while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){};    //等待FGPA修改头尾
  XBYTE[0xa023]=0x01;                              //CPU修改头尾
  XBYTE[0xa024]=0X00;
  data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
  address=data_address;
  data_address=data_address+len;            //应答数据长度1字节
  if(data_address>0xa07f0)data_address=data_address-0x7f0+0x80;
  data_address--;
  XBYTE[0XA021]=data_address>>8;          //
  XBYTE[0XA022]=data_address;
  XBYTE[0XA023]=0X00;                      //CPU修改头尾结束
  XBYTE[0XA024]=0X00;
  XBYTE[tr_flagaddr+1]=address>>8;        //发送数据的首地址
  XBYTE[tr_flagaddr+2]=address;
  XBYTE[tr_flagaddr+3]=data_address>>8;   //发送数据的尾地址
  XBYTE[tr_flagaddr+4]=data_address;
  address=address+0xa000;                 //发送应答数据
  XBYTE[address]=flag;
  address++;
  for(i=0;i<len;i++){
      XBYTE[address+i]=XBYTE[ptr+i];
                     }
  XBYTE[tr_flagaddr]=0x01;
  return 1;
}
deal_lcddram()
{
 unsigned char flag;
 unsigned char id;
 unsigned char idcode;
 unsigned int i,j,k;
//查询
 do{}while(busy==0);
 flag=XBYTE[0XC408];
 do{}while(busy==0);
 id=XBYTE[0XC40A];
 do{}while(busy==0);
 idcode=XBYTE[0XC40c];
 if(flag==1){
    switch(id){

            case 0x82: do{}while(busy==0);XBYTE[0XC410]=0XC2;
                       do{}while(busy==0);XBYTE[0XC411]=0x20;                   //最大输出通道数
                       do{}while(busy==0);XBYTE[0XC412]=0X20;                   //支持阶段表数
                       do{}while(busy==0);XBYTE[0XC413]=0X20;                   //一个阶段表支持的最大阶段数
                       do{}while(busy==0);XBYTE[0XC414]=0X20;                   //最大控制方案数
                       do{}while(busy==0);XBYTE[0XC415]=0X20;                   //最大日计划数
                       do{}while(busy==0);XBYTE[0XC416]=0X18;                   //一个日计划支持的最大时段
                       do{}while(busy==0);XBYTE[0XC417]=XBYTE[0X72E2];          //开机时间小时
                       do{}while(busy==0);XBYTE[0XC418]=XBYTE[0X72E3];          //开机时间分钟
                       do{}while(busy==0);XBYTE[0XC419]=XBYTE[0X72E4];          //关机时间小时
                       do{}while(busy==0);XBYTE[0XC41a]=XBYTE[0X72E5];          //关机时间分钟
                       do{}while(busy==0);XBYTE[0XC41b]=XBYTE[0X72E6];          //关机后状态
                       do{}while(busy==0);XBYTE[0XC41c]=XBYTE[0X8000];
                       do{}while(busy==0);XBYTE[0XC41d]=XBYTE[0X8001];
                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;

            case 0x83: do{}while(busy==0);XBYTE[0XC410]=0XC3;
                       do{}while(busy==0);XBYTE[0XC411]=XBYTE[0XC009];  //year
                       do{}while(busy==0);XBYTE[0XC412]=XBYTE[0XC008];  //month
                       do{}while(busy==0);XBYTE[0XC413]=XBYTE[0XC007];  //date
                       do{}while(busy==0);XBYTE[0XC414]=XBYTE[0XC004];  //hour
                       do{}while(busy==0);XBYTE[0XC415]=XBYTE[0XC002];  //min
                       do{}while(busy==0);XBYTE[0XC416]=XBYTE[0XC000];  //sec
                       do{}while(busy==0);XBYTE[0XC417]=XBYTE[0XC006];  //day
                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;
            case 0x84: do{}while(busy==0);XBYTE[0XC410]=0XC4;       //相位信息
                       if(idcode==0){
                         j=XBYTE[0XC40D];
                         j=(j-1)*18;
                          for(i=0;i<18;i++){
                                       do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5001+i+j];
                                            }
                                     }else{
                              j=XBYTE[0XC40D];
                              j=(j-1)*18;
                              for(i=0;i<18;i++){
                                       do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5122+i+j];
                                                 }
                                           }

                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;
            case 0x85: XBYTE[0XC410]=0XC5;       //阶段表
                       j=(idcode-1)*98;
                       for(i=0;i<98;i++){
                            if(i==4){
                                     do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5242+i+j]+1;
                                     }else{
                                     do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5242+i+j];
                                           }
                                         }
                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;
            case 0x86: do{}while(busy==0);XBYTE[0XC410]=0XC6;      //控制方案
                       j=(idcode-1)*41;
                       for(i=0;i<41;i++){
                            do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5e82+i+j];
                                        }
                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;
         //   case 0x87:break;
            case 0x88: do{}while(busy==0);XBYTE[0XC410]=0XC8;      //日计划
                       j=(idcode-1)*74;
                       for(i=0;i<74;i++){

                            do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x63A2+i+j];

                                        }
                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;
            case 0x89: do{}while(busy==0);XBYTE[0XC410]=0XC9;      //日计划
                       j=XBYTE[0XC40c];
                       j=(j-1)*6;
                       for(i=0;i<60;i++){
                                do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x6cE2+i+j];
                                        }
                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;
            case 0x8a:  ////////////////////////////////////////////
                       do{}while(busy==0);XBYTE[0XC410]=0XCa;            //当前控制信息
                       do{}while(busy==0);XBYTE[0XC411]=led82[0];        //当天日计划号
                       do{}while(busy==0);XBYTE[0XC412]=led82[1];        //当天时段号
                       do{}while(busy==0);XBYTE[0XC413]=led82[2];        //当前控制方案号
                       j=(led82[2]-1)*41;
                       j=0x5e85+j;
                       if(XBYTE[j]==0){
                                       do{}while(busy==0);XBYTE[0XC414]=0;    //非协调方案
                                       }else  {
                                              do{}while(busy==0);XBYTE[0XC414]=1;  //协调方案
                                              }
                       do{}while(busy==0);XBYTE[0XC408]=0;
                       break;
            case 0x8b: //阶段放行的相位

                       if((step_counter+1)==step_num){
                                    led83[6]=1;
                                     utemp=0x5244+(led83[0]-1)*98;
                                          }else{
                                    led83[6]=led83[1]+1;
                                    utemp=0x5247+(led83[0]-1)*98+step_counter*3;
                                                      }
                       led83[9]=XBYTE[utemp];
                       led83[10]=XBYTE[utemp+1];
                       do{}while(busy==0);XBYTE[0XC410]=0XCb;                //当前信号机状态
                       do{}while(busy==0);XBYTE[0XC411]=led83[0];            //当前控制方案附加信息 :当前阶段表号
                       do{}while(busy==0);XBYTE[0XC412]=led83[1];            //当前阶段
                       do{}while(busy==0);XBYTE[0XC413]=0x00;
                       do{}while(busy==0);XBYTE[0XC414]=0x00;
                       do{}while(busy==0);XBYTE[0XC415]=led83[4];            //当前阶段放行的相位
                       do{}while(busy==0);XBYTE[0XC416]=led83[5];            //当前阶段放行的相位
                       do{}while(busy==0);XBYTE[0XC417]=led83[6];            //下一阶段

⌨️ 快捷键说明

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