读字库写FM24C04

/*PCB机板增加读写24C64函数PAST   2017 12 26 08:10 CODE 7382*/
/*按11键进入手动选择,按12键进入参数设定界面
按1存1 2存2 3存3 15存0 16存1236  17读EEPROM显示正确
                L1008  13775061792 ******/
              #include       <reg52.h>
              #include       <intrins.h>
              #include       <stdlib.h>
              #include       <stdio.h>
              #define        uchar unsigned char
              #define        uint unsigned int
              typedef        unsigned char BYTE;
              typedef        unsigned int WORD;
              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           STOP=P3^3;           //    停止
              sbit           INSERT=P3^2;       //    插入
              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
              sbit           DIR3=P5^1;           //    PIN33
              sbit           EN3=P4^0;           //    PIN22
              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           SCL=P1^7;           //    PIN17 外部EEPROM       24C64PIN6
              sbit           SDA=P5^4;           //    PIN18 外部EEPROM       24C64PIN5
              #define        dataport P0  //P0为数据口
              uint           counter,val,vals;
              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*/
              #define        ulong unsigned long
              uchar          fontbuff[32];       //字库中读出的数据存放缓冲数组单元
              uchar          newbuff[32];        //将字库中读出的数据进行转换
              bdata          char com_data;                           /********/
              sbit           mos_bit=com_data^7;                      /****高位****/
              sbit           low_bit=com_data^0;                      /****低位****/
              uchar          code Testbuff[32]={
              0X07,0X04,0X04,0X04,0X07,0X04,0X04,0X04,
              0XF0,0X10,0X10,0X10,0XF0,0X10,0X10,0X10,
              0X07,0X04,0X08,0X08,0X10,0X20,0X40,0X00,
              0XF0,0X10,0X10,0X10,0X10,0X10,0X50,0X20
              };
              uint     counter;
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[15]={0,16,32,48,64,80,96,112,128,144,160,176,192,208,224};  //0-9首地址 每字64字节
uchar code tab0[240]={
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,/*"清除",*/
0X00,0X00,0X42,0X42,0X24,0X24,0X18,0X18,
0X18,0X18,0X24,0X24,0X42,0X42,0X00,0X00,//X
0X00,0X00,0X41,0X41,0X22,0X14,0X08,0X08,
0X08,0X08,0X08,0X08,0X08,0X08,0X00,0X00,//Y
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X60,0X60,0X00,//.
0X00,0X3C,0X42,0X42,0X40,0X40,0X40,0X3C,
0X02,0X02,0X02,0X02,0X42,0X42,0X3C,0X00    //S 14
};
/*------------延时子程序---------------------*/
              void delay(unsigned int t)
              {  
              unsigned int i,j;
              for(i=0;i<t;i++)
              for(j=0;j<100;j++);
              }
/**************************************/
               void start()
               {
               SDA=1;_nop_();_nop_();_nop_();_nop_();
               SCL=1;_nop_();_nop_();_nop_();_nop_();
               SDA=0;_nop_();_nop_();_nop_();_nop_();
               SCL=0;_nop_();_nop_();_nop_();_nop_();
               }
/***************************************/
               void stop()
               {
               SDA=0;_nop_();_nop_();_nop_();_nop_();
               SCL=1;_nop_();_nop_();_nop_();_nop_();
               SDA=1;_nop_();_nop_();_nop_();_nop_();
               }
/***************************************/
               void ack()
               {
               SCL=1;_nop_();_nop_();_nop_();_nop_();
               SCL=0;_nop_();_nop_();_nop_();_nop_();
               }
/***************************************/
               void shift8(char a)
               {
               data uchar i;
               com_data=a;
                for(i=0;i<8;i++)
                {
                SDA=mos_bit;
                SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                com_data=com_data*2;
                }
               }
/***************************************/
               void delay_iic(int v)
               {
               int i,j;
               for(i=1;i<v;i++)
               {
                for(j=0;j<50;j++)
                {
                 _nop_();
                }
                }
               }
/***************************************/
               uchar rd_24C64(char a)
               {
               data uint i,command;
               SDA=1;_nop_();_nop_();_nop_();_nop_();
               SCL=0;_nop_();_nop_();_nop_();_nop_();
               start();
               command=160;
               shift8(command);                            /*****写入160*****/
               ack();                                        
               shift8(0X0F);                               /*****写高八位地址 高三位无效*****/
               ack();
               shift8(a);                                   //
               ack();
               start();
               command=161;
               shift8(command);                            /*****写入161*****/
               ack();
               SDA=1;_nop_();_nop_();_nop_();_nop_();
               for(i=0;i<8;i++)
                {
                 com_data=com_data*2;
                 SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                 low_bit=SDA;
                 SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
                }
               stop();
               return(com_data);
              }
