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

📄 led点阵显示屏源程序.c

📁 本点阵电子显示屏系统以STC89C52单片机作为控制核心
💻 C
📖 第 1 页 / 共 3 页
字号:
          for(i=0;i<1000;i++)   //延时一定时间后再更新显示缓冲区
             for(j=0;j<20;j++)
             {
               if(showbuf_sign==0)
                  {
                   show_static(show_buffer1);  //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
                   }
              else
                   {
                   show_static(show_buffer2);
                    }
             }
         }
    //show_buffer1={};  //不能给二维数组同时赋值,注意
    //  show_buffer2=;
    }


/*-----------------------------显示右移子程序--------------------------*/
/*
**************************************************************************
**子程序入口:需要右移显示的数据的首地址,不可以是显示缓冲区的地址,
**            数据必须是二维数组,字节数只能16*8字节
*子程序功能:显示内容右移,开始部分和结束部分以空白填充;程序只能滚动显示一次
***************************************************************************
*/
void show_right(storep3)
    uchar xdata **storep3;
    {
     uint num=8+8; //显示缓冲区更新的次数为16次 ,数据长8字节
     uint i,j,m;
     for(i=0;i<16;i++)      //对两个显示缓冲区清零
        {
        for(j=0;j<8;j++)
            {
            show_buffer1[i][j]=0x00;
            show_buffer2[i][j]=0x00;
            }
        }
        
     TMOD=TMOD&&0xf0;        //计数器0工作在方式1, 
     TMOD=TMOD||0x01;        //声明:计数器0只有各个显示子程序可以使用,
//其他子程序只能使用计数器0或计数器2
     TH0=(65536-25000)/256;  //晶振12MHZ,计数25000次,1S中断40次
     TL0=(65536-25000)%256;
     EA=1 ;                //CPU开中断,定时器0开中断
     ET0=1;
     PT0=0;               //定时器0为中断低优先级
     TR0=1;               //启动定时器0

     showbuf_sign=0;   //程序开始时使用show_buffer1显示缓冲区
     for(m=0;m<num;m++)
         {
         if(showbuf_sign==0)  //正在显示显示缓冲区show_buffer1中的内容,
//则更新show_buffer2中的内容
             {
              for(i=0;i<=m;i++)   //滚动右移显示移动的第m次,需要移动m列数据
                         //需要移位的个数,如第一次仅需更新显示缓冲区的第一位
                  {
                    for(j=0;j<16;j++)
                        {
                         show_buffer2[j][i]=storep3[j][7-(m-i)];
                        }
                  }
              }
          else
               {
                for(i=0;i<=m;i++)  //滚动右移显示移动的第m次,需要移动m列数据
                       //需要移位的个数,如第一次仅需更新显示缓冲区的最后一位
                  {
                    for(j=0;j<16;j++)
                        {
                          show_buffer1[j][i]=storep3[j][7-(m-i)];
                        }
                  }
          //数据完成一次移动
          showbuf_sign=~showbuf_sign;  //显示区标志位取反,
//显示另外一个显示缓冲区中的内容
               }
          for(i=0;i<100;i++)
             for(j=0;j<20;j++)
             {
               if(showbuf_sign==0)
                  {
                   show_static(show_buffer1);  //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
                   }
              else
                   {
                   show_static(show_buffer2);
                    }
             }
         }
     for(i=0;i<100;i++)   //全部数据已经移到显示缓冲区,需要全屏
//静态显示一段时间
         {
         if(showbuf_sign==0)
                  {
                   show_static(show_buffer1);  //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
                   }
              else
                   {
                   show_static(show_buffer2);
                    }
         }
    }


/*-----------------------------上开屏子程序-------------------------*/
/*
*************************************************************************
**子程序入口:需要进行上开屏显示的数据的首地址,不可以是显示缓冲区的地址,
**            数据必须是二维数组,字节数只能16*8字节
*子程序功能:字体从上向下开屏,只可以显示4个汉字(或等量的字符),开完屏后进
**           一段时间的静态显示
*************************************************************************
*/
void show_up(storep4)
    uchar xdata **storep4;
    {
     uint num=16; //显示缓冲区更新的次数为16次 ,即:屏幕的宽度
     uint i,j,m;
     for(i=0;i<16;i++)      //对两个显示缓冲区清零
        {
        for(j=0;j<8;j++)
            {
            show_buffer1[i][j]=0x00;
            show_buffer2[i][j]=0x00;
            }
        }
        
     TMOD=TMOD&&0xf0;        //计数器0工作在方式1, 
     TMOD=TMOD||0x01;       
     TH0=(65536-25000)/256;  //晶振12MHZ,计数25000次,1S中断40次
     TL0=(65536-25000)%256;
     EA=1 ;                //CPU开中断,定时器0开中断
     ET0=1;
     PT0=0;               //定时器0为中断低优先级
     TR0=1;               //启动定时器0

     showbuf_sign=0;   //程序开始时使用show_buffer1显示缓冲区
     for(m=0;m<num;m++)
         {
         if(showbuf_sign==0)  //正在显示显示缓冲区show_buffer1中的内容,则更新show_buffer2中的内容
             {
              for(i=0;i<=m;i++)   //上开屏显示移动的第m次,需要移动m列数据
                         //需要移位的个数,如第一次仅需更新显示缓冲区的第一位
                  {
                    for(j=0;j<16;j++)
                        {
                         show_buffer2[i][j]=storep4[15-(m-i)][j];  
//一行行的更新
                        }
                  }
              }
          else
               {
                for(i=0;i<=m;i++)   //上开屏显示移动的第m次,需要移动m列数据
                         //需要移位的个数,如第一次仅需更新显示缓冲区的第一位
                  {
                    for(j=0;j<16;j++)
                        {
                          show_buffer1[i][j]=storep4[15-(m-i)][j];
                        }
                  }
          //数据完成一次移动
          showbuf_sign=~showbuf_sign;  //显示区标志位取反,显示另外一个
//显示缓冲区中的内容
               }
          for(i=0;i<50;i++)
             for(j=0;j<20;j++)
             {
               if(showbuf_sign==0)
                  {
                   show_static(show_buffer1);  //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
                   }
              else
                   {
                   show_static(show_buffer2);
                    }
             }
         }
     for(i=0;i<100;i++)   //全部数据已经移到显示缓冲区,需要全屏
//静态显示一段时间
         {
         if(showbuf_sign==0)
                  {
                   show_static(show_buffer1);  //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
                   }
              else
                   {
                   show_static(show_buffer2);
                    }
         }
    }


