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

📄 xqdz.lst

📁 点阵实物程序(16-32两块级联程序)
💻 LST
📖 第 1 页 / 共 2 页
字号:
 137   1      }
 138          
 139          
 140          void main()
 141          {
 142   1              uchar i;
 143   1              uint data_temp[3];
 144   1              uint temp,temp1;
 145   1              uchar hanzi;
 146   1              uchar han;
 147   1              uchar shift=1;
 148   1              for(i=0;i<64;i++) disp_buff[i]=0xff;
 149   1              T0_Set();
 150   1              while(1){
 151   2                      for(hanzi=0;hanzi<22;hanzi++){  //最多显示多少个字
 152   3                              for(shift=0;shift<16;shift++){  //一个字移位16位
 153   4                                      for(han=0;han<16;han++){   //一个字有16行数据                   
 154   5                                              data_temp[0]=ziku_table[(hanzi*32)+(han*2)+1]*0x100 + ziku_table[(hanzi*32)+(han*2)];
 155   5                                              data_temp[1]=ziku_table[((hanzi+1)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+1)*32)+(han*2)];
 156   5                                              data_temp[2]=ziku_table[((hanzi+2)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+2)*32)+(han*2)];
 157   5                                              /*
 158   5                                              //左往右移动
 159   5                                              temp = data_temp[0];
 160   5                                              temp1 = data_temp[1];
 161   5                                              for(i=shift;i>0;i--){
 162   5                                                      temp = (temp<<1) ;
 163   5                                                      if((temp1&0x8000)!=0) temp = temp + 0x0001; 
 164   5                                                      temp1 = (temp1<<1);
 165   5                                                      }
 166   5                                              disp_buff[han*4+3]=temp/0x100;
 167   5                                              disp_buff[han*4+2]=temp%0x100;
 168   5                                              //----------------------                                
 169   5                                              temp = data_temp[1];
 170   5                                              temp1 = data_temp[2];
 171   5                                              for(i=shift;i>0;i--){
 172   5                                                      temp = (temp<<1) ;
 173   5                                                      if((temp1&0x8000)!=0) temp = temp + 0x0001; 
 174   5                                                      temp1 = (temp1<<1);
 175   5                                                      }
 176   5                                              disp_buff[han*4+1]=temp/0x100;
 177   5                                              disp_buff[han*4]=temp%0x100;
 178   5                                              */
 179   5      
C51 COMPILER V9.00   XQDZ                                                                  11/07/2012 12:01:55 PAGE 4   

 180   5                                              //右往左移动
 181   5                                              temp = data_temp[0];
 182   5                                              temp1 = data_temp[1];
 183   5                                              for(i=shift;i>0;i--){
 184   6                                                      temp = (temp>>1) ;
 185   6                                                      if((temp1&0x0001)!=0) temp = temp + 0x8000; 
 186   6                                                      temp1 = (temp1>>1);
 187   6                                                      } 
 188   5                                              disp_buff[han*4+1]=temp/0x100;
 189   5                                              disp_buff[han*4+0]=temp%0x100;
 190   5                                              //------------------------------
 191   5                                              temp = data_temp[1];
 192   5                                              temp1 = data_temp[2];
 193   5                                              for(i=shift;i>0;i--){
 194   6                                                      temp = (temp>>1) ;
 195   6                                                      if((temp1&0x0001)!=0) temp = temp + 0x8000; 
 196   6                                                      temp1 = (temp1>>1);
 197   6                                                      }
 198   5                                              disp_buff[han*4+3]=temp/0x100;
 199   5                                              disp_buff[han*4+2]=temp%0x100;                          
 200   5                                              }
 201   4                                      delay_1ms(200); //移位速度
 202   4                                      }
 203   3                              }
 204   2                      }
 205   1      }
 206          
 207          
 208          
 209          
 210          void SLED_Disp() interrupt 1 using 3
 211          {
 212   1              uchar i;
 213   1              uchar data_buff;
 214   1              uchar temp;
 215   1              uchar zishu;
 216   1              uchar code Module_Quantity=2; //模块数量(意思是我的两个16*16的模块级联,也就相当于16*32)
 217   1              uchar han;      
 218   1          TH0  = (65536-1000)/256;    //中断初始值(更改后面的1000可以改变现实移动的速度快慢)
 219   1          TL0  = (65536-1000)/256;
 220   1              Latch_port = 0;  //HC595锁定输出,避免数据传输过程中,屏数据变化从而显示闪烁
 221   1              CLK_port = 0;
 222   1              han=disp_han; //(disp_han为当前显示行)
 223   1              for(zishu=Module_Quantity;zishu>0;zishu--){                     //此语句代表两个模块循环扫描显示
 224   2                      temp = disp_han*Module_Quantity*2 + (zishu-1)*2+1;       //扫描显示后一个模块的8行显示注意这条语句与下面temp
             - = disp_han*Module_Quantity*2 + (zishu-1)*2;的区别
 225   2                      data_buff = disp_buff[temp];
 226   2                      for(i=0;i<8;i++){                                                                         //扫描显示后8行也就是8-16行
 227   3                              if((data_buff&0x80)!=0) DA_in_port = 1;
 228   3                              else DA_in_port = 0;
 229   3                              CLK_port = 1;
 230   3                              CLK_port = 0;
 231   3                              data_buff <<= 1;
 232   3                              }
 233   2                      temp = disp_han*Module_Quantity*2 + (zishu-1)*2;  //扫描显示前一个模块的8行
 234   2                      data_buff = disp_buff[temp];
 235   2                      for(i=0;i<8;i++){                                                                  //扫面显示1-8行
 236   3                              if((data_buff&0x80)!=0) DA_in_port = 1;
 237   3                              else DA_in_port = 0;                                    //时序问题自己可以参照一下芯片资料
 238   3                              CLK_port = 1;
 239   3                              CLK_port = 0;
 240   3                              data_buff <<= 1;
C51 COMPILER V9.00   XQDZ                                                                  11/07/2012 12:01:55 PAGE 5   

 241   3                              }
 242   2                      }
 243   1                       
 244   1              EN_port = 1;    //关屏显示,原理为使HC138输出全为1,从而三极管截止,点阵不显示
 245   1              ABCD_port = (ABCD_port & 0x0f)|(han<<4);  //HC138译码输出
 246   1              Latch_port = 1; //允许HC595数据输出到Q1-Q8端口
 247   1              EN_port = 0;    //HC138输出有效,打开显示
 248   1              Latch_port = 0; //锁定HC595数据输出
 249   1      
 250   1              disp_han++;     //显示下一行数据
 251   1              if(disp_han>=16) disp_han=0;
 252   1      }
 253          
 254          
 255          
 256          
 257          
 258          
 259          
 260          
 261          
 262          
 263          
 264          
 265          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    664    ----
   CONSTANT SIZE    =    737    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     65       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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