/***************************************/
               void wr_24C64(char a,char b)      //a地址 b数据
               {
               data uint command;
               _nop_();_nop_();_nop_();_nop_();_nop_();
               SDA=1;_nop_();_nop_();_nop_();_nop_();
               SCL=0;_nop_();_nop_();_nop_();_nop_();
               start();
               command=160;
               shift8(command);                             /*****写入160*****/
               ack();                                        
               shift8(0X0F);                                /*****写高八位地址 高三位无效*****/
               ack();
               shift8(a);                                   /*****写入低八位地址 a *****/
               ack();
               shift8(b);                                   /*****写入 b *****/
               ack();
               stop();
               _nop_();_nop_();_nop_();_nop_();_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;  
              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);
              }
/************清屏*******************/
              void ClearScreen()
              {
              unsigned int i;
              wr_com3(0x00,0x00,0x24); //设置指针地址0000H
              wr_com1(0xb0); //设置自动写状态
               for(i=0;i<9600;i++)      //320X240/8=9600
               {
               autowcheck();
               wr_data(0x00);
               }
              wr_com1(0xb2); // 自动写结束
              }
/**********初始化LCD****************/
              void InitLCD()
              {
              cd=1;
              wr=1;
              rd=1;
              wr_com3(0x00,0x00,0x40); //设置文本显示区域首地址GraphAddr
              wr_com3(0x1e,0x00,0x41); //设置文本显示区域宽度:1eH  1 1110 16+8+4+2=30
              wr_com3(0x00,0x08,0x42); //设置图形显示区域首地址GraphAddr
              wr_com3(0x1e,0x00,0x43); //设置图形显示区域宽度:1eH
              wr_com1(0XA0);           //设置显示方式: CGROM方式 文本\图形 "或"
              wr_com1(0X80);           //设置显示方式: CGROM方式 文本\图形 "或"
              wr_com1(0X9C);           //显示开关设置,开文本和图形显示*/
              ClearScreen();
              }
/*显示字库处理汉字字符表汉字点阵代码*/
              void display_chines_16x16(uchar urow,uchar ucol,uchar *dp)
              {
              uchar i,j,K;
              K=0;
               for(j=0;j<16;j++)
               {
               lcd_address(urow,ucol+j);
               wr_com1(0xb0); //设置自动写状态
                for(i=0;i<2;i++)
                {    
                autowcheck();  /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/
                wr_data(*(dp+fontadd[K]));
                K++;
                }
               wr_com1(0xb2); // 自动写结束
               }
              }
/********************************/
              void display_graphic_16x8(uchar urow,uchar ucol,int mm,uchar *dp)
              {
              uchar j;
               for(j=0;j<16;j++)
               {
               lcd_address(urow,ucol+j);
               wr_com1(0xb0); //设置自动写状态
               autowcheck();  /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/
               wr_data(*(dp+mm));
               dp++;
               wr_com1(0xb2); // 自动写结束
               }
              }
/*反码显示字库处理汉字字符表汉字点阵代码*/
              void display_negate_16x16(uchar urow,uchar ucol,uchar *dp)
              {
              uchar i,j,K;
              K=0;
               for(j=0;j<16;j++)
               {
               lcd_address(urow,ucol+j);
               wr_com1(0xb0); //设置自动写状态
                for(i=0;i<2;i++)
                {    
                autowcheck();  /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/
                wr_data(~*(dp+fontadd[K]));
                K++;
                }
               wr_com1(0xb2); // 自动写结束
               }
              }
/***********字库芯片程序*************************/
/***********送指令到字库IC***********************/
              void send_command_to_ROM( uchar datu )
              {
             uchar i;
              for(i=0;i<8;i++)
              {
              if(datu&0x80)
              Rom_IN=1;
              else
              Rom_IN=0;
              datu=datu<<1;
              Rom_SCK=0;
              Rom_SCK=1;
              }
              }
/*****(从字库IC中取汉字或字符数据(1个字节****/
              static uchar ROMDATA( )
              {
               uchar i;
               uchar ret_data=0;
               Rom_SCK=1;
               for(i=0;i<8;i++)
               {
               Rom_OUT=1;
               delay(1);
               Rom_SCK=0;
               ret_data=ret_data<<1;
               if( Rom_OUT )
               ret_data=ret_data+1;
               else
               ret_data=ret_data+0;
               Rom_SCK=1;
               }
              return(ret_data);
              }
/*从相关地址High地址高字节Mid地址中字节Low地址低字节中连续读出DataLen个字节的数据到 pBuff的地址*/
              void BytesDataFromROM(uchar ADHigh,ADMid, ADLow,DataLen,uchar *pBuff)
              {
              uchar i;
              Rom_CS = 0;
              Rom_SCK=0;
              send_command_to_ROM(0x03);
              send_command_to_ROM(ADHigh);
              send_command_to_ROM(ADMid);
              send_command_to_ROM(ADLow);
              for(i=0;i<DataLen;i++ )
              *(pBuff+i)=ROMDATA();
              Rom_CS=1;
              }
