基于单片机的火柴人设计_基于单片机的毕业设计

其他范文 时间:2020-02-27 16:51:57 收藏本文下载本文
【www.daodoc.com - 其他范文】

基于单片机的火柴人设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“基于单片机的毕业设计”。

基于单片机的火柴人设计

设计者:吉泽欢

摘要:火柴人本来是由火柴搭建起来的小人,具有简化性,后来随着电子计算机技术的发展,逐渐出现了火柴人小游戏,LG公司的棒棒糖系列手机更是允许用户自定义火柴人的样式并作为来电显示的动画。

本设计是基于单片机的火柴人,以STC89C52作为单片机,8个8×8的红绿双色点阵作为显示设备,74HC138和74HC595作为点阵的驱动芯片,最终达到的效果就是火柴人在点阵屏上跳舞。程序:

#include #define uchar unsigned char #define uint unsigned int #define ulint unsigned long int sbit IA=P1^0;sbit IB=P1^1;sbit IC=P1^2;sbit ID=P1^3;sbit SDA_G=P1^4;//sbit G2=P1^5;sbit STR=P1^6;sbit SCK=P1^7;sbit EN=P2^7;//输出使能 sbit SDA_R=P2^6;//sbit R2=P3^3;

ulint tab[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//保存每一行的旧数据

ulint code arrlizheng[12]={0x00ffc000,0x00800000,0x00ffdffc,0x3cffd000,0x3ffff000, 0x3ffff000,0x3cffd000,0x00ffdffc,0x00800000,0x00ffc000};//立正

ulint code arrhand[13]={0x00ffc000,0x00800000,0x00ffdffc,0x3cffd000,0x3ffff000, 0x3ffff000,0x3cffd000,0x00ffdffc,0x00800000,0x00800000,0x00800000,0x00800000, 0x00800000};

//左手立正,右手横 Ulint code arrhandbendno[16]={ 0x0f800000,0x00800000,0x00800000,0x00800000,0x00800000,0x00ffdffc, 0x3cffd000,0x3ffff000,0x3ffff000,0x3cffd000,0x00ffdffc,0x00800000,0x00800000,0x00800000,0x00800000,0x00f80000};

//左手向上弯,右手向下弯 Ulint code arrhandbendup[16]={0x0f800000,0x00800000,0x00800000,0x00800000,0x00800000,0x00ffdffc, 0x3cffd000,0x3ffff000,0x3ffff000,0x3cffd000,0x00ffdffc,0x00800000,0x00800000,0x00800000,0x00800000,0x0f800000};

//两手都向上弯 Ulint code arrhandbenddown[16]={0x00f80000,0x00800000,0x00800000,0x00800000,0x00800000,0x00ffdffc, 0x3cffd000,0x3ffff000,0x3ffff000,0x3cffd000,0x00ffdffc,0x00800000,0x00800000,0x00800000,0x00800000,0x00f80000};

//两手都向下弯

ulint code arr1[16]={0x00000000,0x00000000,0x00000000,0x00000000,0x3f800000,0x40ffdffc, 0xbcffd000,0x3ffff000,0x3ffff000,0x3cffd000,0x00ffdffc,0x00840000,0x00440000,0x00240000,0x00140000,0x000c0000};

//左手上内弯,右手叉腰

ulint code arr2[16]={0x000c0000,0x00140000,0x00240200,0x00440100,0x00840080,0x00ffdfc0, 0x3cffd000,0x3ffff000,0x3ffff000,0x3cffd000,0x00ffdffc,0x00840000, 0x00440000,0x00240000,0x00140000,0x000c0000};

//两手叉腰,左腿勾 Ulint code arr22[16]={0x000c0000,0x00140000,0x00240200,0x00440100,0x00840080,0x00ffdfc0, 0x3cffd000,0x3ffff000,0x3ffff000,0x3cffd000,0x00ffdfc0,0x00840080, 0x00440100,0x00240200,0x00140000,0x000c0000};

//两手叉腰,两腿勾 Ulint code arr31[16]={0x00040020,0x00080040,0x00100080,0x00200100,0x00400200,0x00800400, 0x3cffc800,0x3ffff000,0x3cffd000,0x007fc7e0,0x00200000,0x00100000, 0x00080000,0x00040000,0x00020000,0x00010000};

//向右跑1 Ulint code arr32[16]={0x00040020,0x00080040,0x00100080,0x00200100,0x00400200,0x00800400, 0x3cffc800,0x3ffff000,0x3cffd000,0x007fc800,0x00200600,0x001003e0, 0x00080000,0x00040000,0x00020000,0x00010000};

//向右跑2 Ulint code arr41[16]={0x00040000,0x00080000,0x00100000,0x002001e0,0x00400600,0x00800800, 0x3cffd000,0x3ffff000,0x3cffc800,0x007fc600,0x00200180,0x001002c0, 0x00080420,0x00040420,0x00020240,0x00010180};

//踢足球1 Ulint code arr42[16]={0x00040000,0x00080000,0x00100000,0x002001e0,0x00400600,0x00800800, 0x3cffd000,0x3ffff000,0x3cffc800,0x007fc400,0x002003e0,0x00100310, 0x00080290,0x00040250,0x00020120,0x000100c0};

//踢足球2 Ulint code arr51[16]={0x00020000,0x00420000,0x00210000,0x00108000,0x00086000,0x00041000, 0x3cffd000,0x3ffff000,0x3cffd000,0x007fd000,0x00046000,0x00084000, 0x00108000,0x00210000,0x00420000,0x00020000};

//上跳1 Ulint code arr52[16]={0x00020000,0x00420000,0x00210000,0x00108000,0x00086000,0x00049000, 0x007f1000,0x000f1000,0x000f1000,0x007f9000,0x0004e000,0x00084000, 0x00108000,0x00210000,0x00420000,0x00020000};

//上跳2 Ulint code arrend[16]={0x7e083070,0x7e08504c,0x40085042,0x40089041,0x7e089041,0x7e091041,0x40091041, 0x400a1042,0x7e0a104c,0x7e0c1070};

//end ulint code arr_xiexie[16]={0x01100110,0x02a802a8,0x28882888,0x34883488,0x2a882a88,0x21882188,0x2fa82fa8,0x24a824a8,0x24c824c8,0xe788e788,0x04880488,0x07be07be,0x24882488,0x27882788,0x42084208,0x01080108};

//谢谢 ulint code arr_xuzhou[16]={0x20808004,0x21404004,0x28442084,0x24442084,0x22481084,0x22501084,0x20401084,0xa7fc9084,0x60405294,0x20405294,0x15f654a4,0x92081084,0x41101084,0x20a01084,0x10401084,0x10401004};

//徐州 ulint code arr_gongcheng[16]={0x00001000,0x000013fe,0xfffe1020,0xfffe1020, 0x010091fc,0x01005420,0x01005420,0x010039fe,0x01003000,0x01001000,0x0100fdfc,0x01001104,0x01001104,0x7ffcf104,0x00001dfc,0x00000800};

//工程 ulint code arr_xueyuan[16]={0x02004400,0x0500420e,0x01004112,0x01004112, 0x01005090,0xfffe6890,0x01804890,0x00404bfe, 0x01fe04800,0x80045000,0x400261f8,0x7ffe5404, 0x00205202,0x11104bfe,0x11087820,0x22080040};

//学院

ulint code arr_jidian[16]={0x140000fe,0x120e0102,0x12120102,0x1112210a,0x11123ff8,0x91102108,0x55102108,0x55102108,0x39103ff8,0x31102108,0x11002108,0xfd102108, 0x11103ff8,0x11100100,0x11f00100,0x10000100};

//机电

ulint code arr_keji[16]={0x10102606,0x10105188,0x10101050,0x10101020,0x90101050,0x53f0d048,0x501e3088,0x34101884,0x389015fc,0x10901020,0xfd101020,0x1010fc20,0x109013fe,0xf0901020,0x1d101020,0x08101020};

//科技 ulint code arr_xiehui[16]={0x24201008,0x22503ff8,0x21101010,0x21100820,0x20900400,0x28920200,0x24927ffc,0x22940000,0x22980000,0x2090cfe6,0x20903018,0xfbf00820,0x20800440,0x20800280,0x20800100,0x20800100};

//协会 uchar tt=0,i;uint num;

/*#define OFF 0 #define ON 1 #define RED 0 #define GREEN 1*/

#define scan0

{IA=0;IB=0;IC=0;ID=0;} #define scan1

{IA=1;IB=0;IC=0;ID=0;} #define scan2

{IA=0;IB=1;IC=0;ID=0;} #define scan3

{IA=1;IB=1;IC=0;ID=0;} #define scan4

{IA=0;IB=0;IC=1;ID=0;} #define scan5

{IA=1;IB=0;IC=1;ID=0;} #define scan6

{IA=0;IB=1;IC=1;ID=0;} #define scan7

{IA=1;IB=1;IC=1;ID=0;} #define scan8

{IA=0;IB=0;IC=0;ID=1;} #define scan9

{IA=1;IB=0;IC=0;ID=1;} #define scan10

{IA=0;IB=1;IC=0;ID=1;} #define scan11

{IA=1;IB=1;IC=0;ID=1;} #define scan12

{IA=0;IB=0;IC=1;ID=1;} #define scan13

{IA=1;IB=0;IC=1;ID=1;} #define scan14

{IA=0;IB=1;IC=1;ID=1;} #define scan15

{IA=1;IB=1;IC=1;ID=1;} /************************************************* void delay(uint xms){ uint x,y;

for(x= xms;x>0;x--)

for(y=110;y>0;y--);

}*/

/*****不影响其他端口的扫描*************************/ void scan(uchar Value)//扫描行 {switch(Value)

{case 0: scan0;break;

case 1: scan1;break;

case 2: scan2;break;

case 3: scan3;break;

case 4: scan4;break;

case 5: scan5;break;

case 6: scan6;break;

case 7: scan7;break;

case 8: scan8;break;

case 9: scan9;break;

case 10:scan10;break;

case 11:scan11;break;

case 12:scan12;break;

case 13:scan13;break;

case 14:scan14;break;

case 15:scan15;break;

} }

