PCB光控打孔机第二版程序(一)

/*PCB机程序 XY同时启动 L9751 CODE61068 2018 6 19 08:00 固定位置释放吸盘*/
/*修正寻点第十二条结束调用计算坐标L5091,自动运行Y计算L6280 6281***/
/*** 开外部中断2关闭定时器2XY轴输出信号,自动运行循环检测外部中断高电平重启XY轴输出信号
增加寻点函数 手动赋值定时器0加减速计数器 程序编辑按START键运行起始动作 前进X电机不动
外中断复位 L6333 6396每块板占用300字节 添加外中断2 优化坐标数据显示***/
              #include       <reg52.h>
              #include       <intrins.h>
              #define        uchar    unsigned char
              #define        uint     unsigned int
              #define        ulong    unsigned long   //
              #define        EEPROM_START       310   //310字节开始存放XY值数据前300字节为当前动作存储数据
              #define        Ele_GearEEAdd    63000   //Z速度起始地址1234位置5678X电机位置9101112Y分子13141516Y分母 32字节
              #define        System_DataAdd   63033   //加速4 5 6 7 减速7 8 9 10 寻点11次数 增量12 12字节
              #define        Counter_DataAdd  63100   //计数器EEPROM起始地址  50条程序共50个字节
              #define        ProgNumber_Add   63155   //文件名保存EEPROM起始地址(高字节 低字节)X50=100字节
              #define        Number_Add       63260   //程序总数FRAM地址 1字节加    运行工号 1字节
              #define        FileName_Add     63300   //
              typedef        unsigned char BYTE;      //
              typedef        unsigned int WORD;
              sfr            INT_CLKO=0x8f;           //外部中断与时钟输出控制寄存器
              uchar          M_Speed,T_Speed;          //手动和编辑状态XY轴运动速度
              uchar          n1,n2;                      //显示缓冲