/******************************************************************/
              ulong  fontaddr=0;
              void displayGB2312(uchar MSB,uchar LSB)
              {
              uchar i= 0;
              uchar addrHigh,addrMid,addrLow ;
              if(((MSB>=0xb0) &&(MSB<=0xf7))&&(LSB>=0xa1))
              {                        
/*国标简体(GB2312)汉字在字库IC中的地址由以下公式来计算:*/
/*Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/
/*由于担心8位单片机有乘法溢出问题,所以分三部取地址*/
              fontaddr = (MSB-0xb0)*94;
              fontaddr += (LSB-0xa1)+846;
              fontaddr = (ulong)(fontaddr*32);
              addrHigh = (fontaddr&0xff0000)>>16;  /*地址的高8位,共24位*/
              addrMid = (fontaddr&0xff00)>>8;      /*地址的中8位,共24位*/
              addrLow = fontaddr&0xff;        /*地址的低8位,共24位*/
              BytesDataFromROM(addrHigh,addrMid,addrLow,32,fontbuff);/*取32个字节的数据,存到"fontbuf[32]"*/
              i+=2;
              }
              else if(((MSB>=0xa1) &&(MSB<=0xa3))&&(LSB>=0xa1))
              {                        
/*国标简体(GB2312)15x16点的字符在字库IC中的地址由以下公式来计算:*/
/*Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseAdd;BaseAdd=0*/
/*由于担心8位单片机有乘法溢出问题,所以分三部取地址*/
              fontaddr = (MSB- 0xa1)*94;
              fontaddr += (LSB-0xa1);
              fontaddr = (ulong)(fontaddr*32);
              addrHigh = (fontaddr&0xff0000)>>16;  /*地址的高8位,共24位*/
              addrMid = (fontaddr&0xff00)>>8;      /*地址的中8位,共24位*/
              addrLow = fontaddr&0xff;        /*地址的低8位,共24位*/
              BytesDataFromROM(addrHigh,addrMid,addrLow,32,fontbuff);/*取32个字节的数据,存到"fontbuf[32]"*/
              i+=2;
              }
              else if((MSB>=0x20) &&(MSB<=0x7e))    
              {                        
              unsigned char fontbuff[16];            
              fontaddr = (MSB- 0x20);
              fontaddr = (unsigned long)(fontaddr*16);
              fontaddr = (unsigned long)(fontaddr+0x3cf80);            
              addrHigh = (fontaddr&0xff0000)>>16;
              addrMid = (fontaddr&0xff00)>>8;
              addrLow = fontaddr&0xff;
              BytesDataFromROM(addrHigh,addrMid,addrLow,16,fontbuff);/*取16个字节的数据,存到"fontbuf[32]"*/
              i+=1;
              }
              else
              i++;    
             }    
/*汉字旋转子程序 将字库读出竖置横排结构的32字节数据
旋转90度成横置横排结构,转换后点阵结构为
左上部 右上部
左下部 右下部
显示时先取左上部最顶端数据,再取右上部顶端数据,
再取左上部第二行数据,右上部第二行数据 ......*****/
              void  fontchange(void)
              {
               uchar          fontbuf;
               uint buff,i,step;
                for(step=0;step<8;step++)        //16X16 左上角部分 总循环8步
               {
               fontbuf=0;                   //初始化 字节运算缓存器等于0
               buff=0;                        //字节缓冲器初始化.
                for(i=0;i<8;i++)            //第一层循环,取竖置横排8字节第1个点。
                {
                 fontbuf<<=1;                //数据自右向左移动,共移动7位,合并一字节
                 buff=fontbuff[i]>>step;    //将当前转换的列地址fontbuff[i]右移step步.
                 buff&=0X01;                //保留最低位置,
                 fontbuf|=buff;                //字节缓存器等于新的运算字节和最低位相与
                }
                newbuff[step]=fontbuf;      //将当前运算的一字节新数据存当前运算地址.
               }
              for(step=0;step<8;step++)        //16X16 右上角部分总循环8步
               {
               fontbuf=0;                   //初始化 字节运算缓存器等于0
               buff=0;                        //字节缓冲器初始化.
                for(i=0;i<8;i++)            //第一层循环,取竖置横排8字节第1个点。
                {
                 fontbuf<<=1;                //数据自右向左移动,共移动7位,合并一字节
                 buff=fontbuff[i+8]>>step;    //将当前转换的列地址fontbuff[i]右移step步.
                 buff&=0X01;                //保留最低位置,
                 fontbuf|=buff;                //字节缓存器等于新的运算字节和最低位相与
                }
                newbuff[step+8]=fontbuf;   //将当前运算的一字节新数据存当前运算地址.
               }
               for(step=0;step<8;step++)    //16X16 左下角部分总循环8步
               {
               fontbuf=0;                   //初始化 字节运算缓存器等于0
               buff=0;                        //字节缓冲器初始化.
                for(i=0;i<8;i++)            //第一层循环,取竖置横排8字节第1个点。
                {
                 fontbuf<<=1;                //数据自右向左移动,共移动7位,合并一字节
                 buff=fontbuff[i+16]>>step;    //将当前转换的列地址fontbuff[i]右移step步.
                 buff&=0X01;                //保留最低位置,
                 fontbuf|=buff;                //字节缓存器等于新的运算字节和最低位相与
                }
                newbuff[step+16]=fontbuf;    //将当前运算的一字节新数据存当前运算地址.
               }
              for(step=0;step<8;step++)        //16X16 右下角部分总循环8步
               {
               fontbuf=0;                   //初始化 字节运算缓存器等于0
               buff=0;                        //字节缓冲器初始化.
                for(i=0;i<8;i++)            //第一层循环,取竖置横排8字节第1个点。
                {
                 fontbuf<<=1;                //数据自右向左移动,共移动7位,合并一字节
                 buff=fontbuff[i+24]>>step;    //将当前转换的列地址fontbuff[i]右移step步.
                 buff&=0X01;                //保留最低位置,
                 fontbuf|=buff;                //字节缓存器等于新的运算字节和最低位相与
                }
                newbuff[step+24]=fontbuf;   //将当前运算的一字节新数据存当前运算地址.
               }
              }