/********************************************************** 函数名:exp(m)功能:计算2的m次方 参数:m:2的次幂 返回值:result ************************************************************* ulint exp(uchar m)//计算2的m次方 { uchar i;ulint result=1;for(i=0;i

result=result

} return result;}*/

/********************************************************** 函数名:dat 功能:发送32位的每一行数据 参数:dat:每一行的32位数据

color:0为红色,1为绿色 返回值:无

**************************************************************/ void dat(ulint dat,bit color){ ulint uldat=dat;uchar i;if(color){

for(i=0;i

//32为数据

{

SDA_G=(uldat&0x1)?0:1;//高位在左,低位在右,1显示,0不显示

SCK=1;SCK=0;

uldat>>=1;

} } else {

for(i=0;i

//32为数据

{

SDA_R=(uldat&0x1)?0:1;//高位在左,低位在右,1显示,0不显示

SCK=1;SCK=0;

uldat>>=1;

} }

STR=1;STR=0;}

/********************************************************** 函数名:point(x,y,color,show)功能:画点。左下角为(0,0),向右为X正,向上为Y正 参数:x:点的横坐标

y:点的纵坐标

color:0为红色,1为绿色

show:为1显示,为0不显示 返回值:无

************************************************************* void point(uchar x,uchar y,bit color,bit show)

{ ulint temp;temp=exp(31-x);if(show){

dat(temp|tab[y],color);

//显示的点为1与旧数据相或

scan(y);

tab[y]=temp|tab[y];//将新数据存入对应数组

} if(!show)

{

dat((~temp)&tab[y],color);//不显示的点为0与旧数据相与

scan(y);

tab[y]=(~temp)&tab[y];//将新数据存入对应数组

} }*/

void showtime3(){ for(i=0;i

dat(0x01818180,0);

scan(i+2);} dat(0x01ffff80,0);scan(12);dat(0x01ffff80,0);scan(13);}

void showtime2(){ dat(0x0181ff80,0);scan(3);dat(0x0181ff80,0);scan(4);for(i=0;i

dat(0x01818180,0);

scan(i+5);}

dat(0x01ff8180,0);scan(11);dat(0x01ff8180,0);scan(12);}

void showtime1(){ dat(0x00200000,0);scan(5);dat(0x00600000,0);scan(6);dat(0x00c00180,0);scan(7);dat(0x01ffff80,0);scan(8);dat(0x01ffff80,0);scan(9);dat(0x00000180,0);scan(10);}

void show_lizheng()

//立正 { for(i=0;i

dat(arrlizheng[i],1);

scan(i+3);} } void show_right_hand_bend_up()//左手立正,右手横 { for(i=0;i