//uchar          Rst_Run;               //压脚中断定时器计数重启电机信号
              uint           aa,bb,a1,b1,a2;
              uint           Run_Data;                //
              uchar          Work_Counter;            //寻点失败计数器     走完寻点十二步计数器加一
              uchar          Prog_Num=0;              //文件名保存编号 计数器
              uchar          YSpeed;                  //Y轴电机速度
              uchar             Find_Counter;            //寻点标志计数器
              uchar          Find_data;               //寻点 次数
              long            AddVal;                  //寻点 增量
              uchar          Readya,Readyb;           //变量 备用1 备用2
              uchar          kcounter,kstatus;        //按键计数器 按键状态计数器
              uchar          ProgRead_Cursor;         //程序读入光标编号1-24
              uchar          EEY,EEZ;                 //EEPROM存储地址计算变量    EEY单件产品运行步数,EEZ工件编号
              uint           FileSave;                //文件名
              uint           Run_File;                //读出文件名名称
              uchar          Run_FileNum;             //读出运行文件名名称
              char           XCursor,YCursor;         //XY光标
              uint           Speed;                   //Z电机速度
              uint           Position;                //Z电机位置
              uint           XMtPParameter;           //X电机位置参数(上料动作)
              uint           YMtPParameter;           //Y电机位置参数(上料动作)    工件位置修正前进补偿
              uint           XMtSParameter;           //X电机速度参数(上料动作)
              uint           YMtSParameter;           //Y电机编辑前移停止
              uint           Down_Data;               //Z电机联动下降参数
              uint           Stop_Data;               //参数
              uint           XAddSpeed,YAddSpeed;     //Y电机加速
              uint           DecSpeed;                //Y电机减速
              uint           Up_Data;                 //电机上升缓冲
              uint           EditFun_Counter;         //程序编辑功能计数器     选择计数器 绝对运动 直线插补 测位跳转
              uchar          SysCursor;               //系统光标计数器
              uint           ProgSet_Counter;         //程序设置计数器
              uchar             Run_Counter;             //运行计数器
              uchar          Counter_Key;             //按键记录计数器
              uint           Prog_Number;             //程序编号
              uint           Frequency;               //频率
              uchar          Prog_LineNum;            //编程程序行号
              uint           RunLineNum;              //运行程序行号
              uchar          Speed_Data;              //速度百分比
              uint           Frequency;               //频率HZ
              sbit           EX_INT0=P3^2;            //PIN    29 外中断0
              sbit           EX_INT1=P3^3;            //PIN    30 外中断1
              sbit           EX_INT2=P3^6;            //PIN    35 外中断2
              sbit           EX_INT3=P3^7;            //PIN    36 外中断3
              sbit           cd=P7^7;                 //PIN    56
              sbit           ce=P4^5;                 //PIN    57
              sbit           rst=P4^6;                //PIN    58
              sbit           wr=P7^6;                 //PIN    55
              sbit           rd=P7^5;                 //PIN    54
              sbit           fs=P6^0;                 //PIN    5
              sbit           OUT1=P2^7;               //PIN    52    按键总线例
              sbit           OUT2=P7^4;               //PIN    53
              sbit           OUT3=P5^2;               //PIN    64
              sbit           OUT4=P5^3;               //PIN    1
              sbit           IN1=P2^4;                //PIN49    按键总线横
              sbit           IN2=P2^5;                //PIN50
              sbit           IN3=P2^6;                //PIN51
              sbit           IN4=P6^1;                //PIN6
              sbit           IN5=P6^2;                //PIN7
              sbit           IN6=P6^3;                //PIN8
              sbit           IN7=P5^5;                //PIN20
              sbit           INSERT=P3^2;               //停止  STOP
              sbit           STOP=P3^3;             //插入  INSERT
              sbit           CP1=P2^2;                //PIN47
              sbit           DIR1=P2^3;               //PIN48
              sbit           EN1=P7^2;                //PIN39
              sbit           CP2=P2^1;                //PIN46
              sbit           DIR2=P7^1;               //PIN38
              sbit           EN2=P7^0;                //PIN37
              sbit           CP3=P3^5;                //PIN34  P3^5;
              sbit           DIR3=P5^1;               //PIN33  P5^1;
              sbit           EN3=P4^0;                //PIN22  P4^0;
              sbit           INTPUT0=P2^0;            //PIN45
              sbit           INTPUT1=P4^4;            //PIN44
              sbit           INTPUT2=P4^3;            //PIN43
              sbit           INTPUT3=P4^2;            //PIN42
              sbit           INTPUT4=P4^1;            //PIN41
              sbit           INTPUT5=P7^3;            //PIN40
              sbit           INTPUT6=P3^7;            //PIN36
              sbit           INTPUT7=P3^6;            //PIN35
              sbit           OUTPUT0=P1^0;            //PIN9吸盘
              sbit           OUTPUT1=P1^1;            //PIN10夹具
              sbit           GREEN=P4^7;              //PIN11
              sbit           RED=P1^2;                //PIN12
              sbit           BUZZ=P6^6;               //PIN25
              sbit           OUTPUT5=P6^5;            //PIN24  6.5 1.1
              //sbit           OUTPUT6=P6^6;          //PIN25
              sbit           SCL=P1^7;                //PIN17 外部EEPROM       24C64PIN6  外部引脚设置开漏
              sbit           SDA=P5^4;                //PIN18 外部EEPROM       24C64PIN5
              uint           i,j,k,l,m,n;             //显示存储缓冲
              uint           Key_val;                 //按键值个位存储缓冲
              ulong          B_Data;                  //个位
              ulong          T_Data;                  //十位
              ulong          H_Data;                  //百位
              ulong          K_Data;                  //千位
              ulong          TK_Data;                 //万位
              ulong          M_Data;                  //十万位
              ulong          Chuang_Buff;             //转换缓冲
              ulong          XMemory,YMemory;         //临时缓冲数据
              bit            ManuSet_Flag;            //手动设定运行标志
              bit            ManuFast_Flag;           //手动高速反显标志
              bit            JogOperating_Flag;       //点动操作反显标志
              bit            JogOperatSet_Flag;       //点动操作设定标志
              bit            ProgAdmin_Flag;          //程序管理循环检测标志
              bit            ProgEdit_Flag;           //程序编辑循环检测标志
              bit            ProgRead_Flag;           //程序读入循环检测标志
              bit            ProgSave_Flag;           //程序保存循环检测标志
              bit            ProgSaveas_Flag;         //程序另存循环检测标志
              bit            DataSet_Flag;            //参数设置循环检测标志
              bit            SystemDataSet_Flag;      //系统参数设置循环检测标志
              bit            SystemSeifTest_Flag;     //系统自检循环检测标志
              bit            SystemSet_Flag;          //系统数据设置循环检测标志   分子分母最高时间点位起速
              bit            IOSet_Flag;              //IO设置循环检测标志
              bit            XPosiNegate_Flag;        //X值正负标志
              bit            YPosiNegate_Flag;        //Y值正负标志
              bit            AUTO_FLAG;               //自动运行标志
              bit            MOTARUN_FLAG;            //定时器电机A运行标志
              bit            MOTBRUN_FLAG;            //定时器电机B运行标志
              bit            ManuMTARUN_FLAG;         //手动定时器电机A运行标志
              bit            ManuMTBRUN_FLAG;         //手动定时器电机B运行标志
              bit            Factor_FLAG;             //厂值循环运行标志
              bit            X_AddDecFlag;            //手动左移右移加减标志
              bit            Y_AddDecFlag;            //手动前进后退加减标志
              bit            RUN;                     //启动定时器运行标志 任意一定时器启动开RUN,两定时器结束关RUN
              bit            Page_Flag;               //系统数据设置换页循环标志
              bit            Page2Read_Flag;          //程序读出第二页循环标志
              bit            Stop_Flag;               //自动运行停机段循环标志
              bit            Down_Flag;               //XY轴启动Z轴联动循环标志,运行完下降距离标志位置零
              bit            AUTO_STOPFLAG;           //自动暂停运行标志
              bit            PressFoot_Flag;           //压脚中断信号  外部压脚中断 置一 定时器2和外部打孔中断复位
              bit            PastShooting_Flag;       //
              bit            INT1_Flag;               //外中断1标志,自动暂停,返回检测START,ESC退出主程序。
              uint           DownData;                //下降距离    缓冲器
              #define        dataport P0              //P0为LCD数据口
              uchar          counter;                 //按键计数器
              ulong          D_Data;                  //点动输入值
              ulong          Buff_Data;               //缓冲处理变量
              ulong          XBuff_Data;              //X缓冲处理变量
              ulong          YBuff_Data;              //Y缓冲处理变量
              long           FindData;                //寻点运行值
              long           X_FData,Y_FData;         //XY寻点运算结果
              long           X_Data,Y_Data;           //XY当前值
              long           X_RunData,Y_RunData;     //XY定时器运行值
              long           XRun_Data;               //X设定值
              long           YRun_Data;               //Y设定值
              long           DRun_Data;               //点动运行值
              long           vala,valb;               //实际位置与设定位置差,
              sbit           Rom_CS=P1^4;             /*1字库IC接口定义Rom_CS就是字库IC的CS#*/
              sbit           Rom_SCK=P1^6;            /*2字库IC接口定义:Rom_SCK就是字库IC的SCK*/
              sbit           Rom_OUT=P1^3;            /*字库IC接口定义:Rom_OUT就是字库IC的OUT*/
              sbit           Rom_IN=P1^5;             /*字库IC接口定义:Rom_IN就是字库IC的IN*/
              uchar          fontbuff[32];            //字库中读出的32位数据存放缓冲数组单元
              uchar          newbuff[32];             //字库中读出的32位数据转换缓冲存储
              bdata          char com_data;           /********/
              sbit           mos_bit=com_data^7;      /****高位****/
              sbit           low_bit=com_data^0;      /****低位****/
              void           display_manufast(void);
              void           jog_operating(void);
              void           Dis_ZMtSpeed(void);      //正显Z电机速度参数
              void           Dis_ZMtPosition(void);   //正显Z电机位置参数  
              void           Dis_XMtPosition(void);   //正显X电机位置参数  
              void           Dis_XMtPParameter(void); //正显X电机位置参数  
              void           Dis_YMtPParameter(void); //显示Y电机位置参数
              void           Dis_YMT_Speed(void);     //显示Y电机速度参数
              void           Dis_SParameter(void);    //显示起速参数
              void           Dis_ZMTDown(uint);       //
              void           Dis_XMTStop(void);       //X电机停止参数
              void           Negate_XMTStop(void);    //反显X电机停止参数
              void           Negate_ZMtSpeed(void);   //反显Z电机速度参数
              void           Negate_ZMtPosition(void);//反显Z电机位置参数
              void           Negate_XMtPParameter(void);//反显X电机位置参数
              void           Negate_YMtPParameter(void);//反显Y电机位置参数
              void           Negate_HParameter(void); //最高参数闪烁
              void           Negate_SParameter(void); //起速参数闪烁
              void           Negate_ZMTDown(void);    //参数闪烁
              void           Change_FourData(uint ss); //四位数转换个十百千
              void           Display_c(void);           //程序编辑计数器界面显示
              void           NegateDis_Factor_Value(void); //
              void           NegateDis_System(void);       //
              void           Dis_X_AddSpeed(void);         //
              void           Negate_X_AddSpeed(void);      //
              void           Dis_Y_AddSpeed(void);         //
              void           Negate_Y_AddSpeed(void);      //
              void           Dis_Find_Data(void);          //
              void           Negate_Find_Data(void);       //
              void           Dis_Add_Data(void);           //
              void           Negate_Add_Data(void);        //
              void           display_manusmart(void);      //
              void           RstKey(void);                 //按键计数器状态寄存器归零
              void           LowVoltKey(void);             //按键低电平检测
              void           HighVoltKey(void);            //按键高电平检测
              void           DisFileName(uchar X1,Y1);       //
              void           Dis_Counter(void);               //
              void           ReadCounter_Data(void);       //
              void           TestK2(void);                   //
              uchar          ReadRunCounter_Data(uchar m); //
              uint           ReadProg_Name(uchar s);
              uchar          code Clearbuff[32]={
              0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
              0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
              0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
              0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
              };
              int      code fontadd[32]={0,8,1,9,2,10,3,11,          //竖置横排转横置横排点阵排列表
                           4,12,5,13,6,14,7,15,
                           16,24,17,25,18,26,19,27,
                           20,28,21,29,22,30,23,31};