/************************************/
               void counteradd()
              {
               uchar  h1,l1,m1,n1;                /****个十百千代码缓冲**/
               h1=counter/1000;
               l1=(counter-h1*1000)/100;
               m1=(counter-h1*1000-l1*100)/10;
               n1=counter-h1*1000-l1*100-m1*10;
               display_graphic_16x8(11,49,xsadd[h1],tab0);//
               display_graphic_16x8(12,49,xsadd[l1],tab0);//
               display_graphic_16x8(13,49,xsadd[m1],tab0);//
               display_graphic_16x8(14,49,xsadd[n1],tab0);//    
              }
/************************************/
              void dis_val()
              {
               uchar  h,l,m,n;                /****个十百千代码缓冲**/
               //vals=1225;
               h=vals/1000;
               l=(vals-h*1000)/100;
               m=(vals-h*1000-l*100)/10;
               n=vals-h*1000-l*100-m*10;
               display_graphic_16x8(11,33,xsadd[h],tab0);//
               display_graphic_16x8(12,33,xsadd[l],tab0);//
               display_graphic_16x8(13,33,xsadd[m],tab0);//
               display_graphic_16x8(14,33,xsadd[n],tab0);//    
              }
/************************************/
              void write_val()
              {
               uchar  h,l,m,n;                /****个十百千代码缓冲**/
               h=val/1000;                      //千位
               l=(val-h*1000)/100;              //百位
               m=(val-h*1000-l*100)/10;          //十位
               n=val-h*1000-l*100-m*10;          //个位
               wr_24C64(1,n);         /*写入个位*/
               wr_24C64(2,m);         /*写入十位*/
               wr_24C64(3,l);         /*写入百位*/
               wr_24C64(4,h);         /*写入千位*/
              }
/************************************/
              void read_val()
              {
              uchar k_data,h_data,t_data,b_data; //
              b_data=rd_24C64(1);delay_iic(200); // 个位
              t_data=rd_24C64(2);delay_iic(200); // 十位
              h_data=rd_24C64(3);delay_iic(200); // 百位
              k_data=rd_24C64(4);delay_iic(200); // 千位
              vals=k_data*1000+h_data*100+t_data*10+b_data;    
              //vals=2206;
              }
