久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

LED點陣屏(上移)C51程序

作者:佚名   來源:本站原創   點擊數:  更新時間:2010年05月17日   【字體:

先來張效果,圖比較酷吧


 

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

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

  move_ctrl=32*(i-1)+(32*LED_NUM)*((disp_up_move+8+j)/16); //判斷顯示字符的下半部第一個字節位置
  //  第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;i<8;i++)
{
  LED2_DS=sent_dat&0x01;
  sent_dat=sent_dat>>1;
  LED2_SH=1;
  LED2_SH=0;
}

}

//********************************************************************
void delay(uchar temp)
{
uchar i,j;
for(i=0;i<temp;i++)
  for(j=0;j<100;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;
}
 

 

關閉窗口

相關文章

主站蜘蛛池模板: 国产在线第一页 | 日本午夜视频 | 久久小视频 | 人人鲁人人莫人人爱精品 | 亚洲国产高清高潮精品美女 | 一级黄色片在线看 | 国产激情在线 | 特级丰满少妇一级aaaa爱毛片 | www.国产| 91视频网址 | 视频一区二区三区中文字幕 | 久久久免费电影 | 亚洲视频一区在线播放 | 国产乱肥老妇国产一区二 | 伊人网综合在线观看 | 午夜爽爽爽男女免费观看 | 国产精品九九九 | 国产午夜在线观看 | 91免费看片 | 亚洲欧美日韩在线 | 欧美国产精品一区二区三区 | 在线播放日韩 | 国产一区影院 | 欧美日韩国产三级 | 99国产精品99久久久久久粉嫩 | 天天搞天天操 | 欧美色视频免费 | 亚洲成人999 | 最新中文字幕久久 | 精品久久久久久亚洲综合网 | 中国av在线免费观看 | 在线观看免费av网 | 一区二区在线不卡 | 欧美一级在线 | 午夜丰满少妇一级毛片 | www亚洲免费国内精品 | 草草视频在线播放 | 久久最新网址 | 黄色毛片大全 | 欧美久久一区 | 欧美群妇大交群中文字幕 |