int      code xsadd[38]={0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240,256,272,288,304, //0-9清除XY.TPF%
      320,336,352,368,384,400,416,432,448,464,480,496,512,528,544,560,576,592};//0-9首地址 每字16字节
uchar code tab0[618]={
0X00,0X3C,0X42,0X42,0X42,0X42,0X42,0X42,
0X42,0X42,0X42,0X42,0X42,0X42,0X3C,0X00,//0
0X00,0X30,0X50,0X10,0X10,0X10,0X10,0X10,
0X10,0X10,0X10,0X10,0X10,0X10,0X38,0X00,//1
0X00,0X3C,0X42,0X02,0X02,0X02,0X04,0X08,
0X10,0X20,0X20,0X40,0X40,0X42,0X7E,0X00,//2
0X00,0X3C,0X42,0X02,0X02,0X02,0X02,0X3C,
0X02,0X02,0X02,0X02,0X02,0X42,0X3C,0X00,//3
0X00,0X0C,0X14,0X24,0X24,0X44,0X44,0X84,
0X84,0XFE,0X04,0X04,0X04,0X04,0X04,0X00,//4
0X00,0X7E,0X40,0X40,0X40,0X40,0X7C,0X02,
0X02,0X02,0X02,0X02,0X42,0X42,0X3C,0X00,//5
0X00,0X3C,0X42,0X40,0X40,0X40,0X7C,0X42,
0X42,0X42,0X42,0X42,0X42,0X42,0X3C,0X00,//6
0X00,0X3E,0X42,0X04,0X04,0X08,0X08,0X10,
0X10,0X10,0X10,0X10,0X10,0X10,0X10,0X00,//7
0X00,0X3C,0X42,0X42,0X42,0X42,0X42,0X3C,
0X42,0X42,0X42,0X42,0X42,0X42,0X3C,0X00,//8
0X00,0X3C,0X42,0X42,0X42,0X42,0X42,0X3C,
0X02,0X02,0X02,0X02,0X02,0X42,0X3C,0X00,//9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"清除"
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*10,*/    
0X00,0X00,0X42,0X42,0X24,0X24,0X18,0X18,//X
0X18,0X18,0X24,0X24,0X42,0X42,0X00,0X00,//11
0X00,0X00,0X41,0X41,0X22,0X14,0X08,0X08,//Y
0X08,0X08,0X08,0X08,0X08,0X08,0X00,0X00,//12
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,// .    
0X00,0X00,0X00,0X00,0X00,0X60,0X60,0X00,//13
0X00,0X3C,0X42,0X42,0X40,0X40,0X40,0X3C,//S
0X02,0X02,0X02,0X02,0X42,0X42,0X3C,0X00,//14    
0X00,0X7F,0X08,0X08,0X08,0X08,0X08,0X08,//T      
0X08,0X08,0X08,0X08,0X08,0X08,0X08,0X08,//15
0X00,0X7C,0X42,0X42,0X42,0X42,0X7C,0X40,//P       
0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X00,//16
0X00,0X7E,0X40,0X40,0X40,0X40,0X7C,0X40,//F       
0X40,0X40,0X40,0X40,0X40,0X40,0X40,0X00,//17
0X00,0X22,0X52,0X52,0X24,0X04,0X08,0X08,//%       
0X10,0X10,0X20,0X24,0X4A,0X4A,0X44,0X00,//18
0X00,0X42,0X42,0X62,0X62,0X52,0X52,0X4A,//N       
0X4A,0X46,0X46,0X42,0X42,0X42,0X42,0X00,//19
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,//填充
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF, //    20
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//清除光标
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//21
0X00,0X40,0X40,0X40,0X40,0X40,0X40,0X40,//L
0X40,0X40,0X40,0X40,0X40,0X40,0X7E,0X00,//22
0X00,0X00,0X00,0X00,0X00,0X5C,0X62,0X42,//n
0X42,0X42,0X42,0X42,0X42,0X42,0X42,0X00,//23
0X00,0X1C,0X08,0X08,0X08,0X08,0X08,0X08,//I
0X08,0X08,0X08,0X08,0X08,0X08,0X1C,0X08,//24
0X00,0X02,0X02,0X02,0X04,0X04,0X08,0X08,//斜杠/
0X10,0X10,0X20,0X20,0X40,0X40,0X40,0X00,//25
0X00,0X7F,0X7F,0X60,0X60,0X60,0X60,0X60,//方框左部
0X60,0X60,0X60,0X60,0X60,0X7F,0X7F,0X00,//26
0X00,0XFE,0XFE,0X06,0X06,0X06,0X06,0X06,//方框右部
0X06,0X06,0X06,0X06,0X06,0XFE,0XFE,0X00,//27
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//:分号
0X00,0X00,0X60,0X60,0X00,0X60,0X60,0X00,//28
0X00,0X7F,0X7F,0X60,0X6F,0X6F,0X6F,0X6F,//方框加点左部
0X6F,0X6F,0X6F,0X6F,0X00,0X7F,0X7F,0X00,//29
0X00,0XFE,0XFE,0X06,0XF6,0XF6,0XF6,0XF6,//方框加点右部
0XF6,0XF6,0XF6,0XF6,0X06,0XFE,0XFE,0X00,//30
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,//-左部
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//31
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFC,//-右部
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//32
0X00,0X00,0X07,0X08,0X10,0X20,0X20,0X20,//空心圆左部
0X20,0X20,0X20,0X10,0X08,0X07,0X00,0X00,//33
0X00,0X00,0XE0,0X10,0X08,0X04,0X04,0X04,//空心圆右部
0X04,0X04,0X04,0X08,0X10,0XE0,0X00,0X00,//34
0X00,0X00,0X07,0X0F,0X1F,0X3F,0X3F,0X3F,//实心圆左部
0X3F,0X3F,0X3F,0X1F,0X0F,0X07,0X00,0X00,//35
0X00,0X00,0XE0,0XF0,0XF8,0XFC,0XFC,0XFC,//实心圆右部
0XFC,0XFC,0XFC,0XF8,0XF0,0XE0,0X00,0X00,//36
0X00,0X00,0X00,0X00,0X00,0X49,0X2A,0X1C,//*
0X08,0X1C,0X2A,0X49,0X00,0X00,0X00,0X00//37
};
uchar code tab1[32]={
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,//-
0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,//0
0X00,0X00,0X7E,0X42,0X04,0X04,0X08,0X08,//Z
0X10,0X10,0X20,0X20,0X42,0X7E,0X00,0X00 //1
};
/*------------延时子程序---------------------*/
              void delay(unsigned int t)
              {  
              unsigned int i;
              for(i=0;i<t;i++)
              {}
              }
