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

📄 实用的源码.c

📁 一组实用的C51源代码,不是我作的,在网站上载下来的,也许对大家有用,感谢作者
💻 C
📖 第 1 页 / 共 5 页
字号:
                counter[1]=0x00;
                counter[0]=counter[0]+1;
                if(counter[0]==0x64)
                {
                    counter[3]=0x00;
                    counter[2]=0x00;
                    counter[1]=0x00;
                    counter[0]=0x00;
                }
            }
        }
    }
}

  

//T9---输入法---主程序 

//========================================主程序体========================================"

unsigned char py_ime(unsigned char code **pchp,unsigned char input_py_val[])
{
    unsigned char code (*p1)[8],(*p2)[8],(*p3)[8];
    unsigned char i=0;
    if (input_py_val[0]==0) return(0);                //如果输入空字符返回0"
    if (input_py_val[0]=='i') return(0);
    if (input_py_val[0]=='u') return(0);
    if (input_py_val[0]=='v') return(0);
    p1=p2=PY_index_pointer[input_py_val][0]-0x61];   //计算入口树根"
    p3=PY_index_pointer[input_py_val][0]-0x60];        //设置指针界限"
    if (p1==0) return(0);                            //查询失败返回0"
    i=1;
    while (p1<p3){//查找
       if(input_py_val[i]==' ') break; //如果找到空格,就不再向下查找    
        if ((*p1)[i-1]==input_py_val[i])  //条件满足,继续向下找
        {
           if(i>1){ 
             if ((*p1)[i-2]!=input_py_val[i-1])    break;       
              } //如果已经比较一个,再比较下一次时,上一个也相等,若不等,则不再比较
            p2=p1;
            i++;
        } 
        else p1++;        
        } //查找
    *pchp=(unsigned char code *)((*p2)[6]+(*p2)[7]*256+py_mb_begin);                

//返回查询结果首地址"
    return i;     //返回正确匹配个数,当为零时,即一个也没有匹配上    
}

void strto20h(unsigned char *buf,unsigned char n){//用于清空字符串,将串清空成空格20
    uchar i;
    for(i=0;i<n;i++) buf[i]=0x20;
} //用于清空字符串,将串清空成空格20

