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

📄 serial.lst

📁 拼音输入法用在单片机上.rar
💻 LST
📖 第 1 页 / 共 2 页
字号:
  80          ********************************************************************/
  81          //
  82          uchar getchar(void)
  83          {
  84   1              idata uchar c,c1,i,j;
  85   1              idata uchar ch1,ch2,ch3;
  86   1              bit   iskey=0;
  87   1              idata uchar  t=0;//延时
  88   1              uchar code dout[4]={0x7f,0xbf,0xdf,0xef};
  89   1              uchar code key[4][4]={{'1','5','9','s'},{'2','6','0','f'},{'3','7','e',0x08},{'4','8','d',0x0d}};
  90   1              while(1)
  91   1              {
  92   2      re_scan:        for(i=0;i<4;i++)
C51 COMPILER V6.23a  SERIAL                                                                08/24/2003 16:21:16 PAGE 4   

  93   2                      {
  94   3                              P1=dout[i];//01111111,0x7f
  95   3                                         //10111111,0xbf
  96   3                                         //11011111,0xdf
  97   3                                         //11101111,0xef
  98   3                              c=P1&0x0f;
  99   3                              if(c!=0x0f)
 100   3                              {
 101   4                                      if(!(c&0x01))     j=0;  //00001110
 102   4                                      else if(!(c&0x02))j=1;  //00001101
 103   4                                      else if(!(c&0x04))j=2;  //00001011
 104   4                                      else if(!(c&0x08))j=3;  //00000111
 105   4                                      c1=(key[i][j]);
 106   4                                      iskey=1;
 107   4                                      if(t==220)
 108   4                                              ch1=c1;
 109   4                                      if(t==230)
 110   4                                              ch2=c1;
 111   4                                      if(t==240)
 112   4                                              ch3=c1;
 113   4                              }
 114   3                      }
 115   2                      t++;
 116   2                      if(t==0xff)
 117   2                              if(iskey)
 118   2                              {
 119   3                                      if((ch1!=ch2)||(ch2!=ch3)||(ch3!=c1))
 120   3                                      {
 121   4                                              t=0;iskey=0;
 122   4                                              goto re_scan;
 123   4      
 124   4                                      }
 125   3                                      else
 126   3                                              return(c1);
 127   3                              }
 128   2              }
 129   1      }
 130          
 131          //*****************************
 132          /*放入一个字节到发送缓冲区
 133          putbyte(unsigned char c)
 134          {
 135                  SBUF=c;
 136                  while(!TI);
 137                  TI=0;
 138          }
 139          */
 140          //******************************
 141          /*放n个字节数据到发送缓冲区
 142          putbytes(uchar *outplace,uint j) 
 143          {       int i;
 144                  for(i=0;i<j;i++)
 145                  {
 146                          putbyte(*outplace);
 147                          outplace++;
 148                  }
 149          }
 150          */
 151          //***************************************
 152          /*发送一个定义在程序存储区的字符串到串口
 153          putstring(uchar  *puts)
 154          {
C51 COMPILER V6.23a  SERIAL                                                                08/24/2003 16:21:16 PAGE 5   

 155                  for(;*puts!=0;puts++)   //遇到停止符0结束
 156                  putbyte(*puts);
 157          }
 158          */
 159          //*************************************
 160          /*发送一个字节的hex码,分成两个字节发。
 161          uchar code hex_[]={"0123456789ABCDEF"};
 162          puthex(unsigned char c)
 163          {
 164                  int  ch;
 165                  ch=(c>>4)&0x0f;
 166                  putbyte(hex_[ch]);
 167                  ch=c&0x0f;
 168                  putbyte(hex_[ch]);
 169          }
 170          */
 171          //*************************************
 172          //从接收缓冲区取一个byte,在调用前检测inbufsign是否为1。
 173          char  getbyte (void)
 174          {
 175   1              char idata c ;
 176   1              while (!inbufsign);      //缓冲区空等待
 177   1              ES=0;
 178   1              c= *getlast;            //取数据
 179   1              getlast++;              //最后取走的数据位置加一
 180   1              inbufful=0;             //输入缓冲区的满标志清零
 181   1              if (getlast==inbuf+ILEN) getlast=inbuf; //地址到顶部回到底部
 182   1              if (getlast==inlast) inbufsign=0;       //地址相等置接收缓冲区空空标志,再取数前要检该标志
 183   1              ES=1;
 184   1              return (c);             //取回数据
 185   1      }
 186          //*****************************************
 187          //串口中断处理
 188          
 189          serial () interrupt 4
 190          {
 191   1              if (RI)
 192   1              {
 193   2                      RI = 0;
 194   2                      if(!inbufful)
 195   2                      {
 196   3                              *inlast= SBUF;            //放入数据
 197   3                              inlast++;                    //最后放入的位置加一
 198   3                              inbufsign=1;
 199   3                              if (inlast==inbuf+ILEN) inlast=inbuf;//地址到顶部回到底部
 200   3                              if (inlast==getlast)    inbufful=1;  //接收缓冲区满置满标志
 201   3                      }
 202   2              }
 203   1      }
 204          
 205          //*****************************
 206          //串口初始化                0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200 110592
 207          void serial_init (void)
 208          {
 209   1              //用t1作波特率
 210   1              
 211   1              SCON  = 0x50;                     // mode 1: 8-bit UART, enable receiver
 212   1              TMOD |= 0x20;                      // timer 1 mode 2: 8-Bit reload
 213   1              //SCON1 = 0x70;
 214   1              //PCON |= 0x80; 
 215   1              TH1 = 0xfa;//fa,          //baud*2    /* reload value 19200 baud
 216   1              TR1   = 1;                         // timer 1 run
C51 COMPILER V6.23a  SERIAL                                                                08/24/2003 16:21:16 PAGE 6   

 217   1              //用t2作波特率
 218   1      /*
 219   1              T2CON=0x30;
 220   1              RCAP2H=0xFF;
 221   1              RCAP2L=0xb8;//70=4800,b8=9600,dc=19200,ee=38400,f4=57600,fa=115200
 222   1              TR2=1;ET2=1;
 223   1              SCON=0x50;//SCON=0xd0;
 224   1      */
 225   1      
 226   1              ES = 1;
 227   1              REN=1;
 228   1              EA=1;
 229   1              SM2=1;          //SM2=1时收到的第9位为1才置位RI标志
 230   1      
 231   1              //TMOD |=0x01;  //th1 auto load 2X8,th0 1X16
 232   1              //TH0=31; TL0=0; //X 32 =1S
 233   1              //TR0=1; ET0=1;
 234   1              //putstring("com is ready!");
 235   1      }
 236          //*****************
 237          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    310    ----
   CONSTANT SIZE    =     20    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   IDATA SIZE       =     36       9
   BIT SIZE         =      2       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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