/**************************************/
               void start()
               {
               SDA=1;
               SCL=1;
               SDA=0;
               SCL=0;
               }
/***************************************/
               void stop()
               {
               SDA=0;
               SCL=1;
               SDA=1;
               }
/***************************************/
               void ack()
               {
               SCL=1;
               SCL=0;
               }
/***************************************/
               void shift8(char a)
               {
               data uchar i;
               com_data=a;
                for(i=0;i<8;i++)
                {
                SDA=mos_bit;
                SCL=1;
                SCL=0;
                com_data=com_data*2;
                }
               }
/***************************************/
               uchar rd_24C64(uint a)
               {
               uint addh,addl;
               data uint i,command;
               addl=a;
               addh=a>>8;
               SDA=1;
               SCL=0;
               start();
               command=160;
               shift8(command);                            /*****写入160*****/
               ack();                                        
               shift8(addh);                               /*****写高八位地址addh 高三位无效*****/
               ack();
               shift8(addl);                               /*****写入低八位地址 addl*****/
               ack();
               start();
               command=161;
               shift8(command);                            /*****写入161*****/
               ack();
               SDA=1;
               for(i=0;i<8;i++)
                {
                 com_data=com_data*2;
                 SCL=1;
                 low_bit=SDA;
                 SCL=0;
                }
               stop();
               return(com_data);
              }