//将输入的汉字或字符显示在当前LCDX,LCDY的位置返回值为输入字符或汉字长度,一个汉字占两个数
unsigned int pyinput(unsigned char *pbuf,unsigned int len){ //存贮位置,最常输入数
    uchar x,y;   //用于记录显示地址
    uchar pybuf[6];  //用于存贮输入的拼音字母
    uint ibuf;       //INT型临时变量
    uchar pyi;       //用于存贮 输入字母指针
    uchar keyi;      //用于存贮上一次的键值,即指明按的哪一个键,选择字母时用
    uchar fxi;       //方向记数,当为0时,不显示,也不起作为,当用方向键后,确认键也起作用
    uchar fyi;       //分页键,用在汉字显示分页用,一页13个汉字 
    uchar inputlen;  //当屏文字长度,记事本,编辑最多只能编一屏,如果有第二屏,第一屏不能修改    
    uchar bzpy;      //用于指明是拼音输入还是英文输入当为0时为数字输入,当为1时,为英文,当为2时,

拼音    
    if(len>239) {
        qdcx();
        return 0;
    } //当总长度大于一屏时,长响,并返回0
    bzpy=0;          //初始化为数字
    inputlen=0;      //初始化为0即本次还未输入一个汉字
    linestate=0;     //先定义各行状态为0,只有换行时不完成,才置1
    x=lcdx;y=lcdy;
    xszfhz('_',0);   //显示光标
    lcdx=0;lcdy=112;
    xsstr(pystr1,1,0);  //返着显示,长度不受限制显示拼音    
bzpyinput1:             //当执行了中英文切换,跳到此处  
    strto20h(pybuf,6);  //将输入字母空间清空
    pyi=0;              //未输入字母时,地址为0 
    lcdx=0;lcdy=96;  
    if(bzpy<1) xsstr(pystr2+0,1,2); //当为0时,为数字输入
    else if(bzpy<2) xsstr(pystr2+2,1,2);  //当为1时,为英文
    else xsstr(pystr2+4,1,2);           //其它为拼音
    lcdx=2;lcdy=96; xsnkb(0);     //清掉无用信息,在提示行,其它行不管
    if(bzpy<1){//当为0时为数字输入
bzpysz:    
        key=rbkey();          //等待一个值的输入 
        switch(key){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            key=key+0x30;
bzpysz1:            
                if(inputlen>len-1){ //如果已经输入够数,再按数字键,不予处理
                    qdcx();                    
                    goto bzpysz;
                    } //如果已经输入够数,再按数字键,不予处理 
                lcdx=x;lcdy=y;        
                pbuf[inputlen]=key;
                xszfhz(key,0);             //显示字母
                x=lcdx;y=lcdy;        //重新取回输入的汉字            
                xszfhz('_',0);        //显示光标
                inputlen++;           //记数自动加1       
                goto bzpysz;          //输入完数字后,
            case 10:               //.
                key='.';
                goto bzpysz1; 
            case 11:               //*
                key='*';
                goto bzpysz1;
            case 12:               // /
                key='/';
                goto bzpysz1;
            case 13:               //+
                key='+';
                goto bzpysz1;
            case 14:               //-
                key='-';
                goto bzpysz1;
            case 15:               //=
                key='=';                   //借用KEY暂存符号           
                goto bzpysz1;
            case 16:
              if(bzpy<2) bzpy++;    //如果小于2,则加1
              else bzpy=0;          //返回到数字输入              
              goto bzpyinput1;     //重新显示中英文方式
            case 17:               //取消键,每按一次,当前位置的输入将删除
                lcdx=x;lcdy=y;
                xszfhz(' ',0);              //将原光标清掉                                        

   
                if(inputlen<1) return 0;    //如果一个字母也没有输入,取消键退出
                inputlen--;                 //总长度自动减1
                if(pbuf[inputlen]>0xa0){
                    pbuf[inputlen]=0x20;        //给一个空格                               
                    inputlen--;
                    pbuf[inputlen]=0x20;        //给一个空格
                    if(x>1) x-=2;
                    else {
                        y-=16;
                        x=28;
                        key=1;
                        key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                            } //当已经清掉了该行,则该位也应该清掉
                    } //当需要换行时        
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);     //显示光标    
                 xszfhz(' ',0);
                 } //即要删除的是汉字
                 else {
                     pbuf[inputlen]=0x20;        //给一个空格                                     
                     if(x>0) x--;
                     else {
                         y-=16;
                         x=29;   
                         key=1;
                         key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                        } //清完一个后,且换行,有空位,清掉该标志
                     } //当需要换行时   
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);     //显示光标    
                 } //删除的是字母      
                goto bzpysz;//返回重新输入              
            case 20:            
                return inputlen;   //当按确认键返回时,返回输入数量                    
            default:
                qdcx();     //不是有效的键值,长响
          } //键值处理
        goto bzpysz; 
    } //数字输入    
    else if(bzpy<2){//当为1时,为英文输入 
bzpyinputyw:                       //英文输入跳转位    
        key=rbkey();               //取出一个键值
        switch(key){//键值处理
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
                keyi=key;          //取出当前键值,进入显示提示信息阶段    
                fxi=0;             //开始时第一个字母返显不处理翻页
                break;            
            case 10:               //.
                key='.';
                goto bzpyinputywt; 
            case 11:               //*
                key='*';
                goto bzpyinputywt;             
            case 12:               // /
                key='/';
                goto bzpyinputywt;             
            case 13:               //+
                key='+';
                goto bzpyinputywt;             
            case 14:               //-
                key='-';
                goto bzpyinputywt;             
            case 15:               //=
                key='=';                   //借用KEY暂存符号           
bzpyinputywt:                              //特殊符号处理+-*/=等
                lcdx=x;lcdy=y;        
                pbuf[inputlen]=key;
                xszfhz(key,0);             //显示字母            
                goto bzpyinputywz1;        //直接取出字符,上屏    
            case 16:
              if(bzpy<2) bzpy++;    //如果小于2,则加1
              else bzpy=0;          //返回到数字输入              
              goto bzpyinput1;     //重新显示中英文方式
            case 17:               //取消键,每按一次,当前位置的输入将删除
                lcdx=x;lcdy=y;
                xszfhz(' ',0);             //显示空格,清掉原来的光标            
                if(inputlen<1) return 0;    //如果一个字母也没有输入,取消键退出
                inputlen--;                 //总长度自动减1
                if(pbuf[inputlen]>0xa0){
                    pbuf[inputlen]=0x20;        //给一个空格                               
                    inputlen--;
                    pbuf[inputlen]=0x20;        //给一个空格                               
                    if(x>1) x-=2;
                    else {
                        y-=16;
                        x=28;
                        key=1;
                        key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位
                            } //当已经清掉了该行,则该位也应该清掉
                    } //当需要换行时        
                 lcdx=x;lcdy=y;
                 xszfhz('_',0);     //显示光标    
                 xszfhz(' ',0);                 
                 } //即要删除的是汉字
                 else {
                     pbuf[inputlen]=0x20;        //给一个空格                                     
                     if(x>0) x--;
                     else {
                         y-=16;
                         x=29;   
                         key=1;
                         key=key<<(y/16);        //借用KEY暂存位比较值  因后面没有用KEY值
                        if(linestate&key){
                            x--;  //当有空格时,X值再减1
                            linestate=linestate^key;   //异或,清掉该位

⌨️ 快捷键说明

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