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

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

點陣16*32綜合(間斷、上移、下移、左移、右移、左拉、右拉)C程序

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

點陣16*32綜合(間斷、上移、下移、左移、右移、左拉、右拉)C程序,硬件電路:行驅動74HC154+S8550三極管,列驅動74HC595,具體原理圖祥見:http://www.zg4o1577.cn/mcu/1522.html  

具體視頻效果祥見:http://www.tudou.com/programs/view/8qoTrWwtGzg/

程序代碼下載:http://www.zg4o1577.cn/f/dz88.rar
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define LINE P0//定義行線IO口,即74HC154控制端
#define shudu 4//字移動的速度
sbit DATA=P1^4;//74HC595數據端
sbit CLK=P1^5;//74HC595移位脈沖端
sbit CLKR=P1^6;//74HC595數據鎖存端
uchar move;//移動幾位變量
uchar line,ji;//行變量
uint word;//字節變量
uchar BUF[6];//4組緩存數組以便動態更改數據
uchar code table[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x10,0x3F,0xF8,0x04,0x10,0x04,0x14,0xFF,0xFE,0x04,0x10,0x04,0x10,
0x3F,0xF0,0x04,0x10,0x04,0x00,0x08,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,
0x01,0x00,0x01,0x08,0x7F,0xFC,0x01,0x00,0x3F,0xF8,0x01,0x00,0xFF,0xFE,0x00,0x10,
0x1F,0xF8,0x10,0x10,0x1F,0xF0,0x10,0x10,0x1F,0xF0,0x10,0x10,0x10,0x50,0x10,0x20,

0x01,0x00,0x01,0x00,0x01,0xF8,0x01,0x00,0x01,0x10,0x1F,0xF8,0x10,0x10,0x10,0x10,
0x10,0x10,0x1F,0xF0,0x10,0x10,0x01,0x10,0x28,0x88,0x24,0x44,0x44,0x44,0x00,0x00,
0x00,0x80,0xF8,0x80,0x88,0x80,0x97,0xFC,0xA1,0x00,0x91,0x40,0x8A,0x40,0x8F,0xFC,
0x88,0x40,0xA8,0x40,0x97,0xFE,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,0x80,0x40,

0x24,0x04,0x34,0x04,0x24,0x24,0x3F,0xA4,0x44,0x24,0x04,0x24,0x7F,0xA4,0x04,0x24,
0x3F,0xA4,0x24,0xA4,0x24,0xA4,0x24,0xA4,0x24,0x84,0x27,0x84,0x05,0x14,0x04,0x08,
0x08,0x80,0x0C,0x80,0x09,0x00,0x13,0xFE,0x12,0x80,0x34,0x88,0x50,0xFC,0x90,0x80,
0x10,0x80,0x10,0x84,0x10,0xFE,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0x80,

0x00,0xA0,0x00,0x90,0x00,0x80,0x3F,0xFE,0x20,0x80,0x20,0x80,0x3E,0x88,0x22,0x8C,
0x22,0x48,0x22,0x50,0x22,0x20,0x2A,0x60,0x44,0x92,0x41,0x0A,0x86,0x06,0x00,0x02,
0x00,0x20,0x00,0x20,0x7F,0x20,0x08,0x20,0x0B,0xFC,0x08,0x24,0x08,0x24,0x08,0x44,
0x09,0x44,0x0E,0x44,0xF0,0x84,0x40,0x84,0x01,0x04,0x02,0x78,0x04,0x10,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};//字模數組
uchar code table1[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

/* 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x00,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x02,0x08,0x3F,0xF8,0x02,0x08,0x01,0x00,
0x7F,0xFE,0x1F,0xF0,0x02,0x08,0x01,0x00,0x02,0x08,0xFF,0xFE,0x3F,0xF8,0x00,0x00,
0x02,0x08,0x1F,0xF0,0x02,0x00,0x10,0x10,0x04,0x00,0x1F,0xF0,0x04,0x00,0x10,0x10,
0x08,0x00,0x1F,0xF0,0x10,0x00,0x10,0x10,0x20,0x00,0x10,0x50,0x40,0x00,0x10,0x20,

/*; 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x01,0x00,0x00,0x80,0x01,0x00,0xF8,0x80,0x01,0xF8,0x88,0x80,0x01,0x00,0x97,0xFC,
0x01,0x10,0xA1,0x00,0x1F,0xF8,0x91,0x40,0x10,0x10,0x8A,0x40,0x10,0x10,0x8F,0xFC,
0x10,0x10,0x88,0x40,0x1F,0xF0,0xA8,0x40,0x10,0x10,0x97,0xFE,0x01,0x10,0x80,0x40,
0x28,0x88,0x80,0x40,0x24,0x44,0x80,0x40,0x44,0x44,0x80,0x40,0x00,0x00,0x80,0x40,

/*; 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x24,0x04,0x08,0x80,0x34,0x04,0x0C,0x80,0x24,0x24,0x09,0x00,0x3F,0xA4,0x13,0xFE,
0x44,0x24,0x12,0x80,0x04,0x24,0x34,0x88,0x7F,0xA4,0x50,0xFC,0x04,0x24,0x90,0x80,
0x3F,0xA4,0x10,0x80,0x24,0xA4,0x10,0x84,0x24,0xA4,0x10,0xFE,0x24,0xA4,0x10,0x80,
0x24,0x84,0x10,0x80,0x27,0x84,0x10,0x80,0x05,0x14,0x10,0x80,0x04,0x08,0x10,0x80,
/*; 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x00,0xA0,0x00,0x20,0x00,0x90,0x00,0x20,0x00,0x80,0x7F,0x20,0x3F,0xFE,0x08,0x20,
0x20,0x80,0x0B,0xFC,0x20,0x80,0x08,0x24,0x3E,0x88,0x08,0x24,0x22,0x8C,0x08,0x44,
0x22,0x48,0x09,0x44,0x22,0x50,0x0E,0x44,0x22,0x20,0xF0,0x84,0x2A,0x60,0x40,0x84,
0x44,0x92,0x01,0x04,0x41,0x0A,0x02,0x78,0x86,0x06,0x04,0x10,0x00,0x02,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
uchar code table2[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

 


/*; 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x00,0xA0,0x00,0x20,0x00,0x90,0x00,0x20,0x00,0x80,0x7F,0x20,0x3F,0xFE,0x08,0x20,
0x20,0x80,0x0B,0xFC,0x20,0x80,0x08,0x24,0x3E,0x88,0x08,0x24,0x22,0x8C,0x08,0x44,
0x22,0x48,0x09,0x44,0x22,0x50,0x0E,0x44,0x22,0x20,0xF0,0x84,0x2A,0x60,0x40,0x84,
0x44,0x92,0x01,0x04,0x41,0x0A,0x02,0x78,0x86,0x06,0x04,0x10,0x00,0x02,0x00,0x00,

 

/*; 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x24,0x04,0x08,0x80,0x34,0x04,0x0C,0x80,0x24,0x24,0x09,0x00,0x3F,0xA4,0x13,0xFE,
0x44,0x24,0x12,0x80,0x04,0x24,0x34,0x88,0x7F,0xA4,0x50,0xFC,0x04,0x24,0x90,0x80,
0x3F,0xA4,0x10,0x80,0x24,0xA4,0x10,0x84,0x24,0xA4,0x10,0xFE,0x24,0xA4,0x10,0x80,
0x24,0x84,0x10,0x80,0x27,0x84,0x10,0x80,0x05,0x14,0x10,0x80,0x04,0x08,0x10,0x80,

/*; 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x01,0x00,0x00,0x80,0x01,0x00,0xF8,0x80,0x01,0xF8,0x88,0x80,0x01,0x00,0x97,0xFC,
0x01,0x10,0xA1,0x00,0x1F,0xF8,0x91,0x40,0x10,0x10,0x8A,0x40,0x10,0x10,0x8F,0xFC,
0x10,0x10,0x88,0x40,0x1F,0xF0,0xA8,0x40,0x10,0x10,0x97,0xFE,0x01,0x10,0x80,0x40,
0x28,0x88,0x80,0x40,0x24,0x44,0x80,0x40,0x44,0x44,0x80,0x40,0x00,0x00,0x80,0x40,

/* 當前所選字體下一個漢字對應的點陣為:  寬度x高度=32x16,  調整后為: 32x16*/
0x00,0x00,0x01,0x00,0x3F,0xF8,0x01,0x00,0x02,0x08,0x3F,0xF8,0x02,0x08,0x01,0x00,
0x7F,0xFE,0x1F,0xF0,0x02,0x08,0x01,0x00,0x02,0x08,0xFF,0xFE,0x3F,0xF8,0x00,0x00,
0x02,0x08,0x1F,0xF0,0x02,0x00,0x10,0x10,0x04,0x00,0x1F,0xF0,0x04,0x00,0x10,0x10,
0x08,0x00,0x1F,0xF0,0x10,0x00,0x10,0x10,0x20,0x00,0x10,0x50,0x40,0x00,0x10,0x20,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
/******************************************/
/***************延時子程序*****************/
/******************************************/
void delay(uchar z)
{
 uchar x,y;
 for(x=8;x>0;x--)
 for(y=z;y>0;y--);
}
/********************************/
/**74HC595移位寄存器送數子函數***/
/********************************/
void song(uchar z)//帶參數函數
{
 uchar num,hang;//定義變量
 hang=z;//將形參給變量
 for(num=0;num<8;num++)//移動8次將數據發送完畢
 {
  if(hang&0x01==1)//將高7位屏蔽掉,保留最低位判斷
  DATA=1;//為1就將74HC595數據端置1
  else
  DATA=0;//否則給0
  CLK=0;//上升沿送走數據
  CLK=1;//高電平形成上升沿
  hang>>=1;//將數移走一位
 }
}
/********************************/
/*裝一線數據子函數(即一行數據)*/
/********************************/
void yixian()
{
 uchar s;
 for(s=0;s<3;s++)/*循環2次,得到第1個字(代碼存在數組1與2中)
與第2個字(代碼存在數組2與3中)的某一行數值*/
 {
  BUF[s*2]=table[word+(32*s)+(line*2)];//左半屏代碼,line表示行數,word表示字數
  BUF[s*2+1]=table[word+(32*s+1)+(line*2)];//右半屏代碼
 }
}

/*************************************************************************/
/*******************************間斷子程序*********************************/
/*************************************************************************/
void jian()
{
 uchar j;
 while(word<80)//循環80次一個字16次即5*16
 {
  for(j=0;j<50;j++)//1個字顯示的速度
  {
   ji=word;//將變量給它
   for(line=0;line<16;line++)//循環16次得到一整屏字
   {
    song(~table1[ji*4+3]);//發送第2個字右半屏數
    song(~table1[ji*4+2]);//發送第2個字左半屏的數
    song(~table1[ji*4+1]);//發送第1個右半屏的數
    song(~table1[ji*4]);//發送第1個字左半屏的數
    ji++;//接著發下一行
    CLKR=1;//在74HC595處鎖存起來
    CLKR=0;
    CLKR=1;
    LINE=line;//打開行
    delay(10);
   }
  }
  word+=16;//顯示下一個字
 }
}
/*************************************************************************/
/*******************************上移子程序*********************************/
/*************************************************************************/
void shang()
{
 uchar j;
 while(word<80)//循環80次一個字16次即5*16
 {
  for(j=0;j<10;j++)//1個字顯示的速度
  {
   ji=word;//將變量給它
   for(line=0;line<16;line++)//循環16次得到一整屏字
   {
    song(~table1[ji*4+3]);//發送第2個字右半屏數
    song(~table1[ji*4+2]);//發送第2個字左半屏的數
    song(~table1[ji*4+1]);//發送第1個右半屏的數
    song(~table1[ji*4]);//發送第1個字左半屏的數
    ji++;//接著發下一行
    CLKR=1;//在74HC595處鎖存起來
    CLKR=0;
    CLKR=1;
    LINE=line;//打開行
    delay(5);
   }
  }
  word+=1;//移一位形成上移
 }
}
/*************************************************************************/
/*******************************下移子程序*********************************/
/*************************************************************************/
void xia()
{
 uchar j;
 while(word>0)//循環80次一個字16次即5*16
 {
  for(j=0;j<10;j++)//1個字顯示的速度
  {
   ji=word;//將變量給它
   for(line=0;line<16;line++)//循環16次得到一整屏字
   {
    song(~table2[ji*4+3]);//發送第2個字右半屏數
    song(~table2[ji*4+2]);//發送第2個字左半屏的數
    song(~table2[ji*4+1]);//發送第1個右半屏的數
    song(~table2[ji*4]);//發送第1個字左半屏的數
    ji++;//接著發下一行
    CLKR=1;//在74HC595處鎖存起來
    CLKR=0;
    CLKR=1;
    LINE=line;//打開行
    delay(5);
   }
  }
  word-=1;//移一位形成上移
 }
}
/*************************************************************************/
/*******************************左移子程序*********************************/
/*************************************************************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai()
{
 uchar temp,yi;
 if(move<8)//處理移動次數小于8次的部分
 {
  yi=move;
  temp=(BUF[3]<<yi)|(BUF[4]>>(8-yi));/*將第2個字的右半屏數左移yi次,
  然后或上第3個字左半屏的8-yi次數,注此句是處理第2個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<yi)|(BUF[3]>>(8-yi));/*將第2個字的左半屏數左移yi次,
  然后或上第2個字右半屏的8-yi次數,注此句是處理第2個字左半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));/*將第1個字的右半屏數左移yi次,
  然后或上第2個字左半屏的8-yi次數,注此句是處理第1個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[0]<<yi)|(BUF[1]>>(8-yi));/*將第1個字的左半屏數左移yi次,
  然后或上第1個字右半屏的8-yi次數,注此句是處理第1個字左半屏的數*/
  song(~temp);//發送給74HC595
 }
 else//處理移動次數小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[4]<<yi)|(BUF[5]>>(8-yi));/*將第3個字的左半屏數左移yi次,
  然后或上第3個字右半屏的8-yi次數,注此句是處理第2個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[3]<<yi)|(BUF[4]>>(8-yi));/*將第2個字的右半屏數左移yi次,
  然后或上第3個字左半屏的8-yi次數,注此句是處理第2個字左半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<yi)|(BUF[3]>>(8-yi));/*將第2個字的左半屏數左移yi次,
  然后或上第2個字右半屏的8-yi次數,注此句是處理第1個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));/*將第1個字的右半屏數左移yi次,
  然后或上第2個字左半屏的8-yi次數,注此句是處理第1個字左半屏的數*/
  song(~temp);//發送給74HC595
 } 
}
void zou()
{
 uchar i;
 while(word<320)
 {
  for(move=0;move<16;move++)//要移多少位?
  {
   for(i=0;i<shudu;i++)//一字移動的速度
   {
    for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
    {
     yixian();//調用一線子程序
     yipai();//調用數據轉換子程序
     LINE=line;//打開行線,即174HC154行線端
     CLKR=1;//在74HC595處鎖存起來
     CLKR=0;
     CLKR=1;
    }
   }
  }
  word=word+32;//一個字顯示完了,就顯示下一個字
 }
}  