/***************************************/
               void wr_24C64(uint a,char b)      //a地址 b数据
               {
               uint addh,addl;
               data uint command;
               addl=a;
               addh=a>>8;
               _nop_();
               SDA=1;
               SCL=0;
               start();
               command=160;
               shift8(command);                            /*****写入160*****/
               ack();                                        
               shift8(addh);                               /*****写高八位地址addh 高三位无效*****/
               ack();
               shift8(addl);                               /*****写入低八位地址 addl*****/
               ack();
               shift8(b);                                  /*****写入 b *****/
               ack();
               stop();
               _nop_();
               }
/************延时函数****************/
              void delay_nms(unsigned int n)
              {
              unsigned int i,j;
              for(i=n;i>0;i--)
              {
               for(j=2000;j>0;j--)
               {
               }
              }
              }
/***状态检查函数*指令,数据读写状态检查**/
              void Lcd_Busy()
              {
              uchar dat;
               do
               {
               dataport=0xff;
               ce=0;  
               cd=1;  
               wr=1;  
               rd=0;  
               dat=dataport;
               rd=1;    
               dat=0x03&dat;//STA0,STA1是否准备好
              }
              while(dat!=0x03);
              }
/*******数据自动写状态检查*****************/
              void autowcheck()
              {
              uchar dat;
               do
               {
               dataport=0xff;
               ce=0;    
               cd=1;    
               wr=1;    
               rd=0;    
               dat=dataport;
               rd=1;    
               dat=0x08&dat;//STA3是否准备好
              }
              while(dat==0x00);
              }