/************************************/
              void main(void)
              {
              P0M0=0;
              P0M1=0;
              P1M0=0X80;    //1000 0000      P1.7开漏
              P1M1=0X80;    //1000 0000
              P2M0=0;
              P2M1=0;
              P3M0=0;
              P3M1=0;
              P4M0=0;
              P4M1=0;
              P5M0=0X10;    //0001 0000      P5.4开漏
              P5M1=0X10;    //0001 0000
              P6M0=0;
              P6M1=0;
              P7M0=0;
              P7M1=0;
              OUT1=1;
              OUT2=1;
              OUT3=1;
              OUT4=1;
              IN1=1;
              IN2=1;
              IN3=1;
              IN4=1;
              IN5=1;
              IN6=1;
              IN7=1;
              counter=0;
              rst=0;
              delay_nms(100);
              rst=1;
              delay_nms(100);
              fs=0;
              InitLCD();
              ClearScreen();
              wr_24C64(10,2);         /*写入个位*/
              wr_24C64(11,2);         /*写入个位*/
              wr_24C64(12,6);         /*写入十位*/
              wr_24C64(13,9);         /*写入百位*/
              displayGB2312(0XD7,0XD4);
              fontchange();
              display_chines_16x16(1,1,newbuff);
              displayGB2312(0XB6,0XAF);
              fontchange();
              display_chines_16x16(3,1,newbuff);
              displayGB2312(0XD6,0XB4);
              fontchange();
              display_chines_16x16(5,1,newbuff);
              displayGB2312(0XD0,0XD0);
              fontchange();
              display_chines_16x16(7,1,newbuff);    //自动执行
              displayGB2312(0XCA,0XD6);
              fontchange();
              display_chines_16x16(1,17,newbuff);
              displayGB2312(0XB6,0XAF);
              fontchange();
              display_chines_16x16(3,17,newbuff);
              displayGB2312(0XB2,0XD9);
              fontchange();
              display_chines_16x16(5,17,newbuff);
              displayGB2312(0XD7,0XF7);
              fontchange();
              display_chines_16x16(7,17,newbuff);     //手动操作
              displayGB2312(0XB3,0XCC);
              fontchange();
              display_chines_16x16(1,33,newbuff);
              displayGB2312(0XD0,0XF2);
              fontchange();
              display_chines_16x16(3,33,newbuff);
              displayGB2312(0XB9,0XDC);
              fontchange();
              display_chines_16x16(5,33,newbuff);
              displayGB2312(0XC0,0XED);
              fontchange();
              display_chines_16x16(7,33,newbuff);     //程序管理
              displayGB2312(0XB2,0XCE);
              fontchange();
              display_chines_16x16(1,49,newbuff);
              displayGB2312(0XCA,0XFD);
              fontchange();
              display_chines_16x16(3,49,newbuff);
              displayGB2312(0XC9,0XE8);
              fontchange();
              display_chines_16x16(5,49,newbuff);
              displayGB2312(0XD6,0XC3);
              fontchange();
              display_chines_16x16(7,49,newbuff);     //参数设置
              delay_nms(2000);
              displayGB2312(0XD7,0XD4);
              fontchange();
              display_negate_16x16(1,1,newbuff);
              displayGB2312(0XB6,0XAF);
              fontchange();
              display_negate_16x16(3,1,newbuff);
              displayGB2312(0XD6,0XB4);
              fontchange();
              display_negate_16x16(5,1,newbuff);    //反显自动执行
              displayGB2312(0XD0,0XD0);
              fontchange();
              display_negate_16x16(7,1,newbuff);
              display_graphic_16x8(9,1,xsadd[11],tab0);//     X
              display_graphic_16x8(11,1,xsadd[0],tab0);//     0
              display_graphic_16x8(12,1,xsadd[0],tab0);//     0
              display_graphic_16x8(13,1,xsadd[0],tab0);//     0
              display_graphic_16x8(14,1,xsadd[0],tab0);//     0
              display_graphic_16x8(15,1,xsadd[13],tab0);//.
              display_graphic_16x8(16,1,xsadd[0],tab0);//     0
              display_graphic_16x8(17,1,xsadd[0],tab0);//     0
              display_graphic_16x8(19,1,xsadd[12],tab0);// Y
              display_graphic_16x8(21,1,xsadd[0],tab0);//     0
              display_graphic_16x8(22,1,xsadd[0],tab0);//     0
              display_graphic_16x8(23,1,xsadd[0],tab0);//     0
              display_graphic_16x8(24,1,xsadd[0],tab0);//     0
              display_graphic_16x8(25,1,xsadd[13],tab0);//.
              display_graphic_16x8(26,1,xsadd[0],tab0);//     0
              display_graphic_16x8(27,1,xsadd[0],tab0);//     0
              while(1)
              {
              counteradd();
              delay_nms(50);
              counter++;
               if(!STOP)
               {
               display_graphic_16x8(28,1,xsadd[2],tab0);//  显示27
               display_graphic_16x8(29,1,xsadd[7],tab0);//
               CP1=1;
               DIR1=1;
               EN1=1;
               CP2=1;
               DIR2=1;
               EN2=1;
               CP3=1;
               DIR3=1;
               EN3=1;
               }
                if(!INSERT)
                {
                 display_graphic_16x8(28,1,xsadd[2],tab0);//  显示25
                 display_graphic_16x8(29,1,xsadd[5],tab0);//
                 CP1=0;
                 DIR1=0;
                 EN1=0;
                 CP2=0;
                 DIR2=0;
                 EN2=0;
                 CP3=0;
                 DIR3=0;
                 EN3=0;
                }
                OUT1=0;
                if(!IN1)
                {
                 val=0003;           /
                 write_val();
                 display_graphic_16x8(28,1,xsadd[10],tab0);// 显示3
                 display_graphic_16x8(29,1,xsadd[3],tab0);//
                 EN1=0;
                }
                if(!IN2)
                {
                val=0002;           /
                 write_val();
                 display_graphic_16x8(28,1,xsadd[10],tab0);//  显示2
                 display_graphic_16x8(29,1,xsadd[2],tab0);//
                 DIR1=0;
                }
                if(!IN3)
                {
                val=0001;           /
                 write_val();
                 display_graphic_16x8(28,1,xsadd[10],tab0);//  显示1
                 display_graphic_16x8(29,1,xsadd[1],tab0);//
                 CP1=0;
                }
                if(!IN4)
                {
                 display_graphic_16x8(28,1,xsadd[2],tab0);//  显示26
                 display_graphic_16x8(29,1,xsadd[6],tab0);//
                }
                if(!IN5)
                {
                 display_graphic_16x8(28,1,xsadd[1],tab0);//  显示19
                 display_graphic_16x8(29,1,xsadd[9],tab0);//
                }
                if(!IN6)
                {
                 val=0000;           /
                 write_val();
                 display_graphic_16x8(28,1,xsadd[1],tab0);//  显示15
                 display_graphic_16x8(29,1,xsadd[5],tab0);//
                }
                if(!IN7)
                {                                           //显示11
                displayGB2312(0XCA,0XD6);
                fontchange();
                display_chines_16x16(1,1,newbuff);     //手动     高速
                displayGB2312(0XB6,0XAF);
                fontchange();
                display_chines_16x16(3,1,newbuff);
                displayGB2312(0XB8,0XDF);
                fontchange();
                display_chines_16x16(5,1,newbuff);
                displayGB2312(0XCB,0XD9);
                fontchange();
                display_chines_16x16(7,1,newbuff);
                displayGB2312(0XB5,0XE3);             //点动操作
                fontchange();
                display_chines_16x16(1,17,newbuff);
                displayGB2312(0XB6,0XAF);
                fontchange();
                display_chines_16x16(3,17,newbuff);
                displayGB2312(0XB2,0XD9);
                fontchange();
                display_chines_16x16(5,17,newbuff);
                displayGB2312(0XD7,0XF7);
                fontchange();
                display_chines_16x16(7,17,newbuff);
                displayGB2312(0XBB,0XD8);            //回程序零
                fontchange();
                display_chines_16x16(1,33,newbuff);
                displayGB2312(0XB3,0XCC);
                fontchange();
                display_chines_16x16(3,33,newbuff);
                displayGB2312(0XD0,0XF2);
                fontchange();
                display_chines_16x16(5,33,newbuff);
                displayGB2312(0XC1,0XE3);
                fontchange();
                display_chines_16x16(7,33,newbuff);
                displayGB2312(0XBB,0XD8);            //回机械零
                fontchange();
                display_chines_16x16(1,49,newbuff);
                displayGB2312(0XBB,0XFA);
                fontchange();
                display_chines_16x16(3,49,newbuff);
                displayGB2312(0XD0,0XB5);
                fontchange();
                display_chines_16x16(5,49,newbuff);
                displayGB2312(0XC1,0XE3);
                fontchange();
                display_chines_16x16(7,49,newbuff);
                }
                OUT1=1;
                delay_nms(50);
                OUT2=0;
                if(!IN1)
                {
                 display_graphic_16x8(28,1,xsadd[10],tab0);// 显示6  
                 display_graphic_16x8(29,1,xsadd[6],tab0);//
                 EN2=0;
                }
                if(!IN2)
                {
                 display_graphic_16x8(28,1,xsadd[10],tab0);//  显示5
                 display_graphic_16x8(29,1,xsadd[5],tab0);//
                 DIR2=0;
                }
                if(!IN3)
                {
                 uchar k_data,h_data,t_data,b_data; //
                 b_data=rd_24C64(10);delay_iic(200); // 个位
                 t_data=rd_24C64(11);delay_iic(200); // 十位
                 h_data=rd_24C64(12);delay_iic(200); // 百位
                 k_data=rd_24C64(13);delay_iic(200); // 千位
                 vals=k_data*1000+h_data*100+t_data*10+b_data;    
                 dis_val();
                 display_graphic_16x8(28,1,xsadd[10],tab0);//  显示4
                 display_graphic_16x8(29,1,xsadd[4],tab0);//
                 CP2=0;
                }
                if(!IN4)
                {
                 display_graphic_16x8(28,1,xsadd[2],tab0);//   显示22
                 display_graphic_16x8(29,1,xsadd[2],tab0);//
                }
                if(!IN5)
                {
                 display_graphic_16x8(28,1,xsadd[1],tab0);//   显示18
                 display_graphic_16x8(29,1,xsadd[8],tab0);//
                }
                if(!IN6)
                {
                 display_graphic_16x8(28,1,xsadd[1],tab0);//   显示14
                 display_graphic_16x8(29,1,xsadd[4],tab0);//
                }
                if(!IN7)
                {
                 display_graphic_16x8(28,1,xsadd[1],tab0);//     显示10
                 display_graphic_16x8(29,1,xsadd[0],tab0);//
                }
                OUT2=1;
                delay_nms(50);
                OUT3=0;
                if(!IN1)
                {
                 display_graphic_16x8(28,1,xsadd[10],tab0);//  显示9
                 display_graphic_16x8(29,1,xsadd[9],tab0);//
                 EN3=0;
                }
                if(!IN2)
                {
                 display_graphic_16x8(28,1,xsadd[10],tab0);//     显示8
                 display_graphic_16x8(29,1,xsadd[8],tab0);//
                 DIR3=0;
                }
                if(!IN3)
                {
                 display_graphic_16x8(28,1,xsadd[10],tab0);//      显示7
                 display_graphic_16x8(29,1,xsadd[7],tab0);//
                 CP3=0;
                }
                if(!IN4)
                {
                 display_graphic_16x8(28,1,xsadd[2],tab0);//   显示21
                 display_graphic_16x8(29,1,xsadd[1],tab0);//
                }
                if(!IN5)
                {
                read_val();
                dis_val();
                display_graphic_16x8(28,1,xsadd[1],tab0);//  显示17
                display_graphic_16x8(29,1,xsadd[7],tab0);//
                }
                if(!IN6)
                {
                 display_graphic_16x8(28,1,xsadd[1],tab0);//  显示13
                 display_graphic_16x8(29,1,xsadd[3],tab0);//
                }
                OUT3=1;
                delay_nms(50);
                OUT4=0;
                if(!IN1)
                {
                 display_graphic_16x8(28,1,xsadd[2],tab0);// 显示24
                 display_graphic_16x8(29,1,xsadd[4],tab0);//
                }
                if(!IN2)
                {
                 display_graphic_16x8(28,1,xsadd[10],tab0);//  显示0
                 display_graphic_16x8(29,1,xsadd[0],tab0);//
                }
                if(!IN3)
                {
                 display_graphic_16x8(28,1,xsadd[2],tab0);//  显示23
                 display_graphic_16x8(29,1,xsadd[3],tab0);//
                }
                if(!IN4)
                {
                 display_graphic_16x8(28,1,xsadd[2],tab0);//  显示20
                 display_graphic_16x8(29,1,xsadd[0],tab0);//
                }
                if(!IN5)
                {
                 val=1236;
                 write_val();
                 display_graphic_16x8(28,1,xsadd[1],tab0);//  显示16
                 display_graphic_16x8(29,1,xsadd[6],tab0);//
                }
                if(!IN6)
                {
                InitLCD();
                ClearScreen();
                displayGB2312(0XB2,0XCE);          /*---参---*/
                fontchange();
                display_chines_16x16(1,1,newbuff);    
                displayGB2312(0XCA,0XFD);           /*---数---*/
                fontchange();
                display_chines_16x16(3,1,newbuff);
                displayGB2312(0XC9,0XE8);           /*---设---*/
                fontchange();
                display_chines_16x16(5,1,newbuff);
                displayGB2312(0XB6,0XA8);           /*---定---*/
                fontchange();
                display_chines_16x16(7,1,newbuff);
                dis_val();
                }
                OUT4=1;
                delay_nms(50);            //INTPUT0
                if(!INTPUT0)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[0],tab0);//     显示S0
                }
                if(!INTPUT1)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[1],tab0);//     显示S1
                }
                if(!INTPUT2)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[2],tab0);//     显示S2
                }
                if(!INTPUT3)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[3],tab0);//     显示S3
                }
                if(!INTPUT4)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[4],tab0);//     显示S4
                }
                if(!INTPUT5)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[5],tab0);//     显示S5
                }
                if(!INTPUT6)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[6],tab0);//     显示S6
                }
                if(!INTPUT7)
                {
                display_graphic_16x8(11,33,xsadd[14],tab0);//.
                display_graphic_16x8(12,33,xsadd[7],tab0);//     显示S7
                }
               }
              }

 

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

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

