基于51单片机俄罗斯方块程序设计

基于51单片机俄罗斯方块程序设计
基于51单片机俄罗斯方块程序设计

基于51单片机俄罗斯方块游戏设计

作者:左厚臣

前言

闲得无事,想用单片机和LCD12864写一个俄罗斯方块游戏,培养培养兴趣,丰富一下业余生活,同时也熟练熟练单片机应用。然后整理一下过程,本文没有什么专业的流程图,系统框图,随手画的。希望各位大神勿喷,本菜鸟就献丑了。

关键字:51单片机LCD12864 俄罗斯方块游戏设计

一、实物写真

1、先展示一下实物效果呗,看能不能吸引到各位大神的眼球!!!!

2、单片机选型

IO口占用:7个

程序存储器占用:6459Byte

内部RAM:117.0Byte

内部扩展RAM:1016Byte

Fosc = 24Mhz(也可选择12Mhz)

中断使用状况:16位定时器溢出中断1个

手头有一块STC12C5A60S2 51系列单片机,本实验也采用的此款单片机,或许有大神能用很节省资源的方法写出这款游戏,本菜鸟甘拜下风。

二、游戏算法

整个游戏的算法也就是这样子的吧!下面就对每个步骤进说明吧!

三、算法说明

算法就捡重点的说吧,省得各位大神都闲啰嗦。

1、当前随机方块获取和下一回合游戏方块生成并显示

此步骤拆解成如下流程图所示:

(1)随机数生成

51单片机需要调用库函数来产生随机数,如下:

#include //调用库函数的头文件

函数rand ()会生成一个int型的随机数,int型变量范围为-32768~32767占用2 字节。我们使用时其实是可以把它当做一个unsigned int型变量的,取值范围0-65535 这个应该是很好理解的。但是如果我们需要一个0-7的随机数怎么处理呢,没关系有办法,程序如下:

u8 Random(u8 max)

{

u16 temp;

u8 a;

max = max +1;

temp=rand();//获取随机种子

a = temp%max;

return a;

}

其实也就是把得到随机数与想要得到数范围的最大数求余运算就可以了,即:

a = temp%max;

我们的游戏方块可以描述成2个要素:

A、形状

比如说形状有:■■■■

■■■■■等,可用0-n来表示

B、姿态

比如说形状■

■■姿态有4种如下:

■■■■■■

■■■■■■

它们从左往右看可以看出规律分别旋转了0°,90°,180°,270°,也分别相对旋转了90°,可以用0-3来表示。

由于游戏方块又分为当前和下一回合,元素0为当前,元素1为下一回合所以我们定义两组数组:

u8 Game_forecast[2];//形状数组

u8 xdata Game_angle[2];//姿态数组

获取随机形状如下:

Game_forecast[0] = Random(8);//获取方块随机形状

Game_angle[0] = Random(3);//获取方块随机旋转角度

那么本游戏列出一个表来,这两组数就可以表示一个随机方块了,如下:

(2)通过随机数生成随机方块数组Game_posture[5][5]

随机方块的形状及姿态已经确定了,我们需要将其转换成比较直观的,所以就定义了二维数组Game_posture[5][5],对于某种形状直接在数组上描数据就可以了。

比如说形状2姿态0,有点的描0xff,没点的描0x00,数组Game_posture[5][5]赋值如下:

u8 x,y;

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

Game_posture[y][x]=0x00;

}

}

/*Game_posture[5][5]={

0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0xff,0x00,0x00,

0x00,0x00,0xff,0xff,0x00,

0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00

};*/

Game_posture[1][2]=0xff;

Game_posture[2][2]=0xff;

Game_posture[2][3]=0xff;

我们给数组Game_posture[5][5]赋值分两步进行,第一步获取形状直接赋值,就是我们上面演示的程序,第二步根据姿态数将其旋转0°,90°,180°,270°

得到最终的方块数组。

那就分析分析如何旋转90°,180°,270°(顺时针旋转)的程序怎么写吧!

首先通过画表格的方式把方块数组Game_posture[5][5]表示出来,习惯上我们喜欢把x代表列,y代表行如下:

将其旋转90°得到如下表格:

可以看出旋转90°后的数组x0-x4坐标对应的是原来数的y4-y0坐标,而y0-y4坐标则对应的是原来数的x0-x4坐标。

将其旋转180°得出如下表格:

可以看出旋转180°后数组x0-x4坐标对应的是原来数的x4-x0坐标,而y0-y4坐标则对应的是原来数的y4-y0坐标。

将其旋转270°得出如下表格:

可以看出旋转270°后数组x0-x4坐标对应的是原来数的x0-x4坐标,而y0-y4坐标则对应的是原来数的x4-x0坐标。

写出转转函数如下:

if(Game_angle[num1]==0);

else if(Game_angle[num1]==1)Rotation(90);

else if(Game_angle[num1]==2)Rotation(180);

else if(Game_angle[num1]==3)Rotation(270);

//将姿态转换旋转度数

void Rotation(u16 num1)

{

u8 xdata temp[5][5];

u8 x,y;

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

temp[y][x]=0x00;

}

}

if(num1==90)//旋转90°

{

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

temp[y][x]=Game_posture[4-x][y];

}

}

}

else if(num1==180)//旋转180°

{

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

temp[y][x]=Game_posture[4-y][4-x];

}

}

}

else if(num1==270)//旋转270°

{

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

temp[y][x]=Game_posture[x][4-y];

}

}

}

if(num1>0)

{

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

Game_posture[y][x]=temp[y][x];

}

}

}

}

(3)方块数组Game_posture[5][5]转换显示数组Game_posture_window[16][4]

首先我们需要定义一下一个方块点占用LCD12864多少个像素点,经过试验,一个方块点占用LCD12864 4*4个像素点看起来比较直观大小也刚好合适。

再看一下LCD12864如何描点的。

LCD12864分成了上下屏,各占像128*32个像素点,上屏x坐标为0-7,y坐标为0-31,下屏x坐标为8-15,y坐标为0-31。

一个x坐标占用16个像素点也就是两个字节,y坐标占用1个像素点。给定x 坐标和y坐标,输入数据D15-D8,给定数据D7-D0就可以在LCD12864相应的位置

进行描点了,当然在之前是要开启LCD12864扩充指令集的绘图功能了,后面程序

里面会写到。

再回头看看数组数组Game_posture[5][5]还是用图表的形式说明,如下:

刚刚已经定义了一个方块像素点占用LCD12864的4*4个像素点,再结合LCD12864描点方式,需要定义一个行坐标5*4=20,列坐标5/2=2.5的数组,结合LCD12864列坐标x来看,没有小数的,故设置为3,后面数补0即可,但是再结合LCD12864描点方式,列坐标设置为4。

故定义一个描点数组Game_posture_window[16][4],行坐标不是20么,怎么是16呢,这是在写程序时弄错的地方,也是此程序的一个BUG,当方块形状为1时只会显示3个点其它的都正常。BUG就BUG吧,这里主要是写设计思路,整理到这里时才发现,就不改了吧!

按照这种规律就可以将转换函数写出来,如下:

void Get_Game_posture_window()

{

u8 x,y;

u8 temp;

//--------------方块显示数据初始化---------------------

for(y=0;y<16;y++)

{

for(x=0;x<4;x++)

{

Game_posture_window[y][x]=0x00;//数据初始化

}

}

//--------------方块数值获取---------------------------

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

if((x==0)||(x==2)||(x==4))

{

temp = Game_posture[y][x];

if(temp==0xff)

{

Game_posture_window[y*4][x/2] =0xf0;

Game_posture_window[y*4+1][x/2] =0xf0;

Game_posture_window[y*4+2][x/2] =0xf0;

Game_posture_window[y*4+3][x/2] =0xf0;

}

}

//------------边框处理---------------------

if(x==4)

{

Game_posture_window[y*4][3] =0x00;

Game_posture_window[y*4+1][3] =0x00;

Game_posture_window[y*4+2][3] =0x00;

Game_posture_window[y*4+3][3] =0x00;

}//------------------------------------------

if((x==1)|(x==3))

{

temp = Game_posture[y][x];

if(temp==0xff)

{

Game_posture_window[y*4][x/2] |=0x0f;

Game_posture_window[y*4+1][x/2] |=0x0f;

Game_posture_window[y*4+2][x/2] |=0x0f;

Game_posture_window[y*4+3][x/2] |=0x0f;

}

}

}

}

}

由于方块显示去与游戏区产生了交集故对游戏区的边框进行了还原处理。(4)随机方块显示

描点数组Game_posture_window[16][4]已经赋值,直接对LCD12684描点就可以了,程序如下:

void Game_forecast_show()//方块预报显示

{

u8 x,y;

LCD_write_comm(0x36);//使用扩充指令集

LCD_delay();

//----------------------------

for(y=16;y<31;y++)

{

for(x=1;x<3;x++)

{

LCD_write_comm(0x80+y);//y坐标起始地址

LCD_delay();

LCD_write_comm(0x80+x);//x坐标起始地址

LCD_delay();

LCD_write_date(Game_posture_window[y-16][(x-1)*2]);

LCD_delay();

LCD_write_date(Game_posture_window[y-16][(x-1)*2+1]);

LCD_delay();

}

}

LCD_write_comm(0x36);//显示RAM

LCD_delay();

LCD_write_comm(0x30);//退出扩展指令集

LCD_delay();

}

2、按键处理

按键处理包括游戏方块急速下降、游戏方块左移、游戏方块右移、游戏方块旋转等。

由于一一的说明显得太啰嗦,后面会把所有程序附上,一看就明白,这里就说明一下游戏方块旋转吧!

游戏方块旋转可以拆分成如下步骤:

这里最麻烦的就是游戏方块旋转时是否卡位和方块数组与游戏数组Game_date[15][15]融合。

先说一说方块数组与游戏数组Game_date[15][15]的融合吧!

还是用图表进行说明,如下:

游戏方块数组Game_posture[5][5]

游戏数组Game_date[15][15]

两数组融合有两种情况:1、初始融合2、旋转后融合。

(1)、初始融合

初始融合也就是方块刚进入游戏的画面,如上图红圈所示这种状况是最佳的状况,也就是方块由游戏窗口上层最中央落入并且没有像素点的地方全部消掉。

那么我们开始寻找规律,自然从“方块由游戏窗口上层最中央落入并且没有像素点的地方全部消掉”这句话中寻找。

从“没有的像素点的地方全部消掉”这句话出发,我们定义一个二维数组,只记录游戏方块数组Game_posture[5][5]有像素点的xy坐标,游戏方块最多有4个像素点那么就可以定义一个二维数组Game_dot[4][2],就解决了没有的像素点全部消掉的问题,程序如下:

//--------方块点数值初始化-------------

for(y=0;y<4;y++)

{

for(x=0;x<2;x++)

{

Game_dot[y][x]=0x88;

}

}

//--------方块点数值获取----------------

a=0;

for(y=0;y<5;y++)

{

for(x=0;x<5;x++)

{

if(Game_posture[y][x]==0xff)

{

Game_dot[a][0]=y;

Game_dot[a][1]=x;

a++;

}

}

}

为什么数组Game_dot[4][2]初始化的数值是0x88而不是0x00呢,因为xy坐标中有含0的即0x00,可以是0x55么,当然可以。写0x88或许能给你带来吉利吧!

哈哈。。。。。其实重点是避开xy坐标数值就可以了!!!

让“方块由游戏窗口上层最中央落入”也就是x坐标的最中央,游戏方块数组Game_posture[5][5] x坐标中央是2,游戏数组Game_date[15][15]最中央是7,融合是他们有什么规律呢?

当然有,将Game_posture[5][5] x坐标+6即可将游戏方块放入到游戏窗口中,程序如下:

//---------初始方块与游戏窗口数据融合-------------------

c = Game_dot[0][0];//获取y坐标最小值

for(y=0;y<4;y++)

{

if(Game_dot[y][0]!=0x88)

{

Game_date[Game_dot[y][0]-c][Game_dot[y][1]+6]=0xff;//数据融合

Game_dot[y][0] = Game_dot[y][0]-c;

Game_dot[y][1] = Game_dot[y][1]+6;//刷新方块数据点

}

}

(2)、旋转后融合

游戏方块在游戏窗口中是移动和变换的像素点,所以需要记录运动点的xy坐标上面程序中刷新方块数据点也就是这个目的。

呢?同样用图表进行说明。

假如游戏方块在游戏窗口中旋转90°,得到如下数:

再看看游戏方块旋转90°会得到一个如下数:

那么游戏方块和游戏窗口中的方块旋转前与旋转90°后的游戏方块和游戏窗口中的方块xy坐标是一个什么样的关系呢?

通过对图表的对比可以发现:

旋转后的游戏窗口方块x坐标= 旋转前的游戏窗口方块x坐标—旋转前的方块x坐标+ 旋转后的方块x坐标