/*------输入/出函数,与T6963通讯------------------------------------------------*/
// 向数据口发Data
              void wr_data(uchar dat)
              {  
              ce=0;
              cd=0;      nop_();_nop_();_nop_();
              dataport=dat;
              wr=0;          
              wr=1;           
              }
/*****写有1个参数命令***********/
              void wr_com1(uchar command)
              {
              Lcd_Busy();
              cd=1;        
              ce=0;    
              rd=1;        
              dataport=command;
              wr=0;        
              wr=1;        
              }
/******写有 3 个参数命令*******************/
              void wr_com3(uchar data1, uchar data2, uchar command)
              {
              Lcd_Busy();
              wr_data(data1);
              Lcd_Busy();
              wr_data(data2);    
              wr_com1(command);
              }
/*--------------------------------*/
              void lcd_address(uchar urow,uchar ucol)    //urow 为1---30(240/8=30),,ucol为1---64
              {
              uint ipos;
              uchar urow1;
              uchar ucol1;
              urow1=urow-1;     //    1---30
              ucol1=ucol-1;     //    1---64
              ipos=ucol1*30+urow1;
              wr_com3(ipos&0xff,0x08+ipos/256,0x24);
              }   L0496

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/597420.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

node安装

1. node.js是用来干什么的&#xff1f; 简单来说&#xff0c;Node.js 是一个多功能的 JavaScript 运行环境&#xff0c;就像jdk是java的运行环境一样&#xff0c;不过node还提供了类似于tomcat一样的服务器功能&#xff0c;可以像后端一样运行起来拥有单独的地址和端口。 1.1…