相关文章

概率论 科普

符号优先级 概率公式中一共有三种符号&#xff1a;分号 ; 、逗号 , 、竖线 | 。 ; 分号代表前后是两类东西&#xff0c;以概率P(x;θ)为例&#xff0c;分号前面是x样本&#xff0c;分号后边是模型参数。分号前的 表示的是这个式子用来预测分布的随机变量x&#xff0c;分号后的…

第一篇:刚接触测试你应该知道什么

欢迎你接触软件测试这一行业。 刚接触它时&#xff0c;你肯定或多或少会有疑惑&#xff0c;我该做什么&#xff1f;大家口口相传的软件测试就是 【点点点】 真的是你日常的工作吗&#xff1f; 那么本文我将陪你一起&#xff0c;对我们刚接触到测试这个工作以后&#xff0c;应该…

为什么电子商务安全是速度和保护之间的平衡行为

微信搜索关注公众号网络研究观&#xff0c;获取更多信息。 电子商务世界是一把双刃剑。虽然它为企业和消费者提供了便利和可访问性&#xff0c;但它也为网络犯罪分子提供了诱人的目标。在这个不断变化的环境中&#xff0c;优先考虑安全不再是一种选择&#xff1b;而是一种选择&…

nginx--tcp负载均衡

mysql负载均衡 安装mysql yum install -y mariadb-server systemctl start mariadb systemctl enable mariadb ss -ntl创建数据库并授权 MariaDB [(none)]> create database wordpress; Query OK, 1 row affected (0.00 sec)MariaDB [(none)]> grant all privileges o…