/*************************************************************************/
/*******************************右移子程序*********************************/
/*************************************************************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai2()
{
 uchar temp,yi;
 if(move<8)//處理移動次數小于8次的部分
 {
  yi=move;
  temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//發送給74HC595
 }
 else//處理移動次數小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[4]<<(8-yi))|(BUF[5]>>yi);
  song(~temp);//發送給74HC595
 } 
}
void you()
{
 uchar i;
 while(word<320)
 {
  for(move=0;move<16;move++)//要移多少位?
  {
   for(i=0;i<shudu;i++)//一字移動的速度
   {
    for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
    {
     yixian();//調用一線子程序
     yipai2();//調用數據轉換子程序
     LINE=line;//打開行線,即174HC154行線端
     CLKR=1;//在74HC595處鎖存起來
     CLKR=0;
     CLKR=1;
    }
   }
  }
  word=word+32;//一個字顯示完了,就顯示下一個字
 }
}

/*************************************************************************/
/*******************************左拉子程序*********************************/
/*************************************************************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai3()
{
 uchar temp,yi;
 if(move<8)//處理移動次數小于8次的部分
 {
  yi=move;
  temp=(BUF[3]<<yi)|(BUF[4]>>(8-yi));/*將第2個字的右半屏數左移yi次,
  然后或上第3個字左半屏的8-yi次數,注此句是處理第2個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<yi)|(BUF[3]>>(8-yi));/*將第2個字的左半屏數左移yi次,
  然后或上第2個字右半屏的8-yi次數,注此句是處理第2個字左半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));/*將第1個字的右半屏數左移yi次,
  然后或上第2個字左半屏的8-yi次數,注此句是處理第1個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[0]<<yi)|(BUF[1]>>(8-yi));/*將第1個字的左半屏數左移yi次,
  然后或上第1個字右半屏的8-yi次數,注此句是處理第1個字左半屏的數*/
  song(~temp);//發送給74HC595
 }
 else//處理移動次數小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[4]<<yi)|(BUF[5]>>(8-yi));/*將第3個字的左半屏數左移yi次,
  然后或上第3個字右半屏的8-yi次數,注此句是處理第2個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[3]<<yi)|(BUF[4]>>(8-yi));/*將第2個字的右半屏數左移yi次,
  然后或上第3個字左半屏的8-yi次數,注此句是處理第2個字左半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<yi)|(BUF[3]>>(8-yi));/*將第2個字的左半屏數左移yi次,
  然后或上第2個字右半屏的8-yi次數,注此句是處理第1個字右半屏的數*/
  song(~temp);//發送給74HC595
  temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));/*將第1個字的右半屏數左移yi次,
  然后或上第2個字左半屏的8-yi次數,注此句是處理第1個字左半屏的數*/
  song(~temp);//發送給74HC595
 } 
}
/********************************/
/*******將一行數據顯示出來*******/
/********************************/
void zou3()
{
 for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
 {
  yixian();//調用一線子程序
  yipai3();//調用數據轉換子程序
  LINE=line;//打開行線,即174HC154行線端
  CLKR=1;//在74HC595處鎖存起來
  CLKR=0;
  CLKR=1;
 }
}
/********************************/
/*************左拉顯示***********/
/********************************/
void zoula()
{
 uchar i,ii,k;
 while(word<320)//5個字*64=320
 {
  
  for(move=0;move<16;move++)//要移多少位?
  {
   for(i=0;i<2;i++)//一字移動的速度
   {
    zou3();//調用顯示子程序
   }
  }
  ii++;//將變量加1
  if((ii%2)==0)//移完兩個字才停下來
  {
   for(k=0;k<150;k++)//停下來時間
   zou3();//一行顯示子程序
  }
  word=word+32;//一個字顯示完了,就顯示下一個字
 }
 i=0;//標志位清0
}
/*************************************************************************/
/*******************************右拉子程序*********************************/
/*************************************************************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai5()
{
 uchar temp,yi;
 if(move<8)//處理移動次數小于8次的部分
 {
  yi=move;
  temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//發送給74HC595
 }
 else//處理移動次數小于8次以外的部分
 {
  yi=move-8;
  temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[5]<<(8-yi))|(BUF[2]>>yi);
  song(~temp);//發送給74HC595
  temp=(BUF[4]<<(8-yi))|(BUF[5]>>yi);
  song(~temp);//發送給74HC595
 } 
}
void yihang()
{
 for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
 {
  yixian();//調用一線子程序
  yipai5();//調用數據轉換子程序
  LINE=line;//打開行線,即174HC154行線端
  CLKR=1;//在74HC595處鎖存起來
  CLKR=0;
  CLKR=1;
 }
}
void youla()
{
 uchar i,j,ii;
 while(word<320)
 {
  for(move=0;move<16;move++)//要移多少位?
  {
 
   for(ii=0;ii<2;ii++)//一字移動的速度
   {
    yihang();
   }
   
  }
  i++;
  if(i%2==0)
  { 
   for(j=0;j<150;j++)
   yihang(); 
  }
  word=word+32;//一個字顯示完了,就顯示下一個字
 }
}  
/********************************/
/************主程序*************/
/********************************/
void main()
{
 
 while(1)
 {
  word=0;
  jian();//間斷
  word=0;
  shang();//上移
  word=80;
  xia();//下移
  word=0;
  zou();//左移 
  word=0;
  you();//右移
  word=0;
  zoula();//左拉
  word=0;
  youla();//右拉
 }
}   