Skywalking的重要功能详解

学习本篇文章之前首先要了解一下Sky walking的基础知识 分布式链路追踪工具Sky walking详解 一&#xff0c;Sky walking监控数据库 在admin服务中&#xff0c;连接数据库查询user表中所有数据 引入依赖 <dependency><groupId>mysql</groupId><artifactI…

Redis高级(Redis持久化,Redis主从模式,Redis哨兵模式,Redis分片集群)

目录 一、单机Redis 1. 问题说明 2. 安装Redis 1 解压安装Redis【备用】 2 配置Redis 3 启动Redis 3. 小结 二、Redis持久化 1. 持久化机制介绍 2. RDB模式 3. AOF模式 4. RDB和AOF对比 5. 小结 三、Redis主从模式 1. 介绍 2. 搭建Redis主从架构【备用】 3. 主…

软件测试与管理:黑盒测试-判定表驱动法

知识思维导图&#xff1a; 例题1&#xff1a;运用判定表驱动法设计测试用例。 某学生成绩管理系统&#xff0c;要求对“平均成绩在90分以上&#xff0c;且没有不及格科目的学生&#xff0c;或班级成绩排名在前5的学生&#xff0c;在程序中将学生的姓名用红色标识”&#xff0c;…

【前端】HTML实现个人简历信息展示页面

文章目录 前言一、 综合案例&#xff1a;个人简历信息展示页面 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及CSS、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&#xff1a; Web前端学习专栏 下面我…

Python | Leetcode Python题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m, n len(matrix), len(matrix[0])flag_col0 Falsefor i in range(m):if matrix[i][0] 0:flag_col0 Truefor j in range(1, n):if matrix[i][j] 0:matrix[i]…

实时音视频通信的主要矛盾及解决方法

实时音视频通信的主要矛盾及解决方法 实时音视频通信的主要矛盾及解决方法实时音视频通信的主要矛盾矛盾的解决方法增加带宽减少数据量适当增加延时提高网络质量快速准确地评估带宽 总结参考 实时音视频通信的主要矛盾及解决方法 实时音视频通信的主要矛盾 实时音视频通信的主…

工厂模式+策略模式完成多种登录模式的实现

前提 &#xff08;简单工厂不属于设计模式&#xff0c;而是一种编程思想【抽象一层出来】&#xff09;工厂方法模式、抽象工厂模式 以上都是为了解耦&#xff0c;如果考虑多个纬度&#xff08;如需要同时考虑多种电器&#xff0c;多种品牌&#xff09;则优先考虑抽象工厂。 …