/*-----------------------------下开屏子程序----------------------------*/
/*
*************************************************************************
**子程序入口:需要进行下开屏显示的数据的首地址,不可以是显示缓冲区的地址,
**            数据必须是二维数组,字节数只能16*8字节
**子程序功能:字体从下向上开屏,只可以显示4个汉字(或等量的字符),开完屏后进**            行一段时间的静态显示
**************************************************************************
*/
void show_down(storep5)
    uchar xdata **storep5;
    {
     uint num=16; //显示缓冲区更新的次数为16次 ,即:屏幕的宽度
     uint i,j,m;
     for(i=0;i<16;i++)      //对两个显示缓冲区清零
        {
        for(j=0;j<8;j++)
            {
            show_buffer1[i][j]=0x00;
            show_buffer2[i][j]=0x00;
            }
        }
        
     TMOD=TMOD&&0xf0;        //计数器0工作在方式1, 
     TMOD=TMOD||0x01;       
     TH0=(65536-25000)/256;  //晶振12MHZ,计数25000次,1S中断40次
     TL0=(65536-25000)%256;
     EA=1 ;                //CPU开中断,定时器0开中断
     ET0=1;
     PT0=0;               //定时器0为中断低优先级
     TR0=1;               //启动定时器0

     showbuf_sign=0;   //程序开始时使用show_buffer1显示缓冲区
     for(m=0;m<num;m++)
         {
         if(showbuf_sign==0)  //正在显示显示缓冲区show_buffer1中的内容,
//则更新show_buffer2中的内容
             {
              for(i=0;i<=m;i++)   //下开屏显示移动的第m次,需要移动m列数据
                       //需要移位的个数,如第一次仅需更新显示缓冲区的最后一位
                  {
                    for(j=0;j<16;j++)
                        {
                         show_buffer2[15-(m-i)][j]=storep5[i][j];  
//一行行的更新
                        }
                  }
              }
          else
               {
                for(i=0;i<=m;i++)   //下开屏显示移动的第m次,需要移动m列数据
                       //需要移位的个数,如第一次仅需更新显示缓冲区的最后一位
                  {
                    for(j=0;j<16;j++)
                        {
                          show_buffer1[15-(m-i)][j]=storep5[i][j];
                        }
                  }
          //数据完成一次移动
          showbuf_sign=~showbuf_sign;  //显示区标志位取反,显示另外一个
//显示缓冲区中的内容
               }
          for(i=0;i<50;i++)
             for(j=0;j<20;j++)
             {
               if(showbuf_sign==0)
                  {
                   show_static(show_buffer1);  //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
                   }
              else
                   {
                   show_static(show_buffer2);
                    }
             }
         }
     for(i=0;i<100;i++)   //全部数据已经移到显示缓冲区,需要全屏
//静态显示一段时间
         {
         if(showbuf_sign==0)
                  {
                   show_static(show_buffer1);  //显示缓冲区标志位等于0,
//显示show_buffer1中的内容
                   }
              else
                   {
                   show_static(show_buffer2);
                    }
         }
    }


/*---------------------------上展开屏子程序-------------------------*/
/*
********************************************************************
**子程序入口:需要进行上展开屏显示的数据的首地址,不可以是显示缓冲区的地址,
**            数据必须是二维数组,字节数只能16*8字节
**子程序功能:字体从上到下逐渐展开显示,只可以显示4个汉字(或等量的字符),开**           完屏后进行一段时间的静态显示
********************************************************
*/
void show_upspread(storep6)
    uchar xdata **storep6;
    {
     uint num=16; //显示缓冲区更新的次数为16次 ,即:屏幕的宽度
     uint i,j,m;
     for(i=0;i<16;i++)      //对两个显示缓冲区清零
        {
        for(j=0;j<8;j++)
            {
            show_buffer1[i][j]=0x00;
            show_buffer2[i][j]=0x00;
            }
        }
        
     TMOD=TMOD&&0xf0;        //计数器0工作在方式1, 
     TMOD=TMOD||0x01;       
     TH0=(65536-25000)/256;  //晶振12MHZ,计数25000次,1S中断40次
     TL0=(65536-25000)%256;
     EA=1 ;                //CPU开中断,定时器0开中断
     ET0=1;
     PT0=0;               //定时器0为中断低优先级
     TR0=1;               //启动定时器0

     showbuf_sign=0;   //程序开始时使用show_buffer1显示缓冲区

⌨️ 快捷键说明

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