<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > LED點陣屏(上移)C51程序

          LED點陣屏(上移)C51程序

          作者: 時間:2012-10-31 來源:網(wǎng)絡(luò) 收藏

          先來張效果,圖比較酷吧

          點擊瀏覽下一頁

          點擊瀏覽下一頁

          電路原路圖
          以下程序有部分刪減,請從以下地址下載.單片機型號是,晶振為11.0592.本人測試成功.
          完整程序下載:http://www.51hei.com/ziliao/file/dianzhen2.rar

          //*****************************************************
          //程序功能:
          // LED點陣顯示屏,每行顯示字數(shù)為 LED_NUM個,
          // 總共可顯示字數(shù)為DISP_NUM個,
          // 最大可顯示字數(shù)為65536/32=2048個。
          // 行數(shù)最多可為65536/16=4096行。
          // 循環(huán)時間參數(shù)為DISP_TIME_MOVE
          //MCU:AT89S52
          //
          //程序編寫:Bunagi
          //修改時間:2008/11/11
          //********************************************************
          #include reg51.h>
          //********************************************************
          #define LED_NUM 2 //LED顯示屏字數(shù)
          #define DISP_NUM 12 //顯示內(nèi)容字數(shù)
          #define DISP_TIME_MOVE 3 //循環(huán)時間參數(shù)
          //**********************************************************
          #define uchar unsigned char
          #define uint unsigned int
          //*******************************************************
          sbit LED1_SH=P2^0; //595數(shù)據(jù)傳遞控制,上升沿有效
          sbit LED1_DS=P2^1; //595數(shù)據(jù)傳遞輸入
          sbit LED1_ST=P2^2; //595數(shù)據(jù)輸出控制,上升沿有效
          sbit LED1_OE=P2^3; //595片選
          sbit LED2_SH=P2^4; //595數(shù)據(jù)傳遞控制,上升沿有效
          sbit LED2_DS=P2^5; //595數(shù)據(jù)傳遞輸入
          sbit LED2_ST=P2^6; //595數(shù)據(jù)輸出控制,上升沿有效
          sbit LED2_OE=P2^7; //595片選
          //***********************************************************

          uint disp_up_move; //上下移動控制
          uchar disp_move_time;
          code uchar disp_code[]={
          0x20,0x08,0x17,0xFC,0x10,0x00,0x03,0xF8, //福
          0xFA,0x08,0x0A,0x08,0x13,0xF8,0x38,0x04,
          0x57,0xFE,0x94,0x44,0x14,0x44,0x17,0xFC,
          0x14,0x44,0x14,0x44,0x17,0xFC,0x14,0x04,
          0x10,0x04,0x10,0x84,0x10,0x84,0x10,0x84, //州

          };

          //*********************************************************
          void disp();
          void sent(uchar sent_dat);
          void delay(uchar temp);
          //****************************************************

          void main()
          {
          P2=0X00;
          TR0=0;
          TL0=0; //20MS
          TH0=0;
          TMOD=0X01; //方式1
          EA=1;
          ET0=1;
          TR0=1;
          while(1)
          {
          disp();
          }
          }

          //**************************************************
          //LED掃描顯示程序。
          //顯示方式為逐字掃描
          //*************************************************

          void disp()
          {
          uchar i,j;
          uint move_ctrl;
          LED1_DS=0;
          LED1_SH=0;
          LED1_ST=0;
          LED1_OE=0;
          LED2_DS=0;
          LED2_SH=0;
          LED2_ST=0;
          LED2_OE=0;
          for(j=0;j8;j++)
          {

          for(i=LED_NUM;i>=1;i--)
          {
          //**************************************字符下半部分***************************************************
          if((disp_up_move+9+j)>((DISP_NUM/LED_NUM)*16)) //判斷要顯示的字符是否已超出字庫
          {
          sent(0x00);
          sent(0x00);
          }

          else
          {
          if((disp_up_move+8+j)>15) //判斷當前行顯示內(nèi)容是否為下一屏內(nèi)容
          {

          move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+8+j)/16); //判斷顯示字符的下半部第一個字節(jié)位置
          // 第N個字符 一屏字符大小*當前顯示行為第幾屏
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)+1]);
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)]);
          /*
          如果有多于一行的LED點陣條,則程序在此添加:
          move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+8+j)/16)+LED_NUM*32*第幾行;
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)+1]);
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j+8)%16)]);
          ......
          */
          }
          else
          {
          move_ctrl=32*(i-1)+2*(disp_up_move%16);
          sent(disp_code[move_ctrl+16+j*2+1]);
          sent(disp_code[move_ctrl+16+j*2]);
          /*
          如果有多于一行的LED點陣條,則程序在此添加:
          move_ctrl=32*(i-1)+2*(disp_up_move%16)+LED_NUM*32*第幾行;
          sent(disp_code[move_ctrl+16+j*2+1]);
          sent(disp_code[move_ctrl+16+j*2]);
          ......

          */
          }
          }

          //***********************************字符上半部分***************************************************
          if((disp_up_move+j+1)>(DISP_NUM/LED_NUM)*16)
          {
          sent(0x00);
          sent(0x00);
          }
          else
          {
          if((disp_up_move+j)>15)
          {
          move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+j)/16);
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)+1]);
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)]);
          /*
          如果有多于一行的LED點陣條,則程序在此添加:
          move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+j)/16)+LED_NUM*32*第幾行;
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)+1]);
          sent(disp_code[move_ctrl+2*(((disp_up_move%16)+j)%16)]);
          ......
          */
          }
          else
          {
          move_ctrl=32*(i-1)+2*(disp_up_move%16);
          sent(disp_code[move_ctrl+j*2+1]);
          sent(disp_code[move_ctrl+j*2]);
          /*

          如果有多于一行的LED點陣條,則程序在此添加:
          move_ctrl=32*(i-1)+2*(disp_up_move%16)+LED_NUM*32*第幾行;
          sent(disp_code[move_ctrl+j*2+1]);
          sent(disp_code[move_ctrl+j*2]);
          ......
          */
          }
          }
          }


          LED1_SH=1;
          LED1_SH=0;
          LED1_DS=1;
          LED1_ST=1;
          LED1_ST=0;
          LED2_ST=1;
          LED2_ST=0;
          delay(1);
          }

          LED1_OE=1;
          LED2_OE=1;

          }

          //***************************************************
          void sent(uchar sent_dat)
          {
          uchar i;
          for(i=0;i8;i++)
          {
          LED2_DS=sent_dat0x01;
          sent_dat=sent_dat>>1;
          LED2_SH=1;
          LED2_SH=0;
          }

          }

          //************************************************
          void delay(uchar temp)
          {
          uchar i,j;
          for(i=0;itemp;i++)
          for(j=0;j100;j++);
          }

          //********************************************

          void t0() interrupt 1
          {
          TR0=0;
          TL0=0;
          TH0=0;
          if(disp_move_time++>DISP_TIME_MOVE)
          {
          disp_move_time=0;
          if(disp_up_move++ >((DISP_NUM/LED_NUM)*16)-1)disp_up_move=0;
          }
          TR0=1;
          }



          關(guān)鍵詞: LED點陣屏 C51程序 at89s52

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();