公网tcp转流

之前做过几次公网推流的尝试, 今天试了UDP推到公网, 再用TCP从公网拉下来, 发现不行, 就直接改用TCP转TCP了. 中间中转使用的python脚本, 感谢GPT提供技术支持: import socket import threadingdef tcp_receiver(port, forward_queue):"""接收TCP数据并将其放入…

Liunx磁盘管理(下)

中篇&#xff1a;https://blog.csdn.net/Lzcsfg/article/details/138355036 一.逻辑卷 逻辑卷&#xff08;Logical Volume&#xff09;是逻辑卷管理 (LVM) 中的一个概念&#xff0c;它为 Linux 系统中的存储管理提供了更大的灵活性和可扩展性。LVM 允许你将物理存储设备&…

用js代码实现贪吃蛇小游戏

js已经学了大部分了&#xff0c;现在就利用我所学的js知识试试做贪吃蛇小游戏吧 以下部分相关图片以及思路笔记均出自渡一陈老师的视频 首先制作简单的静态页面&#xff0c;添加贪吃蛇移动的背景和相关图片&#xff0c;比如开始游戏等等 将各个功能均封装在函数中&#xff0…

multipass launch失败:Could not generate a new UUID vboxmanage添加环境变量path

C:\WINDOWS\system32>multipass launch [2024-05-06T15:48:54.320] [error] [relished-jerboa] Could not unregister VM: Process failed to start: 系统找不到指定的文件。 launch failed: Could not generate a new UUID: Process failed to start: 系统找不到指定的文件…

服务攻防-数据库安全RedisCouchDBH2database未授权访问CVE漏洞

#知识点&#xff1a; 1、数据库-Redis-未授权RCE&CVE 2、数据库-Couchdb-未授权RCE&CVE 3、数据库-H2database-未授权RCE&CVE#章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数…

Chat2DB Pro 重磅发布 !!!

在过去的几个月中&#xff0c;我们的团队一直默默耕耘&#xff0c;全心投入到Chat2DB Pro版本的开发之中。这段时间里&#xff0c;我们暂停了新动态的发布&#xff0c;以至于有趣的误解在社群中出现&#xff0c;有人调侃我们是否“倒闭”了。然而&#xff0c;我们今天携带着全新…

C++ | Leetcode C++题解之第71题简化路径

题目&#xff1a; 题解&#xff1a; class Solution { public:string simplifyPath(string path) {auto split [](const string& s, char delim) -> vector<string> {vector<string> ans;string cur;for (char ch: s) {if (ch delim) {ans.push_back(mov…

Docker——consul的容器服务更新与发现

一、什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的&#xff0c;不保障高可用性&#xff0c;也不考虑服务的压力承载&#xff0c;服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&#xff0c;起初的解决手段…

密码学《图解密码技术》 记录学习 第十五章

目录 十五章 15.1本章学习的内容 15.2 密码技术小结 15.2.1 密码学家的工具箱 15.2.2 密码与认证 15.2.3 密码技术的框架化 15.2.4 密码技术与压缩技术 15.3 虚拟货币——比特币 15.3.1 什么是比特币 15.3.2 P2P 网络 15.3.3地址 15.3.4 钱包 15.3.5 区块链 15.3.…

力扣每日一题114:二叉树展开为链表

题目 中等 提示 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同…

JavaScript基础(五)

三目运算符 用于判断并赋值 语法: 判断条件?条件成立执行语句:条件不成立执行语句; (条件&#xff1f;"true":"false";) 例: <script> var age prompt(请输入年龄) var name (age>18)?"已成年":"未成年禁止登录" a…

Spring与AI结合-spring boot3整合AI组件

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 spring ai简介 单独整合al接口 整合Spring AI组件 起步条件 ​编辑 进行必要配置 写在最后 写在前面 本文介绍了springboot开发后端服务中&#xff0c;AI组件(Spring A…
最新文章