dat(arrhand[i],1);

scan(i+3);} } void show_left_hand_bend_up()//左手横,右手立正 { for(i=0;i

dat(arrhand[12-i],1);

scan(i);} } void show_hand_bend_no_1()

//左手向上弯,右手向下弯 { for(i=0;i

dat(arrhandbendno[i],1);

scan(i);} } void show_hand_bend_no_2()

//左手向下弯,右手向上弯 { for(i=0;i

dat(arrhandbendno[15-i],1);

scan(i);} } void show_hand_bend_up()

//两手向上弯 { for(i=0;i

dat(arrhandbendup[i],1);

scan(i);} } void show_hand_bend_down()

//两手向下弯 { for(i=0;i

dat(arrhandbenddown[i],1);

scan(i);} } void show_arr1()

//左手上内弯,右手叉腰 { for(i=0;i

dat(arr1[i],1);

scan(i);} } void show_arr1no()

//左手叉腰,右手上内弯 { for(i=0;i

dat(arr1[15-i],1);

scan(i);} } void show_arr2()

//两手叉腰,左腿勾 { for(i=0;i

dat(arr2[i],1);

scan(i);} } void show_arr2no()

//两手叉腰,右腿勾 { for(i=0;i

dat(arr2[15-i],1);

scan(i);} } void show_arr22()