旋转后的游戏窗口方块y坐标= 旋转前的游戏窗口方块y坐标—旋转前的方块y坐标+ 旋转后的方块y坐标

程序如下:

for(y=0;y<4;y++)//--------临时方块点数值初始化-------------

{

for(x=0;x<2;x++)

{

Game_dot_temp[y][x]=0x88;

}

}

c=0;

for(y=0;y<5;y++)//--------临时方块点数值获取----------------

{

for(x=0;x<5;x++)

{

if(Game_posture[y][x]==0xff)

{

Game_dot_temp[c][0]=y;

Game_dot_temp[c][1]=x;

c++;

}

}

}

yn = Game_dot[0][0]-Game_dot_temp[0][0];//获取y坐标差值

xn = Game_dot[0][1]-Game_dot_temp[0][1];//获取x坐标差值

//---------临时方块点旋转90°-----------------------------

for(y=0;y<4;y++)//--------临时方块点数值初始化-------------

{

for(x=0;x<2;x++)

{

Game_dot_temp[y][x]=0x88;

}

}

Game_angle_temp++;

if(Game_angle_temp==4)Game_angle_temp=0;

Game_angle[0]=Game_angle_temp;//获取方块旋转值

Get_Game_posture(0);//游戏方块姿势转换

c=0;

for(y=0;y<5;y++)//--------临时方块点数值获取----------------

{

for(x=0;x<5;x++)

{

if(Game_posture[y][x]==0xff)

{

Game_dot_temp[c][0]=y;

Game_dot_temp[c][1]=x;

c++;

}

}

}

再来说说如何判断方块在旋转中是否卡位的,还是用图表进行说明,如下:

方法就是把前一状态点全部消掉,然后用临时数组进行模拟旋转,模拟数组旋转

后与窗口数组都有描点,说明卡位,是不能旋转的然后还原之前消掉的点,方块左移方块右移,方框下降都是通过这个方法来判断是否卡位的,自己可以在上标中模拟的试一试,看是不是这么回事,程序如下:

//---------消除游戏窗口前时间段方块-----------------

for(y=0;y<4;y++)

{

if(Game_dot[y][0]!=0x88)

{

Game_date[Game_dot[y][0]][Game_dot[y][1]]=0x00;

}

}

//---------获取当前方块参考点------------------------------

for(y=0;y<4;y++)//--------临时方块点数值初始化-------------

{

for(x=0;x<2;x++)

{

Game_dot_temp[y][x]=0x88;

}

}

c=0;

for(y=0;y<5;y++)//--------临时方块点数值获取----------------

{

for(x=0;x<5;x++)

{

if(Game_posture[y][x]==0xff)

{

Game_dot_temp[c][0]=y;

Game_dot_temp[c][1]=x;

c++;

}

}

}

yn = Game_dot[0][0]-Game_dot_temp[0][0];//获取y坐标差值

xn = Game_dot[0][1]-Game_dot_temp[0][1];//获取x坐标差值

//---------临时方块点旋转90°-----------------------------

for(y=0;y<4;y++)//--------临时方块点数值初始化-------------

{

for(x=0;x<2;x++)

{

Game_dot_temp[y][x]=0x88;

}

}

Game_angle_temp++;

if(Game_angle_temp==4)Game_angle_temp=0;

Game_angle[0]=Game_angle_temp;//获取方块旋转值

Get_Game_posture(0);//游戏方块姿势转换

c=0;

for(y=0;y<5;y++)//--------临时方块点数值获取----------------

{

for(x=0;x<5;x++)

{

if(Game_posture[y][x]==0xff)

{

Game_dot_temp[c][0]=y;

Game_dot_temp[c][1]=x;

c++;

}

}

}

//---------判断方块是否卡位----------------------

for(y=0;y<4;y++)

{

if(Game_dot_temp[y][0]!=0x88)

{

yn1 = Game_dot_temp[y][0]+yn;

xn1 = Game_dot_temp[y][1]+xn;

if((Game_date[yn1][xn1]==0xff)||(yn1<0)||(yn1>=15)||(xn1<0)||(xn

1>=15))

{

for(y=0;y<4;y++)//还原消除点

{

if(Game_dot[y][0]!=0x88)

{

Game_date[Game_dot[y][0]][Game_dot[y][1]]=0xff;

}

}

//-------还原方块点----------------------

//Game_key_angle=0;

Game_angle_temp--;

Game_angle[0]=Game_angle_temp;//获取方块旋转值

Get_Game_posture(0);//游戏方块姿势转?

//Game_angle--;

goto LABEL5;

}

}

}

//----------游戏方块点描点旋转---------------

for(y=0;y<4;y++)

{

for(x=0;x<2;x++)

{

Game_dot[y][x]=0x88;//方块点初始化

}

}