使用 electron-vite-vue 构建 electron + vue3 项目并打包

文章目录 一、使用 electron-vite-vue 构建 Vue3 项目1、创建项目并安装相关依赖2、安装依赖时报错 (operation not permitted) 二、项目打包1、执行打包命令2、下载失败处理3、手动方式下载后&#xff0c;将文件放至指定路径下4、打包成功后 参考资料 一、使用 electron-vite-…

C++证道之路第十八章探讨C++新标准

一、复习前面介绍过的C11新功能 1、新类型 C11新增了类型long long 和unsigned long long 新增了类型char16_t 和char32_t 2、统一的初始化 C11扩大了用大括号括起的列表&#xff08;初始化列表&#xff09;的使用范围&#xff0c;使其可以用于所有内置类型和用户定义的类…

JavaScript练习

1.冒泡排序 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head>…

设备树与/sys/bus/platform/devices与/sys/devices目录关系

设备树与sys/bus/platform/devices sysfs文件系统中/sys/bus/platform/devices下的设备是由设备树生成&#xff0c; 根节点下有compatible的子节点都会在/bus/platform/devices生成节点 总线 I2C、SPI 等控制器会在/bus/platform/devices生成节点 总线 I2C、SPI 节点下的子节点…

ESP8266做主机 手机网络助手为从机

