一、硬件簡介: 經過努力,終于完成了我以前一直的夢想,點陣各種模式能獨立原創出點陣屏各種模式:間斷、上移、下移、左移、右移、上拉幕、下拉幕、左拉幕、右拉幕、左覆蓋、右覆蓋等等模式,我認為點陣只要是上移、左移會了,基本其它的都會了!一定要理解了,才算喲,太高興了,現在和大家分享下了,我的硬件是:行是譯碼器74HC154+S8550,列是74HC595移位寄存器.
祥細視頻如下http://www.tudou.com/programs/view/D0SCJyO4RBQ/
完整的程序源代碼下載:http://www.zg4o1577.cn/f/dz854.rar
二、具體原理圖見
電路介紹:http://www.zg4o1577.cn/mcu/1523.html
三、具體程序代碼如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define LINE P0//定義行線IO口,即74HC154控制端
#define shudu 12//字移動的速度
sbit DATA=P1^4;//74HC595數據端
sbit CLK=P1^5;//74HC595移位脈沖端
sbit CLKR=P1^6;//74HC595數據鎖存端
uchar move;//移動幾位變量
uchar line;//行變量
uint word;//字節變量
uchar ji,gai;//字節變量
uchar BUF[4];//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,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,0x10,0xFF,0x90,0x14,0x50,0x14,0x7C,0x7F,0x50,0x55,0x90,0x55,0x10,0x57,0xFE,
0x61,0x04,0x41,0x7E,0x41,0x44,0x7F,0x44,0x41,0x44,0x41,0x44,0x7F,0x7C,0x41,0x44,
0x00,0x78,0x3F,0x80,0x11,0x10,0x09,0x20,0x7F,0xFE,0x42,0x02,0x82,0x04,0x7F,0xF8,
0x04,0x00,0x07,0xF0,0x0A,0x20,0x09,0x40,0x10,0x80,0x11,0x60,0x22,0x1C,0x0C,0x08,
0x04,0x40,0x04,0x44,0xFF,0xFE,0x04,0x40,0x08,0x7C,0x09,0x44,0x7F,0xC4,0x08,0x7C,
0x0A,0x44,0x3F,0x44,0x22,0x7C,0x22,0x44,0x22,0x44,0x3E,0x44,0x22,0x94,0x01,0x08,
0x08,0x20,0x08,0x24,0xFF,0xFE,0x08,0x20,0x01,0x08,0x3F,0xFC,0x20,0x08,0x20,0x08,
0x3F,0xF8,0x20,0x08,0x20,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x80,0x00,
0x08,0x10,0x08,0x10,0x08,0x10,0x10,0x20,0x10,0x20,0x22,0x44,0x7E,0xFC,0x04,0x08,
0x08,0x10,0x10,0x20,0x20,0x40,0x7E,0xFC,0x00,0x00,0x00,0x04,0xFF,0xFE,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,
0x08,0x10,0x08,0x10,0x08,0x10,0x10,0x20,0x10,0x20,0x22,0x44,0x7E,0xFC,0x04,0x08,
0x08,0x10,0x10,0x20,0x20,0x40,0x7E,0xFC,0x00,0x00,0x00,0x04,0xFF,0xFE,0x00,0x00,
0x08,0x20,0x08,0x24,0xFF,0xFE,0x08,0x20,0x01,0x08,0x3F,0xFC,0x20,0x08,0x20,0x08,
0x3F,0xF8,0x20,0x08,0x20,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x80,0x00,
0x04,0x40,0x04,0x44,0xFF,0xFE,0x04,0x40,0x08,0x7C,0x09,0x44,0x7F,0xC4,0x08,0x7C,
0x0A,0x44,0x3F,0x44,0x22,0x7C,0x22,0x44,0x22,0x44,0x3E,0x44,0x22,0x94,0x01,0x08,
0x00,0x78,0x3F,0x80,0x11,0x10,0x09,0x20,0x7F,0xFE,0x42,0x02,0x82,0x04,0x7F,0xF8,
0x04,0x00,0x07,0xF0,0x0A,0x20,0x09,0x40,0x10,0x80,0x11,0x60,0x22,0x1C,0x0C,0x08,
0x01,0x10,0xFF,0x90,0x14,0x50,0x14,0x7C,0x7F,0x50,0x55,0x90,0x55,0x10,0x57,0xFE,
0x61,0x04,0x41,0x7E,0x41,0x44,0x7F,0x44,0x41,0x44,0x41,0x44,0x7F,0x7C,0x41,0x44,
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,
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,
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[]={
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,
0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00
};
/************************************************************/
/*************************左覆蓋數組************************/
/************************************************************/
uchar code table3[]={
0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,
0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00
};
/*****************************************/
/*****************延時子程序*************/
/***************************************/
void delay(uchar z)
{
uchar x,y;
for(x=2;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 jian()
{
while(word<128)//要顯示多少字?
{
for(move=150;move>0;move--)//字間斷顯示的速度
{
ji=word;
for(line=0;line<16;line++)
{
song(~table[ji*2+1]);//先右半屏
song(~table[ji*2]);//再左半屏
ji++;//下一行
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
LINE=line;//打開列
delay(17);
}
}
word=ji;
}
}
/************************************************************/
/************************************************************/
/**************************上移顯示***************************/
/************************************************************/
/************************************************************/
void shang()
{
while(word<128)
{
for(move=20;move>0;move--)
{
ji=word;//將變量存起來
for(line=0;line<16;line++)
{
song(~table[ji*2+1]);
song(~table[ji*2]);
ji++;
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
LINE=line;
delay(5);
}
}
word+=1;//數組數增加一行,形成上移
}
}
/************************************************************/
/************************************************************/
/**************************下移顯示***************************/
/************************************************************/
/************************************************************/
void xia()
{
while(word>1)
{
for(move=20;move>0;move--)
{
ji=word;//給倒數第2個字位置地址碼給ji變量
for(line=0;line<16;line++)
{
song(~table1[ji*2+1]);//發右半屏數 注意這是數組1的代碼
song(~table1[ji*2]);//發左半屏數
ji++;
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
LINE=line;
delay(5);
}
}
word-=1;//數組數減1一行,形成下移
}
}
/************************************************************/
/************************************************************/
/**************************左移顯示***************************/
/************************************************************/
/************************************************************/
/************************************************************/
/*裝一線數據子函數(即一行數據)*/
/********************************/
void yixian()
{
uchar s;
for(s=0;s<2;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 yipai()
{
uchar temp,yi;
if(move<8)//處理移動次數小于8次的部分
{
yi=move;
temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));/*將第1個字的右半屏數左移yi次,
然后或上第2個字左半屏的8-yi次數,注此句是處理右半屏的數*/
song(~temp);//發送給74HC595
temp=(BUF[0]<<yi)|(BUF[1]>>(8-yi));/*將第1個字的左半屏數左移yi次,
然后或上第1個字右半屏的8-yi次數,注此句是處理左半屏的數*/
song(~temp);//發送給74HC595
}
else//處理移動次數小于8次以外的部分
{
yi=move-8;
temp=(BUF[2]<<yi)|(BUF[3]>>(8-yi));//原理同上
song(~temp);//發送給74HC595
temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));//原理同上
song(~temp);//發送給74HC595
}
}
/********************************/
/************左移子程序**********/
/********************************/
void zou()
{
uchar i;
while(word<256)
{
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 yipai1()
{
uchar temp,yi;
if(move<8)//處理移動次數小于8次的部分
{
yi=move;//小于8次就直接給移動的次數
temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);/*將第1個字的左半屏數左移8-yi次,
然后或上右半屏的yi次數,注此句是處理右半屏的數*/
song(~temp);//發送給74HC595
temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數與第1個字左
半屏的數左移8-yi次,然后或上右半屏的yi次數,注此句是處理左半屏的數*/
song(~temp);//發送給74HC595
}
else//處理移動次數小于8次以外的部分
{
yi=move-8;//不小于8次就給move-8次給變量
temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數左移8-yi次,
然后或上第1個字左半屏的yi次數,注此句是處理右半屏的數*/
song(~temp);//發送給74HC595
temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);/*將第2個字的左半屏數左移8-yi次,
然后或上第2個字的右半屏的yi次數,注此句是處理左半屏的數*/
song(~temp);//發送給74HC595
}
}
/********************************/
/************右移子程序**********/
/********************************/
void you()
{
uchar i;
while(word<256)
{
for(move=0;move<16;move++)//要移多少位?
{
for(i=0;i<shudu;i++)//一字移動的速度
{
for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
{
yixian();//調用一線子程序
yipai1();//調用數據轉換子程序
LINE=line;//打開行線,即174HC154行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
}
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/*************************上拉子函數**************************/
/************************************************************/
/************************************************************/
/******************************************/
/***********顯示一個整體字子函數***********/
/******************************************/
void shang1()//快速上移完一個整體字
{
ji=word;//將變量給計數器
for(line=0;line<16;line++)//循環16次得到一個整體字
{
song(~table[ji*2+1]);//先發右半屏數
song(~table[ji*2]);//再發左半屏數
ji++;//取下一行數
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
LINE=line;//打開行
delay(10);
}
}
/******************************************/
/****快速將一個字上移16次,即一個整體字****/
/******************************************/
void shangla()
{
uchar i;
while(word<128)
{
for(i=0;i<16;i++)//循環16次將一個字上移16次
{
shang1();//調用顯示
word+=1;
}
for(i=0;i<150;i++)//上移完一個字后,停留一段時間,從而形成上拉
shang1();
}
}
/************************************************************/
/************************************************************/
/**************************下拉函數***************************/
/************************************************************/
/************************************************************/
/********************顯示一個字子程序************************/
void xia1()
{
ji=word;
for(line=0;line<16;line++)//循環16次顯示一個字
{
song(~table1[ji*2+1]);
song(~table1[ji*2]);
ji++;
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
LINE=line;
delay(3);
}
}
/********************將一個字上移16次形成下拉子程序************************/
void xiala()
{
uchar i;
while(word>1)
{
for(i=0;i<16;i++)//將一個字下位16次
{
xia1();//調用顯示子程序
word-=1;//下拉1位
}
for(i=0;i<150;i++)//下拉16次后停下來
xia1();//調用顯示
}
}
/************************************************************/
/************************************************************/
/**************************左拉子函數************************/
/************************************************************/
/************************************************************/
/********************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai2()
{
uchar temp,yi;
if(move<8)//處理移動次數小于8次的部分
{
yi=move;
temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));/*將第1個字的右半屏數左移yi次,
然后或上第2個字左半屏的8-yi次數,注此句是處理右半屏的數*/
song(~temp);//發送給74HC595
temp=(BUF[0]<<yi)|(BUF[1]>>(8-yi));/*將第1個字的左半屏數左移yi次,
然后或上第1個字右半屏的8-yi次數,注此句是處理左半屏的數*/
song(~temp);//發送給74HC595
}
else//處理移動次數小于8次以外的部分
{
yi=move-8;
temp=(BUF[2]<<yi)|(BUF[3]>>(8-yi));//原理同上
song(~temp);//發送給74HC595
temp=(BUF[1]<<yi)|(BUF[2]>>(8-yi));//原理同上
song(~temp);//發送給74HC595
}
}
/********************************/
/*******將一個字移一位***********/
/********************************/
void zou3()
{
for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
{
yixian();//調用一線子程序
yipai2();//調用數據轉換子程序
LINE=line;//打開行線,即174HC154行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
/********************************/
/*將一個左移16次,形成一個字左拉***/
/********************************/
void zoula()
{
uchar x;
while(word<256)
{
for(move=0;move<16;move++)//要移多少位?
zou3();
for(x=0;x<150;x++)
zou3();
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/**************************右拉子函數***************************/
/************************************************************/
/************************************************************/
/********************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai3()
{
uchar temp,yi;
if(move<8)//處理移動次數小于8次的部分
{
yi=move;//小于8次就直接給移動的次數
temp=(BUF[0]<<(8-yi))|(BUF[1]>>yi);/*將第1個字的左半屏數左移8-yi次,
然后或上右半屏的yi次數,注此句是處理右半屏的數*/
song(~temp);//發送給74HC595
temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數與第1個字左
半屏的數左移8-yi次,然后或上右半屏的yi次數,注此句是處理左半屏的數*/
song(~temp);//發送給74HC595
}
else//處理移動次數小于8次以外的部分
{
yi=move-8;//不小于8次就給move-8次給變量
temp=(BUF[3]<<(8-yi))|(BUF[0]>>yi);/*將第2個字的右半屏數左移8-yi次,
然后或上第1個字左半屏的yi次數,注此句是處理右半屏的數*/
song(~temp);//發送給74HC595
temp=(BUF[2]<<(8-yi))|(BUF[3]>>yi);/*將第2個字的左半屏數左移8-yi次,
然后或上第2個字的右半屏的yi次數,注此句是處理左半屏的數*/
song(~temp);//發送給74HC595
}
}
/********************************/
/*******將一個字移一位***********/
/********************************/
void you3()
{
for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
{
yixian();//調用一線子程序
yipai3();//調用數據轉換子程序
LINE=line;//打開行線,即174HC154行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
/********************************/
/*******將一個字右移16位***********/
/********************************/
void youla()
{
uchar i;
while(word<256)
{
for(move=0;move<16;move++)//要移多少位?
you3();
for(i=0;i<150;i++)
you3();
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/**************************左覆蓋***************************/
/************************************************************/
/************************************************************/
/********************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai5()
{
uchar temp,yi;
if(move<8)//處理移動次數小于8次的部分
{
yi=move;
temp=(BUF[1]);//發送左半屏的數,在移動右半屏時,左半屏不動
song(~temp);//發送給74HC595
temp=(BUF[2]&~gai)|(BUF[0]&gai);
song(~temp);//發送給74HC595
}
else//處理移動次數小于8次以外的部分
{
yi=move-8;
temp=(BUF[3]&~gai)|(BUF[1]&gai);/*將第1個字的左半屏數第0列清0或上第二
個字左半屏最后1行*/
song(~temp);//發送給74HC595
temp=BUF[2];//發送右半屏的數,在移動左半屏時,右半屏不動
song(~temp);//發送給74HC595
}
}
/********************************/
/*****掃描16次,形成一列覆蓋*****/
/********************************/
void fu3()
{
uchar i;
for(i=0;i<2;i++)//一字移動的速度
{
for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
{
yixian();//調用一線子程序
yipai5();//調用數據轉換子程序
LINE=line;//打開行線,即174HC154行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
}
/********************************/
/***每列移動16次后,形成覆蓋****/
/********************************/
void zoufu()
{
uchar o;
while(word<256)
{
for(move=0;move<16;move++)//移動16次,形成覆蓋
{
gai=table3[move];//移動一次改變一次覆蓋變量
fu3();//調用覆蓋子程序
}
for(o=0;o<60;o++)//一字完后,停一段時間
{
fu3();//調用覆蓋子程序
}
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/**************************右覆蓋***************************/
/************************************************************/
/************************************************************/
/********************************/
/*將一行數據轉換出來,然后顯示*/
/********************************/
void yipai4()
{
uchar temp,yi;
if(move<8)//處理移動次數小于8次的部分
{
yi=move;
temp=(BUF[1]&gai)|(BUF[3]&~gai);/*將第1個字的右半屏數第0列清0或上第二
個字右半屏最后1行*/
song(~temp);//發送給74HC595
temp=(BUF[0]);//發送左半屏的數,在移動右半屏時,左半屏不動
song(~temp);//發送給74HC595
}
else//處理移動次數小于8次以外的部分
{
yi=move-8;
temp=BUF[3];//發送右半屏的數,在移動左半屏時,右半屏不動
song(~temp);//發送給74HC595
temp=(BUF[0]&gai)|(BUF[2]&~gai);/*將第1個字的左半屏數第0列清0或上第二
個字左半屏最后1行*/
song(~temp);//發送給74HC595
}
}
/********************************/
/*****掃描16次,形成一列覆蓋*****/
/********************************/
void fu2()
{
uchar i;
for(i=0;i<2;i++)//一字移動的速度
{
for(line=0;line<16;line++)//掃描16次,即完成一個字的移動
{
yixian();//調用一線子程序
yipai4();//調用數據轉換子程序
LINE=line;//打開行線,即174HC154行線端
CLKR=1;//在74HC595處鎖存起來
CLKR=0;
CLKR=1;
}
}
}
/********************************/
/***每列移動16次后,形成覆蓋****/
/********************************/
void youfu()
{
uchar o;
while(word<256)
{
for(move=0;move<16;move++)//移動16次,形成覆蓋
{
gai=table2[move];//移動一次改變一次覆蓋變量
fu2();//調用覆蓋子程序
}
for(o=0;o<60;o++)//一字完后,停一段時間
{
fu2();//調用覆蓋子程序
}
word=word+32;//一個字顯示完了,就顯示下一個字
}
}
/************************************************************/
/************************************************************/
/**************************主函數***************************/
/************************************************************/
/************************************************************/
void main()
{
while(1)
{
word=0;//初始化變量
jian();//間斷顯示子程序
word=0;
shang();//調用上移子程序
word=128;//賦初值以便形成下移
xia();//調用下移子程序
word=0;
zou();//調用左移子程序
word=0;
you();//調用右移子程序
word=0;
shangla();//調用上拉子程序
word=128;
xiala();//調用下拉子程序
word=0;
zoula();//調用左拉子程序
word=0;
youla();//調用右拉子程序
word=0;
zoufu();//調用左覆蓋子程序
word=0;
youfu();//調用右覆蓋子程序
}
}