for(y=0;y

{

Game_dot[y][0]=Game_dot_temp[y][0]+yn;

Game_dot[y][1]=Game_dot_temp[y][1]+xn;

}

//----------方块及游戏窗口数据融合------------

for(y=0;y<4;y++)

{

if(Game_dot[y][0]!=0x88)

{

Game_date[Game_dot[y][0]][Game_dot[y][1]]=0xff;

}

}

LABEL5:

Game_key_angle=0;//旋转完成清0

到此为止,本游戏比较麻烦的算法也完成了。

四、总结

本游戏的算法其实也就是在单片机RAM中玩游戏,玩的过程中将这些数据转换成LCD12864认识的数据并显示出来。

五、程序

全部粘贴出来了,如下:

Main.h

#ifndef __MAIN_H

#define __MAIN_H

#include "common.h"

extern u16 num; //游戏分数

extern u8 Guan_num;//游戏关数

extern u8 xdata Game_date[15][15];//游戏数组

extern u8 Game_window[60][8];//游戏窗口数据

extern u8 xdata Game_posture[5][5];//方块形状数组

extern u8 xdata Game_posture_window[16][4];//方块预报显示数组extern u8 Game_forecast[2];//方块预报

/*

=0 回形状

=1 回

回形状

=2 回

回回形状

=3 回

回回形状

=4 回

回回形状

=5 回

回回

回形状

=6 回

回回

回形状

=7 回回

回回形状

脉冲控制器

科信学院 课程设计说明书(2012 /2013学年第二学期) 课程名称:《单片机应用》课程设计 题目:脉冲控制器 专业班级:电气2班 学生姓名:赵永章 学号:100062223 指导教师:段广玉王静爽韩昱 设计周数:两周 设计成绩: 2013年07月11日

目录 1. 课程设计目的................................................................................................32. 课程设计内容及设计过程说明...........................................................................32.1功能介绍................................................................................................32.2.1电路原理..........................................................................................32.2.2protel原理图....................................................................................42.2.3各功能模块电路设计...........................................................................52.2.3.1LED和蜂鸣器模块.....................................................................52.2.3.2硬件复位模块和晶振模块............................................................52.2.3.3段码输出和共阴极数码管模块......................................................62.2.4 PCB图.............................................................................................72.2.5 共阴极数码管显示码对照表..................................................................72.3元件清单................................................................................................82.4实际电路板成品图....................................................................................92.5程序流程图 (10) 2.6汇编程序 (11) 2.6.1程序源代码 (11) 2.6.2代码分析 (13) 3. 课程设计结论 (13) 4. 参考文献 (14) 1、课程设计目的

基于51单片机数字音乐盒的设计

单片机实物设计 题目: 单片机音乐盒设计 班级: K0312416-17 姓名:湛俊朱斌杨裕庆 学号:K031241705 K031241632 K031241737

摘要 本设计是一个基于STC89C51RC系列单片机的音乐盒,依据单片机技术原理,通过硬件电路制作以及软件编译,设计制作出一个多功能多功能音乐盒。该音乐盒主要由按键电路、复位电路、时钟电路以及蜂鸣器组成。本音乐盒共有四首歌曲,用4个按键控制。播放歌曲时,蜂鸣器发出某个音调。本设计利用KEIL编程软件对音乐盒源程序进行编程并调试,配合PROTEUS 仿真软件对硬件进行仿真调试,节约了设计时间。 【关键词】STC89C51RC 按键蜂鸣器 LCD1602液晶

目录 前言 ................................................................................................................................. 第一章工作原理 .............................................................................................................. 1.1设计目标 ............................................................................................................... 第二章软件设计与分析................................................................................................... 2.1 软件设计的组成................................................................................................... 2.2 各部分软件分析 ................................................................................................. 2.2.1 延时165MS,即十六分音符子函数 .......................................................... 2.2.2 延时1MS子函数...................................................................................... 2.2.3 定时器0中断子函数 .............................................................................. 2.2.4 播放音乐子函数...................................................................................... 2.5 定时器1中断子函数.................................................................................. 2.6 按键扫描子函数 ......................................................................................... 2.2.7 主函数..................................................................................................... 2.3 总源程序 ............................................................................................................ 第三章软件仿真 .............................................................................................................. 3.仿真图...................................................................................................................... 3.1 元件清单 ............................................................................................................... 总结 ..................................................................................................................................... 参考文献..............................................................................................................................

汇编俄罗斯方块8.8点阵

纯为个人思路,无特殊,惊人语句….初学完的; 程序功能:最原始简单版俄罗斯方块 ;硬件连接:接双色点阵 ;晶振型号:12M ;单片机:STC89C52 ;编写时间: ;编程人: HANG BIT P2.0 ;点阵行输入 HW BIT P2.1 HZ BIT P2.2 LIE BIT P2.3 ;点阵列输入 LW BIT P2.4 LZ BIT P2.5 WEI BIT P2.6 DUAN BIT P2.7 XIAN EQU P1 BiaoX BIT 20H.0 Biao_z BIT 20H.1 ;按键是否按下标志Biao_y BIT 20H.2 Biao_x BIT 20H.3 Dou_z BIT 20H.4 ;按键相应标志位Ying_z BIT 20H.5 Dou_y BIT 20H.6 Ying_y BIT 20H.7 Dou_x BIT 21H.0 Ying_x BIT 21H.1 Biao_ZY BIT 21H.2 Biao_zt BIT 21H.3 ;开始、暂停标志KEY_z BIT P0.0 ;左、右、旋转按键KEY_y BIT P0.1 KEY_x BIT P0.2 ORG 0000H AJMP Start ORG 0003H AJMP Int0_ser ORG 000BH AJMP T0_ser ORG 0030H ;************************* Start: MOV R0,#08H MOV R1,#51H MOV R3,#03H MOV R4,#08H

MOV 40H,#03H MOV 30H,#0FEH MOV 33H,#0FEH MOV 37H,#80H MOV TMOD,#01H MOV TH0,#(65536-10000) / 256 MOV TL0,#(65536-10000) MOD 256 SETB EA SETB EX0 SETB ET0 SETB IT0 SETB TR0 ;***************************** Main: CALL Zhanting ;暂停响应 CALL Xianshi ;点阵显示 CALL CMkey_z ;左移按键 CALL CMkey_y ;右移按键 CALL CMkey_x ;旋转按键 CALL Panduan_z ;判断是否可以左移CALL Panduan_y ;判断是否可以右移CALL Panduan_x ;判断是否可以旋转CALL Panduan_xia ;判断是否可以下移CALL Panduan_xh ;判断消行 CALL Saomiao_xh ;扫描消行 CALL Jifen ;计算分值 CALL JifenXianshi ;分值显示 ORL PCON,#01H AJMP Main ;***************************** Zhanting: JB Biao_zt,Out_zt ;判断是否暂停Zhanti: MOV A,37H ;显示START RLC A MOV 37H,A MOV LIE,C CLR LW SETB LW DJNZ R0,Zhanti MOV R0,#08H CLR LZ SETB LZ

基于单片机的温度控制器设计

技术参数和设计任务:1、利用单片机AT89S51实现对温度物理量的控制,以实现对温度控制的目的;2、为达到电源输出5V电压目标,完成电源电路的设计;3、为达到数码管显示目标,完成显示电路的设计;4、为达到键盘控制的目标,完成键盘电路的设计;5、为达到检测温度的目标,完成检测电路的设计;6、完成报警设计;7、进行软件设计[分配系统资源,编写系统初始化和主程序模块;编写数字调节器软件模块;编写A/D转换器处理程序模块;编写输出控制程序模块;其它程序模块(数字滤波、显示与键盘等处理程)等等。一、本课程设计系统概述1、系统原理温度传感器 DS18B20 从设备环境的不同位置采集温度,单片机 AT89S51 获取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进行调整。当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备 (压缩制冷器) ,当采集的温度经处理后低于设定温度的下时 , 单片机通过三极管驱动继电器开启升温设备 (加热器) 。当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声。系统中将通过串口通讯连接PC机存储温度变化时的历史数据,以便观察整个温度的控制过程及监控温度的变化全过程。2、系统结构图本设计以AT89S51单片机为主控核心设计的一个温度控制系统,低温时可控制加热设备,高温时控制风扇,超出设定最高温度值时蜂鸣器发出声响报警。 图1 总体硬件方框图 3、文字说明控制方案(1)温度测量部分方案 DS18B20是DALLAS公司生产的一线式数字温度传感器,它具有微型化、低功耗、高性能抗干扰能力、强易配处理器等优点,特别适合用于构成多点温度测控系统,可直接将温度

基于51单片机音乐盒程序设计

基于51单片机音乐盒程序设计基于51单片机音乐盒程序设计一、功能设计说明 1、电路设计 实物图 矩阵键盘部分电路图 2、运行流程图 程序开始 播放小苹果歌曲

否 判断任意按键是否按下继续播放小苹果歌曲是 否播放完成 进入电子琴模式 判断K16按键是否按下 是 3、电子琴模式按键对应发音设计 按键发音按键发音 低 1 中 2 K1 K9 低 2 中 3 K2 K10 低 3 中 4 K3 K11 低 4 中 5 K4 K12 低 5 中 6 K5 K13 按键发音按键发音 低 6 中 7 K6 K14 低 7 高 1 K7 K15 中 1 重新播放小苹果 K8 K16 二、硬件电路说明

1、程序下载电路 音乐盒电路图 ISP下载接口 本设计采用的单片机为AT89S52单片机,需使用ISP下载器进行下载程序,程序下载电路图如图中ISP1接口. 2、音乐发音电路 IO口P10发出不同频率的脉冲,则BUZZER产生各种不同的声音,本设计采用12MHZ 晶振,系统频率1MHZ,定时器计数一个1us,其对应关系如下表所示: 频率简谱码(T音符音符频率(HZ) 简谱码(T值) (HZ) 值) 低 1 DO 262 63628 # 4 FA# 740 64860 # 1 DO# 277 63731 中 5 SO 784 64898 低 2 RE 294 63853 # 5 SO# 831 64934 # 2 RE# 311 63928 中 6 LA 880

64968 低 3 M 330 64021 # 6 932 64994 低 4 FA 349 64103 中 7 SI 988 65030 # 4 FA# 370 64185 高 1 DO 1046 65058 低 5 SO 392 64260 # 1 DO# 1109 65085 # 5 SO# 415 64331 高 2 RE 1175 65110 低 6 LA 440 64400 # 2 RE# 1245 65134 # 6 466 64463 高 3 M 1318 65157 低 7 SI 494 64524 高 4 FA 1397 65178 中1 DO 523 64580 # 4 FA# 1480 65198 # 1 DO# 554 64633 高 5 SO 1568 65217 中 2 RE 587 64684 # 5 SO# 1661 65235 # 2 RE# 622 64732 高 6 LA 1760 65252 中 3 M 659 64777 # 6 1865 65268 中 4 FA 698 64820 高 7 SI 1967 65282 计算方法: 例如产生262HZ频率(发音DO), 周期T=1/262=3816 us,由于定时器中断使IO不停取反,故周期 T=3816/2=1908 us 定时器初值N=65536-1908=63628 TH0=63628/256 TL0=65536%256 三、程序代码说明 1 、脉冲产生 采用定时器0溢出中断产生脉冲,定时器初始化如下: TMOD = 0x01; //定时器0工作方式1 ,即十六位计数器计数 TR0 = 1; //启动定时器 ET0 = 1; //定时器0溢出中断使能

开题报告基于单片机的俄罗斯方块游戏系统的设计

毕业设计开题报告 题目基于单片机的俄罗斯方块游戏系统的设计 一、本课题的研究背景 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在联众又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在"联众俄罗斯方块"中,更有一些联众网络游戏所独有的魅力――有单机作战与两人在线对战两种模式,用户可任选一种进行游戏。网络模式还增加了积分制,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。 俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。本文利用单片机进行俄罗斯方块设计,采用51汇编语言进行编程,基于汇编语言的原因是在编写程序的过程中,对于程序的执行会有一个比较直观的表现。 二、国内外研究现状 1984年6月.俄罗斯科学院的数学家帕基特诺夫在空闲时编出了一个游戏程序.用来测试计算机的性能。帕基特诺夫从拼图游戏里得到灵感,设计出了俄罗斯方块。最早的俄罗斯方块背景颜色图案单一,发展到今天,各种版本的画面变得多姿多彩。虽最初版本没有积分和通关,但帕基特诺夫仍然玩上了瘾。这样一种看来粗糙的游戏.却在当年迅速受到欢迎。1988年,罗杰斯在美国的一个展览上看到了俄罗斯方块。觉得非常好玩,并从中立刻嗅到了巨大商机。他先与日本游戏厂商任天堂达成口头协议。然后出发前往莫斯科与莫斯科科学院谈判,最终罗杰斯于1989年代表任天堂取得了俄罗斯方块在家用机上的授权。 在罗杰斯的帮助下帕基特诺夫移居美国.继续从事游戏开发。1996年.他拿回了俄罗斯方块的知识产权,与罗杰斯一起成立了蓝色行星软件公司.开始独家代理俄罗斯方块向各游戏厂商授予版权。截至2009年,俄罗斯方块发售了1.25亿份,受到50多个国家和地区的玩家喜爱。有超过5O种语言的版本,运行在几十种游戏平台上,从掌机、街机、个人电脑,到手机和PDA。在俄罗斯方块网络版的北美和欧洲官方网站上,每天玩这个游戏的超过100万人次。 三、论文进行的主要工作 1.控制模块与显示模块接口代码编写; 2.提出系统设计框图,提出相应的解决方案; 3.整体电路板焊接与调试。 四、采用的方法、手段 用STC89C53单片机作为主控芯片,以LCD为显示界面,并用到电阻10k10个,开关5个,与门,12m晶振一个,电容3个。单片机上的程序设计一般是一个大循环结构,对于俄罗斯方块的程序设计,首先产生一个伪随机数,其范围是0-6,然后程序根据此数值所对应的图形模块装入ram的固定区域内,紧接着将此图像写入led所对应的显示缓冲区中,显示程序将缓冲区内的内容显示在led上,如果没有控制键按下,图形将自动向下移动。如果有键按下,则通过预先设置的随机发生器不断输出单个方块到显

单片机课程设计外部脉冲计数器

目录 摘要:单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。本课程设计的指导思想是控制单片机实现从0到99的计数功能,其结果显示在两位一体的共阳极数码管上。 关键词:脉冲计数器数码管单片机 本设计基于单片机技术原理,以单片机芯片STC89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个计数器,包括以下功能:输出脉冲,按下键就开始计数,并将数值显示在两位一体的共阳极数码管上。 1课题原理 PCB板上设置开始计数按键和清零按键,以上按键与89C52单片机的P1口连接,通过查询按键是否被按下来判断进行计数或者清零。若按下计数健,则单片机控制两位一体的共阳极数码管显示从00开始的数字,按下一次,则数字加一,一次类推;若按下清零键,则程序返回程序开始处,并且数码管显示00。

2 硬件及软件设计 2.1 硬件系统 2.1.1 硬件系统设计 此设计是在单片机最小系统的基础上进行开发和拓展,增加了按键电路和和数码管显示电路,由于单片机输出电流不足以驱动数码管发光,所以数码管需要驱动电路。我们采用了三极管对数码管电流进行放大,使电流大小达到要求值。 2.1.2 单元电路设计 基本框架如下图2.1 2.1基本框架

1.STC89C52芯片 STC89C52RC芯片包括: 8k字节 Flash,512字节RAM, 32位I/O口 线,看门狗定时器,两个数据指针, 三个16位定时器/计数器,一个6向 量2级中断结构,全双工串行口,片 内晶振及时钟电路。STC89C52RC芯片 可降至0Hz静态逻辑操作,时钟频率 0-80MHz,支持2种软件可选择节电 模式。空闲模式下,CPU停止工作, 允许RAM、定时器/计数器、串口、中 断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片 机一切工作停止,直到下一个中断或 硬件复位为止。8位微控制器8K字节 在系统可编程。芯片如图2.4所示。 图2.4 STC89C52芯片 2.按键电路 K1键为启动键,K2键为清零键,K3键为计数键,通过按钮的连接,实现开始、计数清零功能,连接电路如图2.5所示。 图2.5 按键电路

基于AT89C51单片机的带彩灯外观音乐盒设计

基于AT89C51单片机的带彩灯外观音乐盒设计

基于AT89C51单片机的带彩灯外观音乐盒设计 摘要 随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。本文设计的音乐盒是以AT89C51单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏音乐,功能多,外观效果多彩,配有彩灯,使用方便,本音乐盒有三个按键,key1控制彩灯,key2控制音乐,key3为总开关,可同时关闭音乐与彩灯。具有一定的商业价值。 关键字:AT89C51;音乐盒;按键;彩灯

Abstract Along with the development of human society, people of vision, hearing things put forward higher request. Small music box can bring good memories and improve people's spiritual culture. Traditional music box is heavy mechanical type, size, pronunciation and drab, cannot achieve batch production. Music box designed in this paper based on AT89C51 microcontroller as the core element of electronic music box, small size, light weight, can play music, multi-function, appearance and colorful, with a lantern,easy to use. The music box with three buttons , The key1 control Lantern, key2 control music, key3 total switch can turn off the music and lanterns. Have some commercial value. Keywords: AT89C51, music boxes, buttons, Lantern

51单片机课程设计

课程设计说明书
课程设计名称






学生姓名
指导教师
单片机原理及应用课程设计 电子信息工程 140405 20141329 李延琦 胡黄水
2016 年 12 月 26 日

课程设计任务书
课程设计 题目
酒精测试仪
起止日期
2016 年 12 月 26 日— 2017 年 1 月 6 日
设计地点
计算机科学与工程学 院单片机实验室 3409
设计任务及日程安排: 设计任务:分两部分: (一)、设计实现类:进行软、硬件设计,并上机编程、联线、调试、 实现; 1.电子钟的设计 2.交通灯的设计 3.温度计的设计 4.点阵显示 5.电机调速 6.电子音乐发声(自己选曲) 7.键盘液晶显示系统 (二)、应用系统设计类:不须上机,查资料完成软、硬件设计画图。 查资料选定题目。 说明:第 1--7 题任选其二即可。(二)里题目自拟。 日程安排: 本次设计共二周时间,日程安排如下: 第 1 天:查阅资料,确定题目。 第 2--4 天:进实验室做实验,连接硬件并编写程序作相关的模块实验。 第 5--7 天:编写程序,并调试通过。观察及总结硬件实验现象和结果。 第 8--9 天:整理资料,撰写课程设计报告,准备答辩。 第 10 天:上交课程设计报告,答辩。 设计报告要求:
1. 设计报告里有两个内容,自选题目内容+附录(实验内容),每 位同学独立完成。 2. 自选题目不须上机实现,要求能正确完成硬件电路和软件程序 设计。内容包括: 1) 设计题目、任务与要求 2)硬件框图与电路图 3) 软件及流程图 (a)主要模块流程图 (b)源程序清单与注释 4) 总结 5) 参考资料 6)附录 实验上机调试内容
注:此任务书由指导教师在课程设计前填写,发给学生做为本门课程设计 的依据。

俄罗斯方块设计

本科课程设计 题目:基于单片机的8*8LED 俄罗斯方块设计姓名孙俊 学号2008130346 院(系)物理与信息科学学院电子系 专业、年级电子信息科学与技术2008级 指导教师刘美容 二○一一年十月

基于单片机的8x8 俄罗斯方块设计 一、设计任务 《俄罗斯方块》是一款世人皆知,看似简单实则变化无穷的小游戏。本次设计以51单片机为基础,设计一款功能简单的8*8点阵俄罗斯方块游戏,我们将以汇编语言编程实现以下操作:图形的显示合成,通过按键控制图形的移动和旋转,满格消行,手动复位等。 本次设计俄罗斯方块功能简单,用单片机的最小系统就能得以实现。而单片机的最小系统设计中实际上最重要的就是对键盘/显示器接口电路的设计,由于系统功能不同所以要求就不同,接口设计也就不同。对一个键盘/显示器接口设计应从整个系统出发,综合考虑软、硬件特点。其中,硬件设计包括初始的设计原理和原理图介绍,到最终的电路图实际焊接以及布局,软件设计我们会给出具体的设计方案,比如图形的显示合成,通过按键控制图形的移动和旋转,满格消行等的设计流程图,以及具体的汇编程序。 二、设计方案 本次设计初期是在keil和proteus联合仿真中进行,编程语言为51汇编语言,后期是进行实物焊接。本次我们采用单片机STC89C52控制模块提供电源,以点阵式LED 显示,采用独立按键,直接在I/O口线上接上按键开关。因为设计时精简和优化了电路,所以剩余的口资源还比较多,我们使用四个按键,分别是旋转键,下键,左键,右键。这

种方案实现可行,既满足系统功能要求,又减少了系统实现的复杂度。而由于STC89C52是一种带8K 字节闪烁可编程可檫除只读存储器的低电压,高性能COMOS8的微处理器,该器件采用ATMEL 搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。89C52内置8位中央处理单元、256字节内部数据存储器RAM 、8k 片内程序存储器(ROM )32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。 三、8*8俄罗斯方块硬件电路设计及原理图 (1)选用设备 AT89C51芯片一片,USB 数据线一根,共阳极的点阵屏一个,驱动三极管八个,开关按键五个,导线,限流电阻若干。 (2)硬件电路系统总框图如图所示 图1 硬件系统总框图 1)电源(5v 的稳压电源,通过整流,滤波,稳压得到) 电源电路 CPU 控制电路 按键电路 显示电路

基于单片机的风扇控制器设计

基于单片机的风扇控制器设计 序言 自然风是指自然界里的天然阵风,风量时大时小,给人以舒适感觉。在生活中,我们可以感受自然风给我们带来的清爽,也可以享受空调带来的阵阵凉意。 风扇虽然在一定程度上给人们的生活带来了便捷,而电风扇的风量则不同,它是固定不变的,虽然配以摇头装置,仍不能达到自然风的效果。长时间吹固定不变的风量,不但会感到不舒服,而且对人的健康也不利,随着变频空调的发明,我们设想能否设计一种风扇,其工作效果可以象变频空调一样,象自然风一样,来解决经济条件还没有能接受空调或在一些不适合使用空调的地方的人们生活矛盾。 解决的方法是给电风扇安装一个摸拟自然风控制器,有了它可使电风扇发出变化的风量,好像自然界里的天然阵风,这种模拟自然风对老人和小孩尤为适宜,同时设计的风扇具备多档定时功能,也使其适合夜间睡眠使用。 该设计控制器期望能达到长期可靠运行,风扇速度可调节并不少于8档,能实现定时关机。风扇能模拟自然风,其转速能由快到慢,再由慢到快反复循环。 在本次设计,制作,调试过程中得到了李月红老师的大力支持,指导和帮助。特此表示感谢! ××××× 2007.5.28

第1章智能化风扇控制器硬件设计 1.1智能化风扇控制器系统设计方案及简介 方案一:采用数字电路控制。其原理方框图如图1-1所示。采用数字集成电路通过对脉冲振荡器的调节和脉冲计数实现定时关机。电路可由可控式振荡器、脉冲计数与分频器、脉冲译码与分配器与晶闸管触发电路。但是不能随意控制档速,而且硬件的连接有些复杂。不够实用。 图1-1数字电路控制方案 方案二:采用单片机控制。利用单片机丰富的I/O端口,及其控制的灵活性,采用数模转换实现基本的调速功能、还有时钟显示功能。其原理如图1-2所示。 通过比较以上两种方案,单片机有较大的活动空间,既能实现所要求的功能,又能在很大的程度上扩展功能,而且可以方便的对系统进行升级,所以我们采用后一种方案[1]。

基于51单片机的音乐盒的设计毕业论文

基于51单片机的音乐盒的 设计毕业论文 目次 目次 (3) 1 引言 (4) 1.1 音乐盒的意义 (4) 1.2 研究容 (5) 2.1系统总体框架图 (6) 2.2音乐盒的设计原理 (6) 2.3 单片机芯片概述 (7) 3 硬件电路设计 (8) 3.1 单片机最小系统原理图 (8) 3.1.1 复位电路 (8) 3.1.2 晶振电路 (9) 3.1.3时钟电路 (9) 3.2 LCD显示模块 (9) 3.3 继电器模块 (11) 3.3.1电磁继电器的工作原理和特性 (12)

3.3.2 固态继电器的工作原理和特性 (12) 3.3.3 继电器主要产品技术参数 (12) 3.4 按键模块 (13) 3.5 其它 (13) 4 软件设计 (14) 4.1 软件总体流程图 (14) 4.2播放/暂停子程序 (15) 4.3 LCD显示模块软件设计 (17) 4.3.1 LCD的初始化函数 (17) 4.3.2 LCD与继电器的函数 (18) 5 系统实现 (19) 5.1 硬件调试 (20) 5.1.1 按键控制的实现 (20) 5.1.2 LCD显示 (21) 5.1.3 其他 (21) 总结 (22) 致谢 (23) 参考文献 (24) 附录A 元器件清单 (25) 附录B 源程序 (26)

1 引言 在进入21世纪后,单片机产品的发展正朝着高性能和多品种方向,并且发展趋势是进一步朝着CMOS化、小体积、低功耗、大容量、高性能、低价格以及外围的电路装化等几个方面去发展。单片机的应用的重要意义还是在于它是从根本上改变了传统的控制系统设计思想和设计方法。过去必须要由模拟电路或者数字电路才可以实现的大部分的功能,现在已能完全可以用单片机通过软件的方法来实现了。这种由软件去代替硬件的控制技术也称之为微控制技术,这是传统控制技术的一次革命。单片机可以说渗透到了我们生活的各个方面,几乎难以找到哪个领域里没有单片机的踪迹。导弹中的导航装置,飞机里安装的各种仪表的控制,计算机里的网络通讯与数据传输方面,工业自动化过程中实时控制和数据处理方面,生活中被广泛使用的各种智能IC卡,民用的高档轿车的安全保障系统,摄像机、录像机、全自动洗衣机所涉及的控制方面,以及远程控制的玩具、电子宠物等等,这些全都是离不开单片机的。 而伴随着科学技术的不断进步和社会的持续发展,人类所接触的更种信息也在不断增加并且信息变得越来越复杂。面对着浩如烟海的繁杂信息,人们目前已经能利用计算机等工具快速、精准地对其进行快速处理,但要想将其处理完毕的信息及时、清晰地传递给其他人,还必须要寻找更加卓越的显示技术去实现它。而单片机技术与液晶显示技术的结合,恰恰使得信息的传输交流向着智能化可视化方向进行快速发展。

MCS-51系列单片机程序的设计论文一

MCS-51系列单片机程序的设计论文 程序设计是单片机开发最重要的工作,程序设计就是利用单片机的指令系统,根据应用系统(即目标产品)的要求编写单片机的应用程序,其实我们前面已经开始这样做过了,这一课我们不是讲如何来设计具体的程序,而是教您设计单片机程序的基本方法。不过在讲解程序设计是单片机开发最重要的工作,程序设计就是利用单片机的指令系统,根据应用系统(即 目标产品)的要求编写单片机的应用程序,其实我们前面已经开始这样做过了,这一课我们不是讲如何 来设计具体的程序,而是教您设计单片机程序的基本方法。不过在讲解之前还是有必要先了解一下单片 机的程序设计语言。 一.程序设计语言 这里的语言与我们通常理解的语言是有区别的,它指的是为开发单片机而设计的程序语言,如果 您没有学过程序设计可能不太明白,我给大家简单解释一下,您知道微软的VB,VC 吗?VB,VC 就是为 某些工程应用而设计的计算机程序语言,通俗地讲,它是一种设计工具,只不过这种工具是用来设计计 算机程序的。要想设计单片机的程序当然也要有这样一种工具(说设计语言更确切些),单片机的设计 语言基本上有三类: 1.完全面向机器的机器语言 机器语言就是能被单片机直接识别和执行的语言,计算机能识别什么?以前我们讲过--是数字“0” 或“1”,所以机器语言就是用一连串的“0”或“1”来表示的数字。比如:MOV A,40H;用机器语言 来表示就是11100101 0100000,很显然,用机器语言来编写单片机的程序不太方便,也不好记忆,我 们必须想办法用更好的语言来编写单片机的程序,于是就有了专门为单片机开发而设计的语言: 2.汇编语言 汇编语言也叫符号化语言,它使用助记符来代替二进制的“0”和“1”,比如:刚才的MOV A, 40H 就是汇编语言指令,显然用汇编语言写成的程序比机器语言好学也好记,所以单片机的指令普遍采 用汇编指令来编写,用汇编语言写成的程序我们就叫它源程序或源代码。可是计算机不能识别和执行用 汇编语言写成的程序啊?怎么办?当然有办法,我们可以通过“翻译”把源代码译成机器语言,这个过 程就叫做汇编,汇编工作现在都是由计算机借助汇编程序自动完成的,不过在以前,都是靠手工来做的。 值得注意的是,汇编语言也是面向机器的,它仍是一种低级语言。每一类计算机

51单片机控制LED灯程序设计

51单片机:LED灯亮灯灭程序设计 1.功能说明:控制单片机P1端口输出,使P1.0位所接的LED点亮,其他7只灯熄灭。 程序: 01: MOV A , #11111110B ; 存入欲显示灯的位置数据 02: MOV P1,A ; 点亮第一只灯 03: JMP $ ; 保持当前的输出状态 04: END ; 程序结束 2.功能说明:单片机P1端口接8只LED,点亮第1、3、4、6、7、8只灯。 程序:

01:START: MOV A , #00010010B ; 存入欲显示灯的位置数据 02:MOV P1,A ; 点亮灯 03:JMP START ; 重新设定显示值 04:END ; 程序结束 3.功能说明:单片机P1端口接8只LED,每次点亮一只,向左移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设左移8次 02:MOV A, #11111110B ;存入开始点亮灯位置

03:LOOP: MOV P1, A ;传送到P1并输出 04:RL A ;左移一位 05:DJNZ R0, LOOP ;判断移动次数 06:JMP START ;重新设定显示值 07:END ;程序结束 4.功能说明:单片机P1端口接8只LED,每次点亮一只,向右移动点亮,重复循环。 程序: 01:START: MOV R0, #8 ;设右移8次

02:MOV A, #01111111B ;存入开始点亮灯位置03: LOOP: MOV P1, A ;传送到P1并输出 04: ACALL DELAY ;调延时子程序05: RR A ;右移一位 06: DJNZ R0, LOOP ;判断移动次数07: JMP START ;重新设定显示值08: DELAY: MOV R5,#50 ; 09:DLY1: MOV R6,#100 ; 10: DLY2: MOV R7,#100 ;

基于单片机的俄罗斯方块设计与实现毕设论文

基于单片机的俄罗斯方块设计与实现 摘要 随着单片机在手持娱乐设备上应用的发展,越来越多的应用在电子领域中,如:电子宠物,俄罗斯方块,智能IC卡等。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。 本文选用STC89C52RC单片机作为系统的芯片,实现人机交互、娱乐等功能。选用LCD12864实现俄罗斯方块游戏界面、图形显示;选用独立按键实现游戏控制。本设计实现的基本功能是:用按键控制目标方块的变换与移动;消除一行并计分,方块堆满时结束游戏等俄罗斯方块的基本功能。 此次设计初期是在keil和proteus联合仿真中进行,编程语言为c语言,后期是进行实物焊接。 关键词:俄罗斯方块;单片机;控制;仿真

Abstract With the development of the single chip microcomputer application on handheld entertainment equipment, more and more application in the field of electronics.Such as: electronic pet, tetris, smart IC card, etc.Tetris is a popular global TV game and PSP games, it consists of the Russian alexei palmer jeter's invention, therefore the name. This article chooses STC89C52RC single-chip microcomputer as the system of chip, realize human-machine interaction, entertainment, etc.Selection of tetris game interface, graphical display LCD12864 implementation;Choose independent control game buttons.This design is to realize the basic function of: key control target square transformation and movement;Remove a row and scoring, square pile end game tetris, such as the basic functions. The early stage of design is done in keil and proteus simulation, programming language is the c language, is late for real welding. Keywords:Russian square;Microprocessor;Control;Simulation

基于单片机的数字音乐盒

山东建筑大学 课程设计说明书 题目:基于单片机的数字音乐盒 课程:单片机原理及应用B课程设计院(部):信息与电气工程学院 专业:电子信息工程 班级: 学生姓名: 学号: 指导教师:高焕兵张君捧 完成日期: 2013年6月

目录 摘要 .................................................................... I 1 设计目的 (2) 2 设计要求 (2) 3 设计内容 (3) 3.1 设计原理 (3) 3.2 方案设计 (3) 3.3 电路各模块说明 (4) 3.4 器件选择 (6) 3.5.系统设计 (8) 3.6 软件设计 (8) 3.7 仿真调试及操作说明 (9) 总结与致谢 (10) 参考文献 (11) 附录 (12) 附录一:基于单片机的数字音乐盒总电路图 (12) 附录二:音乐程序 (12)

山东建筑大学信息与电气工程学院学院课程设计说明书 摘要 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。 本设计由由单片机AT80C51芯片和LCD显示器为核心,辅以必要的电路,构成的一个单片机电子数字音乐盒。本设计采用4*4键盘,用Protel99来画系统硬件图,采用C语言进行编程,编程后利用KEIL C51来进行编译,再生成的HEX文件装入芯片中,采用proteus软件来仿真,检验功能得以正常实现。 关键词:单片机;音乐盒;电路;播放

相关文档
最新文档