ATCIFSR查看地址&#xff0c;一般ESP8266 为192.168.4.1 在手机上下载网络调试助手&#xff0c;打开TCP客户端 创建后192.168.4.1 端口8089然后连接ESP8266热点。 ESP向手机发数据前先发送要发几个数据ATCIPSEND0,8表示发8个&#xff0c;然后再发8个数 上面创建好热点后&…

多组间比较散点图+误差棒(自备)

目录 数据 计算四分位值 作图 数据 rm(list ls()) library(ggplot2) library(dplyr) library(ggpubr) library(reshape2) library(tidyverse)data <- iris##鸢尾花数据集 dat <- data[,c(5,1)]#单个数据进行分析 计算四分位值 #根据分组计算四分位及中位数 dat1 …

ubuntu 安装单节点HBase

下载HBase mkdir -p /home/ellis/HBase/ cd /home/ellis/HBase/ wget https://downloads.apache.org/hbase/2.5.8/hbase-2.5.8-bin.tar.gz tar -xvf hbase-2.5.8-bin.tar.gz安装java jdk sudo apt install openjdk-11-jdksudo vim /etc/profileexport JAVA_HOME/usr/lib/jvm/…

短信清空了!华为手机短信删除了怎么恢复?

“有没有人知道这是怎么回事呀&#xff0c;原先有一千多条未读一直放着没管&#xff0c;昨天根本没打开短信这个软件&#xff0c;今晚突然发现只剩一条了&#xff0c;是华为手机自动清理了吗&#xff01;到底该怎么恢复呀&#xff1f;我真崩溃&#xff01;” 在日常生活中&…

面试集中营—Redis架构篇

一、Redis到底是多线程还是单线程 1、redis6.0版本之前的单线程&#xff0c;是指网络请求I/O与数据的读写是由一个线程完成的&#xff1b; 2、redis6.0版本升级成了多线程&#xff0c;指的是在网络请求I/O阶段应用的多线程技术&#xff1b;而键值对的读写还是由单线程完成的。所…

Vitis HLS 学习笔记--AXI_STREAM_TO_MASTER

目录 1. 简介 2. 示例 2.1 示例功能介绍 2.2 示例代码 2.3 顶层函数解释 2.4 综合报告&#xff08;HW Interfaces&#xff09; 2.5 关于TKEEP和TSTRB 2.6 综合报告&#xff08;SW I/O Information&#xff09; 3. 总结 1. 简介 本文通过“<Examples>/Interface…

pandas入门

pandas入门 一、pandas简介1.1 pandas介绍1.2 pandas的基本功能 二、pandas快速入门2.1 读取数据2.2 验证数据2.3 建立索引2.4 数据抽取2.4.1 选择列2.4.2 选择行2.4.3 指定行和列 2.5 排序2.6 分组聚合2.7 数据转置2.8 增加列2.9 统计分析 一、pandas简介 1.1 pandas介绍 pa…

Qt QInputDialog详解

1.简介 QInputDialog是一个对话框类&#xff0c;用于从用户那里获取一个单一的值。这个值可以是字符串、数字、或者一个列表中的选项。QInputDialog提供了一个方便的方式来快速创建一个输入对话框&#xff0c;无需自己从头开始构建。 QInputDialog支持多种输入类型&#xff1…

【备战蓝桥杯】第十四届蓝桥杯省赛C/C++ B组真题及题解

参加了两届蓝桥杯以及做过了往年的真题我的直观感受是蓝桥杯不再那么“暴力”了&#xff0c;而是逐渐趋向DP和搜素图论方面了。下面是第十四届蓝桥杯省赛C/C B组真题及题解&#xff0c;希望对阅读的你有所帮助。 目录 题目试题A&#xff1a;日期统计试题B&#xff1a;01 串的熵…

Redis学习3——Redis应用之缓存

引言 缓存的意义 Redis作为一个NoSql数据库&#xff0c;被广泛的当作缓存数据库使用&#xff0c;所谓缓存&#xff0c;就是数据交换的缓冲区。使用缓存的具体原因有&#xff1a; 缓存数据存储于代码中&#xff0c;而代码运行在内存中&#xff0c;内存的读写性能远高于磁盘&a…

前后端功能实现——查询所有

目录 1、需求 2、步骤 1&#xff09;创建模块 引入坐标 2&#xff09;创建结构 实现三层架构 3&#xff09;创建表 brand 4&#xff09;创建实体类 Brand 5&#xff09;创建MyBatis配置文件 6&#xff09;创建映射文件 7&#xff09;创建工具类 SqlSessionFactoryUti…

基于FPGA的数字信号处理(9)--定点数据的两种溢出处理模式:饱和(Saturate)和绕回(Wrap)

1、前言 在逻辑设计中&#xff0c;为了保证运算结果的正确性&#xff0c;常常需要对结果的位宽进行扩展。比如2个3bits的无符号数相加&#xff0c;只有将结果设定为4bits&#xff0c;才能保证结果一定是正确的。不然&#xff0c;某些情况如77 14(1110)&#xff0c;如果结果只…
最新文章