關閉窗口

相關文章

主站蜘蛛池模板: 一区二区视频在线 | 国产成人精品网站 | 综合色播 | 亚洲欧美日韩在线不卡 | 欧美一区二区三区在线播放 | 亚洲a视| 久久国产成人午夜av影院武则天 | 99精品视频免费观看 | 久久成人一区 | 久在线视频播放免费视频 | 亚洲高清视频在线 | 午夜成人免费视频 | 中文字幕亚洲一区 | 日韩三级在线观看 | 精品久久久久一区二区国产 | 欧美性受xxxx白人性爽 | 日韩精品一区二区三区 | 一区二区三区视频在线观看 | 国产一区二区影院 | 成人精品国产一区二区4080 | 国产免国产免费 | 91啪亚洲精品 | 久久99这里只有精品 | 亚洲精品一区在线观看 | 久久蜜桃av一区二区天堂 | 特黄一级 | 久久夜色精品国产 | 亚洲国产精品99久久久久久久久 | 成人精品 | 天天躁日日躁狠狠的躁天龙影院 | 国内激情av片 | 国产精品九九九 | 国产精品视频网 | 亚洲国产一区二区三区 | 国产视频在线观看一区二区三区 | 精品国产欧美日韩不卡在线观看 | 男人天堂视频在线观看 | 天天插天天射天天干 | 免费在线观看成人 | 久久精品亚洲欧美日韩久久 | www.av7788.com|