//两手叉腰,两腿勾 { for(i=0;i

dat(arr22[i],1);

scan(i);} } void show_arr31()

//向右跑1 { for(i=0;i

dat(arr31[i],1);

scan(i);} } void show_arr32()

//向右跑2 { for(i=0;i

dat(arr32[i],1);

scan(i);} } void show_arr41()

//踢足球1 { for(i=0;i

dat(arr41[i],1);

scan(i);} } void show_arr42()

//踢足球2 { for(i=0;i

dat(arr42[i],1);

scan(i);} } void show_arr51()

//上跳1 { for(i=0;i

dat(arr51[i],1);

scan(i);} } void show_arr52()

//上跳2 { for(i=0;i

dat(arr52[i],1);

scan(i);} } void show_end()

//显示END { for(i=0;i

dat(arrend[i],0);

scan(i+3);} } void show_xiexie()

//显示谢谢 { for(i=0;i

dat(arr_xiexie[i],0);

scan(i);} } void show_xuzhou()

//显示徐州 { for(i=0;i

dat(arr_xuzhou[i],0);

scan(i);} } void show_gongcheng()

//显示工程 { for(i=0;i

dat(arr_gongcheng[i],0);

scan(i);} } void show_xueyuan()

//显示学院 { for(i=0;i

dat(arr_xueyuan[i],0);

scan(i);} } void show_jidian()

//显示机电 { for(i=0;i

dat(arr_jidian[i],0);

scan(i);} } void show_keji()

//显示科技 { for(i=0;i

dat(arr_keji[i],0);

scan(i);} } void show_xiehui()

//显示协会 { for(i=0;i

dat(arr_xiehui[i],0);

scan(i);} }

void main(){ EN=0;SCK=0;STR=0;TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;

while(1){

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else if(num

if(num

if(num

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else

if(num

else show_xiexie();} } /*************************************************************/

void ser0()interrupt 1 { tt++;if(tt==4){

tt=0;

num++;

if(num==146)

num=0;} }

下载基于单片机的火柴人设计word格式文档
下载基于单片机的火柴人设计.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文