找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 23945|回复: 1
打印 上一主题 下一主题
收起左侧

基于单片机的俄罗斯方块游戏设计文档

[复制链接]
跳转到指定楼层
楼主

基于单片机实现的俄罗斯方块游戏


MCU based Russia block game

本设计是通过AT89S52单片机来实现俄罗斯方块游戏的设计,使用C语言进行编程,并通过Proteus来进行仿真。
本设计要实现的基本功能是:应用按键来控制方块的变换与移动;消除一行并计分;消除多行额外奖励记分,方块堆满时结束游戏等俄罗斯方块的基本功能。单片机在手持娱乐设备上的应用具有非常大的潜力,它能将其带入到一个新的阶段。为了解决外部电路图,必须充分了解所用液晶的显示方法和单片机的外部接口功能,和所需要处理的逻辑关系;还要理解LCD液晶的控制原理,来通过数据端口和控制端口来实现画面在液晶上面的显示。
程序则要求对外部电路了解的情况下完成自己所需要的功能,并将所要完成的功能用编程语言的形式来实现。然后通过Protues仿真实现通过外部按键来控制各种不同图形的方块来玩游戏,并且实现记录分数和通过过关数来改变方块下降的速度。最后将程序下载至AT89S52单片机并进行实际运行,实际运行表明,本设计可以实现基本的游戏功能,达到预期的目的


  •         
计算机系统的发展已明显地朝三个方向发展;这三个方向就是:巨型化,单片化,网络化。以解决复杂系统计算和高速数据处理的仍然是巨型机在起作用,故而,巨型机在目前在朝高速及处理能力的方向努力。单片机在出现时,Intel公司就给其单片机取名为嵌入式微控制器(embedded microcontroller)。单片机的最明显的优势,就是可以嵌入到各种仪器、设备中。这一点是巨型机和网络不可能做到的。单片机在内部已集成了越来越多的部件,这些部件包括一般常用的电路,例如:定时器,比较器,A/D转换器,D /A转换器,串行通信接口,Watchdog电路,LCD控制器等。





  •       整体设计方案
    •   系统的核心部分单片机
      •      单片机的选择
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。下面是单片机的主要发展趋势。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
单片机经过3代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。其发展趋势不外乎以下几个方面:
  • 多功能
单片机中尽可能地把所需要的存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多的功能。比如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器---看家狗)、高速I/O口及计数器的捕获/比较逻辑等。
有的单片机针对某一个应用领域,集成了相关的控制设备,以减少应用系统的芯片数量。例如,有的芯片以51内核为核心,集成了USB控制器、SMART CARD接口、MP3解码器、CAN或者I*I*C总线控制器等,LED、LCD或VFD显示驱动器也开始集成在8位单片机中。
2.高效率和高性能
为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP的设计技术,使单片机的性能有了明显的提高,表现为:单片机的时钟频率得到提高;同样频率的单片机运行效率也有了很大的提升;由于集成度的提高,单片机的寻址能力、片内ROM(FLASH)和RAM的容量都突破了以往的数量和限制。
由于系统资源和系统复杂程度的增加,开始使用高级语言(如C语言)来开发单片机的程序。使用高级语言可以降低开发难度,缩短开发周期,增强软件的可读性和可移植性,便于改进和扩充功能。
3.低电压和低功耗
单片机的嵌入式应用决定了低电压和低功耗的特性十分重要。由于CMOS等工艺的大量采用,很多单片机可以在更低的电压下工作(1.2V或0.9V),功耗已经降低到uA级。这些特性使得单片机系统可以在更小电源的支持下工作更长的时间。
4.低价格
单片机应用面广,使用数量大,带来的直接好处就是成本的降低。目前世界各大公司为了提高竞争力,在提高单片机性能的同时,十分注意降低其产品的价格。
在此,我们采用型号为AT89S52的单片机。因为: AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33MH、三级加密程序存储器 、32个可编程I/O口线 、三个16位定时器/计数器八个中断源 、全双工UART串行通道、低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针 、掉电标识符 。
AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
AT89S52单片机有PDIP、PLCC、TQFP三种封装方式,在此我选用DPIP也就是双列直插封装的单片机此种封装有如下特点:
1. 适合PCB的穿孔安装;
2. 易于对PCB布线;
3. 操作方便;










      •      AT89S52引脚功能描述
AT89S52单片机的管脚说明如图2-1所示:

图2-1 DIP封装 AT89S52单片机引脚结构图

1.VCC:电源。
2.GND:接地端 。
3.P0口(P0.0~P0.7):P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
4.P1口(P1.0~P1.7):P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和 P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如表2-1所示:
在 Flash编程和校验时,P1口接收低8位地址字节。
表2-1 P1口第二功能

引脚号

第二功能

P1.0

T2(定时器/计数器 T2 的外部计数输入),时钟输出

P1.1

T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制)

P1.5

MOSI(在系统编程用)

P1.6

MISO(在系统编程用)

P1.7

SCK(在系统编程用)


5.P2口(P2.0~P2.7):P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。在使用8位地址(如 MOVX @RI)访问外部数据存储器时,P2口输出P2 锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
6.P3口(P3.0~P3.7):P3 口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为 AT89S52第二功能使用,如表2-2所示:
表2-2 P3口第二功能
引脚号
第二功能
P3.0
RXD(串行输入)
P3.1
TXD(串行输出)
P3.2
I (外部中断 0)
P3.3
I (外部中断 0)
P3.4
T0(定时器 0 外部输入)
P3.5
T1(定时器 1 外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器写选通)

在 flash 编程和校验时,P3 口也接收一些控制信号。RST:复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器 AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
ALE/ :地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE 仅在执行MOVX或MOVC指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
A/VPP:访问外部程序存储器控制信号。为使能从0000H到FFFFH的外部程序存储器读取指令,EA 必须接 GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。










      •      晶振特性
AT89S52单片机有一个用于构成内部振荡器的反相放大器,XTAL1和XTAL2分别是放大器的输入、输出端。石英晶体和陶瓷谐振器都可以用来一起构成自激振荡器。从外部时钟源驱动器件的话,XTAL2可以不接,而从XTAL1接入,如图2-2所示。由于外部时钟信号经过二分频触发后作为外部时钟电路输入的,所以对外部时钟信号的占空比没有其它要求,最长低电平持续时间和最少高电平持续时间等还是要符合要求的。如图 2-2 所示:

图2-2内部振荡电路连接图






    •   液晶显示模块
显示器部分是由HD61202液晶显示控制驱动器和JM12864J液晶显示器组成的,下面我们对其分别进行介绍。










      •      液晶显示控制驱动器HD61202的特点
HD61202液晶显示控制驱动器是一种带有驱动输出的图形液晶显示控制器,它可直接与8位微处理器相连,它可与HD61203配合对液晶屏进行行、列驱动。HD61202是一种带有列驱动输出的液晶显示控制器,它可与行驱动器HD61203配合使用,组成液晶显示驱动控制系统。
1.内藏64×64=4096位显示RAM,RAM中每位数据对应LCD屏上一个点的亮、暗状态;
2.HD61202是列驱动器,具有64路列驱动输出;
3.HD61202读、写操作时序与68系列微处理器相符,因此它可直接与68系列微处理器接口相连;
4.HD61202的占空比为1/32~1/64。










      •      液晶显示控制驱动器HD61202的引脚功能
引脚CS1,CS2,CS3 为芯片的片选端;引脚 E 为读写使能信号,它是在下降沿时数据被锁存入HD61202的;在E 高电平期间,数据被读出;R/W 为读写选择信号,当它为一时为读选通,为零时为写选通;DB0-DB7为数据总线RST 为复位信号复位信号有效时,关闭液晶显示,使显示起始行为0,RST可跟MCU相连,由MCU控制;也可直接接VDD,使之不起作用。HD61202的引脚功能如下表2-3所示:
表2-3 HD61202的引脚功能
引脚符号
状态
引脚名称
功能
CS1,CS2,CS3
输入
芯片片选端
CS1和CS2低电平选通,CS3高电平选通。
E
输入
读写使能信号
在E下降沿,数据被锁存(写)入HD61202;在E高电平期间,数据被读出
R/W
输入
读写选择信号
R/W=1为读选通,R/W=0为写选通
RS
输入
数据、指令选择信号
RS=1为数据操作
RS=0为写指令或读状态
DB0-DB7
三态
数据总线


RST
输入
复位信号
复位信号有效时,关闭液晶显示,使显示起始行为0,RST可跟MCU相连,由MCU控制;也可直接接VDD,使之不起作用。












      •      液晶显示控制驱动器HD61202的指令系统
HD61202的指令系统比较简单,总共只有七种。现分别介绍如下:
1. 显示开/关指令
R/W   RS
DB7   DB6   DB5   DB4  DB3   DB2   DB1   DB0
0    0
0    0     1     1    1     1     1    1/0

当DBO=1时,LCD显示RAM中的内容;DBO=0时,关闭显示。
2. 显示起始行(ROW)设置指令
该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律的改变显示起始行,可以使LCD实现显示滚屏的效果。
R/W   RS
DB7   DB6   DB5  DB4  DB3  DB2  DB1  DB0
0    0
1     1         显示起始行(0-63)

3. 页(PAGE)置指令
R/W    RS
DB7     DB6    DB5     DB4      DB3      DB2  DB1  DB0
0     0
  1
   0
1  
   1
   1
页号(0-7)

显示RAM共64行,分8页,每页8行。
4. 列地址(Y Address)设置指令
R/W    RS
DB7   DB6      DB5  DB4  DB3  DB2  DB1  DB0
0     0
0     1              显示列地址(0-63)

设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MCU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。
5. 读状态指令
R/W   RS
DB7   DB6   DB5     DB4   DB3   DB2   DB1   DB0
1    0
BUSY   0   ON/OFF   REST   0     0     0     0

该指令用来查询HD61202的状态,各参量含义如下:
BUSY: 1-内部在工作   0-正常状态
ON/OFF:1-显示关闭     0-显示打开
REST:  1-复位状态     0-正常状态
在BUSY和REST状态时,除读状态指令外,其它指令均不对HD61202产生作用。在对HD61202操作之前要查询BUSY状态,以确定是否可以对HD61202进行操作。
6. 写数据指令
R/W    RS
DB7   DB6   DB5   DB4   DB3   DB2   DB1   DB0
0     1
           写        数        据

读、写数据指令每执行完一次读、写操作,列地址就自动增一,必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。
7. 读数据指令
R/W    RS
DB7   DB6   DB5   DB4   DB3   DB2   DB1   DB0
1     1
        读    显     示     数      据












      •      HD61202的软件设计
液晶控制器HD61202 一共有七条指令,从作用上可分为两类,显示状态设置指令和数据读/写操作指令。详见指令系统可查看图形液晶显示器产品有关手册。显示起始行设置中L5~L0 为显示起始行的地址,取值在0-3FH(1-64 行)范围内。页面地址设置中P2-P0 为选择的页面地址,取值范围为0-7H,代表1-8 页。列地址设置中C5-C0 为Y地址计数器的内容,取值在0-3FH(1-64 行)范围内。
显示器上128 点×64 点,每8点为一字节数据,都对应着显示数据RAM(在HD61202 芯片内),一点对应一个bit,计算机写入或读出显示存储器的数据代表显示屏上某一点列上的垂直8 点行的数据。D0 代表最上一行的点数据,D1为第二行的点数据,……D7为第八行的点数据。该bit=1 时该点则显示黑点出来,该bit=0 时该点则消失。另外LCD 指令中有-条display ON/OFF 指令,display ON 时显示RAM 数据对应显示的画面;display OFF 则画面消失,RAM 中显示数据仍存在。
点阵字模文件的建立:
由于MGLS12864 液晶显示器没有内部字符发生器,所以在屏幕上显示的任何字符、汉字等须自己建立点阵字模库,然后均按图形方式进行显示。由于HD61202 显示存储器的特性,不能将计算机内的汉字库和其它字模库提出直接使用,需要将其旋转90 度后再写入。点阵字模库建立包括以下几个方面:
1.建立8×16 点阵常用字符、数字、符号字模库。
可选用计算机BIOS 中ASCII 的8×16 字模库,所有字符按照ASCII 值从小到大升序排列。
asm{MOV ax,1130h /*AH=11h—功能调用。装入字库至软字库 */
mov bh,6 /*AL=30h 取点阵信息 */
int 10h /*BH=6 取ROM8X16 点阵指针(VGA) */
mov ax,es /*出口:ES:BP 指向字库指针 */
mov ascii_es,ax
mov ax,bp
mov ascii_bp,ax };
ascii_offset=ascii_bp+16*asciicode;
for(j=0;j<16;j++) buf[j]=peekb(ascii_es,ascii_offset+j); /*读16 字节点阵数据*/
for(m=0;m<16;m++) /*点阵数据转换成LCD 格式数据*/
{ if(m<8) { beginbyte= 7; shiftn="7";}
else { beginbyte="15"; shiftn="15";}
for(j=0;j<8;j++)
ascii8x16[m]=(ascii8x16[m]+ (buf[beginbyte-j]>>(shiftn-m))&0x01)<<1;
}
也可选用UCDOS 的ASC16 文件做字模库。ASC16 文件的字符为8×16 点阵。所有字符按照ASCII值从小到大升序排列。计算字符首地址的公式:字符首地址=字符的ASCII 码值×16加字模库首地址。
2.建立所用到的16×16 点阵字模库。汉字字符可选用UCDOS 的HZK16 文件做字模库。HZK16 文件的字符为16×16 点阵。所有字符按照区位码从小到大升序排列。计算汉字字符首地址的公式如下:汉字首地址=((区码-1)×94+位码-1)×32。作者用C 语言编写的读取UCDOS 点阵字库字模程序,完成字模读取。
数据重新排列,并按MCS-51 汇编程序的要求写成相应格式的文本文件。
p=((quma-1)*94+weima-1)*32;
cclibfile="fopen"("HZK16","rb");
fseek(cclibfile,(long)p,SEEK_SET);
fread(buf,sizeof(unsigned char),32,cclibfile); /*读32 字节点阵数据*/
for(m=0;m<32;m++){ /*点阵数据转换成LCD 格式数据*/
if(m<8) { beginbyte="14"; shiftn="7";}
else if( m>= 8 && m<16 ) { beginbyte="15"; shiftn="15";}
else if( m>=16 && m<24 ) { beginbyte="30"; shiftn="23";}
else { beginbyte="31"; shiftn="31";}
for(j=0;j<8;j++)
hzk16x16[m]=(hzk16x16[m]+ (buf[beginbyte-2*j] >>(shiftn-m))&0x01)<<1;
}
3.常用图形(如产品商标等)的点阵图形的建立。对已有的图形可采用扫描仪进行扫描,然后用图形处理软件进行处理,再将BMP 格式文件转换成MCS-51的汇编文件的格式。
以上所有的字模数据都存放在单片机W78E58 的程序存储器中,如用到的汉字、图形较多,可选用较大容量的程序存储器。
通用子程序:通用子程序分左半屏、右半屏写指令代码子程序和写显示数据子程序。液晶显示驱动器HD16202 内部有个忙标志寄存器,当BF=1 时,表示内部操作正在运行,不能接受外部数据或指令。下面子程序中设指令代码寄存器为COMM,数据寄存器为DATA。
(COMM EQU 20H /*指令寄存器*/ DATA EQU 21H /*数据寄存器*/)
1.左半屏写指令子程序
WR_CMD1: MOV DPTR,#CRADR1 ;/*读状态字口地址*/
WAIT1: MOVX A,@DPTR ;/* 读状态字 */
JB ACC.7,WAIT1 ;/*判忙标志BF,如BF=1 忙,等待*/
MOV DPTR,#CWADR1 ;/*写指令字口地址*/
MOV A,COMM ;/*取指令代码*/
MOVX @DPTR,A ;/*写指令代码*/
RET
2.左半屏写数据子程序
WR_DATA1:MOV DPTR,#CRADR1 ;/*读状态字口地址*/
WAIT11: MOVX A,@DPTR ;/* 读状态字 */
JB ACC.7,WAIT11 ;/*判忙标志BF,如BF=1 忙,等待*/
MOV DPTR,#DWADR1 ;/*写数据字口地址*/
MOV A,DATA ;/*取数据/
MOVX @DPTR,A ;/*写数据*/
RET
3.右半屏写指令子程序WR_CMD2 和右半屏写数据子程序WR_DATA2 的编制同左半屏子程序相同,只是对应口地址不同。




      •      JM12864J的电路结构特点
JM12864J是使用HD61202及其兼容控制驱动器作为列驱动器,同时使用HD61203作为行驱动器的液晶模块。由于HD6120不与MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,因此这里就不作介绍了。下面主要介绍一下JM12864J的逻辑电路图。
JM12864J共有两片HD61202及其兼容控制驱动器和一片HD61203,如图2-3所示:

图2-3  JM12864J的逻辑电路图

在JM12864J中,两片HD61202的ADC均接高电平,RST也接高电平,这样在使用JM12864J时就不必再考虑这两个引脚的作用。 跟HD61202(1)的 相连; 跟HD61202(2)的CS1相连,因此 选通组合信号为, =01选通(1),, =10选通(2)。对于JM12864J,只要供给VDD、VSS和V0即可,HD61202和HD61203所需的电源将由模块内部电路在VDD和V0、VSS的作用下产生。



      •      JM12864J的应用
以下内容为以单片机89S52为例机的接口电路,控制电路为直接访问方式的接口电路。电路原理图如图2-4所示:

图2-4  AT89S52 与液晶的接口电路

根据以上电路原理图中液晶的各引脚与单片机的接法,可得本设计的液晶模块电路如图2-5所示:
由图2-5可以看出:VSS接地;数字电源VDD接+5V;数据、指令选择信号RS接单片机P3.2口;读写选择信号R/W接单片机P3.1口;DB0~DB7分别接单片机的P2.0~P2.7口;芯片1、芯片2的片选分别接单片机的P3.4、P3.3口;复位端RST、背光正电源LEDA接+5V;液晶驱动电压VEE、背光负电源LEDK接地。




















图2-5液晶模块电路











      •      键盘电路
键盘电路本设计共采用按键3个,分别与单片机的 P1.0、P3.5、P3.6、P3.7口相连,分别对应旋转、左移、下、右移。




天津职业技术师范大学2010届本科生设计
  •       系统仿真
    •   Proteus软件介绍
Proteus软件是来自英国Labcenter electronics公司的EDA工具软件。 Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,不需要别的,Proteus建立了完备的电子设计开发环境!
Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“The Route to PCB CAD”。Proteus 产品系列也包含了革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:—个易用而又功能强大的ISIS原理布图工具;Proteus混合模型SPICE仿真; ARES PCB设计。Proteus 仿真器的一个扩展Proteus VSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。
1.支持许多通用的微控制器,如PIC,AVR,HC11以及8051;
2.交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘;
3.强大的调试工具,包括寄存器和存储器,断点和单步模式;
4.IAR C-SPY 和Keil uVision3等开发工具的源层调试;
5.应用特殊模型的DLL界面-提供有关元件库的全部文件。





    •   Keil软件介绍
Keil C51 μVision2集成开发环境是Keil Software,Inc/Keil Elektronik GmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。Keil C51集成开发环境的主要功能有以下几点:
1.μVision2 for Windows:是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中;
2.C51国际际准化C交叉编译器:从C源代码产生可重定位的目标模块;
3.A51宏汇编器:从80C51汇编源代码产生可重定位的目标模块;
4.BL51链接器/定位器:组合由C51和A51产生的可重定位的目标模块,生成绝对目标模块;
5.LIB51库管理器:从目标模块生成连接器可以使用的库文件;
6.OH51目标文件至HEX格式的转换器,从绝对目标模块生成Intel Hex文件;
7.RTX-51实时操作系统:简化了复杂的实时应用软件项目的设计。
这个工具套件是为专业软件开发人员设计的,但任何层次的编程人员都可以使用,并获得80C51单片机的绝大部分应用。Keil Software提供了一流的80C51系列开发工具软件,下面描述每个套件及其内容:
(1)PK51专业开发套件:PK51专业开发套件提供了所有工具,适合专业开发人员建立和调试80C51系列微控制器的复杂嵌入式应用程序。专业开发套件可针对80C51及其所有派生系列进行配置使用;
(2)DK51开发套件:DK51开发套件是PK51的精简版,它不包括RTX51 Tiny实时操作系统。开发套件可针对80C51及其所以派生系列进行配置使用;
(3)编译器套件:如果开发者只需要一个C编译器而不需要调试系统,则CA51编译器套件就是最好的选择。CA51编译器套件只包含μVision2 IDE集成开发环境,CA51不提供μVision2调试器的功能。这个套件包括了要建立嵌入式应用的所有工具软件,可针对80C51及其所有派生系列进行配置使用;
表4-1 开发套件和工具对照表
Components
PK51
DK51
CA51
A51
FR51
uVision2 Project Management&Editor


A51 Assembler


C51 Compiler




BL51 Liker/locator


LIB51 Library Magaer


uVision2 Debugger/Simulator






RTX51 Tiny








RTX51 Full










(4)A51汇编器套件:A51汇编器套件包括一个汇编器和创建嵌入式应用所需要的所有工具。它可针对80C51及其所有派生系列进行配置使用;
(5)RTX51实时操作系统(FR51):RTX51实时操作系统是80C51系列微控制器的一个实时内核。RTX51 Full提供RTX51 Tiny的所以功能和一些扩展功能,并且包括CAN通信协议接口子程序;
(6)比较表:表4-1列出了每个套件的功能,表的顶上一栏为工具套件名称,表的左边一列为软件组成部分,使用这个对照表可以选择符合需要的套件。





    •   俄罗斯方块系统PROTUES仿真
用Proteus软件,根据俄罗斯方块电路原理图,画出仿真图。
电路图画完后使用Proteus与Keil联调,这里使用的软件是Keil μVision3.8与Proteus7.4。
1.打开PROTEUS的安装目录,进入help目录,打开ARM.HLP帮助文档,点击联接:Remote Debugger Drivers/Download and Install remote debugger driver for Keil uVision3, 下载VDMAGDI.EXE, 运行安装到KEIL安装目录VDM51.dll文档会自动安装到KEILC51BIN目录。


图4-1 Protues仿真


2.打开KEIL中打开要联调的项目,在project workspace的“target1”上点右键/options for target'target1'。
在打开的对话框中点击到Debug选项卡,在右上角上先中USE选项, 并在下拉菜单中选中proteus VSM Simulator,在旁边的Settings点一下,如果是proteus在同一台电脑,host:127.0.0.1, port:8000, 点确定/OK保存。
3.打开proteus并打开要仿真的图纸,点击Debug菜单/选中Use Remote Debug Monitor。
4.完成,如果程序和电路图没问题,在KEIL中build all并且仿真运行后,可以在proteus看到实时效果了如图4-1所示:
经Proteus仿真,证明此俄罗斯方块游戏能正常运行,可以进入实物焊接阶段。
1




天津职业技术师范大学2010届本科生设计
  •       实物的制作与调试
    •   电路的焊接
1.焊前准备
首先要熟悉所焊印制电路板的装配图,并按图纸配料,检查元器件型号、规格及数量是否符合图纸要求,并做好装配前元器件引线成型等准备工作,由于制作的是便携式的俄罗斯方块游戏机,所以在这里我选用了电池来做电源。
2.焊接顺序
元器件装焊顺序依次为:电阻器、电容器、二极管、三极管、集成电路、大功率管,其它元器件为先小后大。
3.对元器件焊接要求
(1) 电阻器焊接
按图将电阻器准确装人规定位置。要求标记向上,字向一致。装完同一种规格后再装另一种规格,尽量使电阻器的高低一致。焊完后将露在印制电路板表面多余引脚齐根剪去。
(2) 电容器焊接
将电容器按图装人规定位置,并注意有极性电容器其 “+” 与 “-” 极不能接错,电容器上的标记方向要易看可见。先装玻璃釉电容器、有机介质电容器、瓷介电容器,最后装电解电容器。
(3) 二极管的焊接
二极管焊接要注意以下几点:第一,注意阳极阴极的极性,不能装错;第二,型号标记要易看可见;第三,焊接立式二极管时,对最短引线焊接时间不能超过 2S 。
(4) 三极管焊接
注意 e 、b 、c 三引线位置插接正确;焊接时间尽可能短,焊接时用镊子夹住引线脚,以利散热。焊接大功率三极管时,若需加装散热片,应将接触面平整、打磨光滑后再紧固,若要求加垫绝缘薄膜时,切勿忘记加薄膜。管脚与电路板上需连接时,要用塑料导线。
(5) 集成电路焊接
首先按图纸要求,检查型号、引脚位置是否符合要求。焊接时先焊边沿的二只引脚,以使其定位,然后再从左到右自上而下逐个焊接。
对于电容器、二极管、三极管露在印制电路板面上多余引脚均需齐根剪去。





    •   系统性能测试与功能说明
焊接完成后,将电源接通,游戏画面出现后,分别按下左、右、下、旋转等按钮,均能正常在屏幕上做出反应。当方块堆满一行时,方块正确消除,并将分数累计在屏幕右侧,同时消除多行方块时,分数有额外奖励。达到一定分数时,方块下落速度加快,难度提高。当屏幕中方块有触及顶端的时候,游戏结束。


结  论
通过半个学期地全心投入和辛苦努力,终于完成了基于单片机的俄罗斯方块游戏的设计,设计的过程就是综合运用所学知识和学习新知识的过程。由于经验不足,难免出现一些小的失误,但无论怎样,本次设计对于我来说都是一次难得的锻炼机会,使我积累了许多宝贵的经验。
本文对单片机制作的俄罗斯方块游戏的运行原理进行了分析,全面、详细地阐述了俄罗斯方块游戏的设计过程。本游戏机已经达到了掌上娱乐的要求,但在设计上还留有进一步改善的余地,如可以美化游戏界面、加入背景和动作音乐、力回馈系统等。
设计的整个开发过程是曲折的,首先在硬件设计上,由于开始对LCD液晶屏不熟悉,加之其程序量较多,所以,在设计的过程中,不免有些困难,通过我多方面的查找资料,并不断的向老师和同学请教,结合网络资源,最终找出比较完善的方案,在理论上能够实现功能要求。经过几个月的前期学习,我积累了很多的关于液晶显示方面和C语言设计方面的资料,并对电路的整合有了一个基本的概念,最后设计出总的电路图,经过不断的测试与修改,最终完善了硬件电路的设计。
对于软件设计,因为以前的编程经验不够,再加上对AT89S52这一芯片的了解不是很彻底,因此,在这方面花费了很多的精力和时间。当然这个过程不乏有同学的帮助,我要非常感谢实验室同学的帮助在我的软件调试过程中给了我至关重要的帮助,并给了我很多非常好的建议。
当然由于我在理论和实践方面存在一定的不足,所以在设计思路和实现功能上难免有不足和没有想到的地方,还请各位老师给予指正。

附录1:C语言程序


天津职业技术师范大学2010届本科生设计

附录2:电路原理图

概述
8051系列微控制器是基于高度完善的嵌入式控制系统的体系结构。从军事设备到汽车,再到PC机的键盘,它都有很广泛的应用。另外,对于摩托罗拉公司生产的M68HC11(8位处理器)可以应用于不同厂商生产的8051系列微控制器,如:Intel 、Philips 及Siemens等。这些厂商都对8051增加了许多功能部件和外围设备,如:12C总线接口、模/数转换器、监视跟踪定时器和脉冲宽度调制输出。8051的允许范围:时钟频率上至40MHz,电压下至1.5V都是有效的 。一个公司的生产线要完成许多功能,开发人员就不得不学习这个平台,为此以8051系列作为基本体系结构是最好的选择,以它为核心得到了广泛的应用。 
基本体系结构由下列功能部件组成:
1.8位ALU;
2.32个I/O引脚(4组,每组8个),可分别存取;
3.2个16位定时/计数器;
4.全双工通用异步收发器;
5.6个中断源,2个中断优先级;
6.128字节随机存储器;
7.64字节地址空间,存放数据和代码。
一个8051的处理器周期是由12个振荡周期组成。12个振荡周期中每一个都能完成一种特殊功能,8051的核心如:操作码的取出、典型的菊花链待定中断。任何8051指令所需的定时都是由时钟脉冲频率除以12,再将所得结果乘以处理机所需的循环数计算得到。因此,如果你有一个系统时钟11.059MHz,你可以用这个值除以12计算出每秒所需指令数。这里我们给出一个指令频率921583/秒。将它转化成实际时间,每个指令周期(1.085微妙)。
存储器组织
8051体系结构为用户提供了3个物理直接存储空间。每个存储空间占用连续地址空间,按字节从0到最大尺寸。地址重叠是通过利用引用特定地址空间指令来解决的。这三个存储空间功能如下所述:
代码空间
第一个存储空间是代码段,其中用来存放可执行程序。这个段最大可达64K(因为它有16根地址线)。处理机将它视为只读,能产生相应的信号对一存储器件进行存取,如可擦可编程只读存储器 EPROM。然而,这不意味着代码段必须作为EPROM的工具。目前,许多嵌入式系统都利用EPROM,通过8051或一个外部设备允许对它存储或改写。这可能轻而易举的提高产品,因为新的软件可以下载到EPROM,而不必将它分解后再安装成一个新的 EPROM。
另外,电池后面的静态存储器SRAM也可用来代替EPROM。这种方法和加载软件到电可擦可编程只读存储器EEPROM是一样的,但是EEPROM没有任何读/写周期限制。然而,当电池电源RAM没电了,也可如此将软件加载到里面。在开发系统中若用SRAM代替EPROM,则允许在目标系统中快速下载新代码。如果可以那样做,它将帮助我们避免对EPROM的循环执行/测试/擦写,同时也能帮助我们避免对通常很少使用的线路仿真器产生争论。
除可执行程序代码之外,8051通常在代码段存放安装查找表。为了简化,8051提供了允许快速存取查找表指令的途径——数据指针(DPTR)或带偏移量的程序计数器通过累加器随意的指向查找表。通常这意味着,一个查找表的基地址能用DPTR来定位,而表中的元素可以通过累加器存储。用 8051 执行加法,在指令执行期间可以根据情况存放许多循环数。
数据空间
8051辅助存储空间是128字节的内部RAM,而8052的高128字节是辅助存储空间。这个段被认为是典型的数据段。RAM定位在这个段,依靠指令循环存取一次或二次。这样存取时间比存取在XDATA段要快很多,因为存储器直接给出地址,胜于由存储指针如DPTR必须先初始化。因此,通常将已用变量和临时定义变量都放在数据段。然而,这样的分配会占用段中少量的存储单元。数据段中的可变存储器还可以由R0或R1间接存储。使用寄存器作存储指针就必须包含已检索或已改变字节的地址。这些指令可以依靠源/目的数据字节使一个或二个处理机循环。数据段又包含两个重要的小段。第一个子段由四个寄存器组组成,它占用了RAM的低32字节。8051用这四组(每组8字节)作为缺省寄存器组。寄存器组选定区域在任何时候都通过处理机状态字(PSW)中的RS1和RS0这两位来改变。这两位组合表示数0~3(RS1作最高有效位),用来指明哪个寄存器组在被使用。在8051中,寄存器组开关不但允许快速参数传递,而且能打开单任务开关。在数据空间的第二个子段是一个可寻址位段,每一位都能单独存取。这个段称为BDATA段。可寻址的位段由内存中四个寄存器组16字节(128位)组成。8051包含许多位指令,它通常用于控制某一位的应用及在8051中用软件替换外部组合逻辑给予帮助,这样在目标系统中以减少部分依赖。人们注意到这个16字节还可以按“一位”宽在数据空间像其他字节一样进行存取。
特殊功能寄存器
8051内部RAM的80H以上的单元为控制寄存器,包含中断系统和外部设备。这些寄存器称为特殊功能寄存器(简称SFR)。它们大部分是可按位寻址的。在可按位寻址的SFR中的位可以是被访问的名称、索引或者是位地址。因此,你可以参看中断允许SFR中的EA(EA、IE.7或0AFH)位。SFR可控制的东西有:定时/计数器和UART的功能。中断源以及它们的优先级。这些被访问的寄存器在数据段中的字节和位是同一张指令表。表A所示SFR的存储图中指明了可寻址的位寄存器。
IDATA空间
某些8051家族成员,如8052在内部RAM中包含一个辅助128字节,存放在80H以上的单元。这个典型的RAM段被称为IDATA段。因为IDATA地址和SFR地址重叠,IDATA  RAM和SFR之间的地址冲突是通过分解被存取存储器的类型来解决,因为IDATA段只能通过间接寻址方式存取。
XDATA空间
8051存储空间为64K,代码段可用16根地址线寻址。这个典型空间被称为外部数据存储空间(简称XDATA段)。这个段通常由各种RAM(通常为SRAM)、I/O设备或外围设备组成,8051必须通过总线连接。这个段的读或写操作至少需两次循环处理,并且它的执行既要用到DPTR又要用到R0和R1。就DPTR来说,它通常要在执行读或写操作所要求的两个循环外再附加加载两个或更多循环处理地址。同样,在一个周期内除了利用存储器自身存取之外,至少要加载R0或R1。显而易见,XDATA段的典型操作很简单,通常最少需三个循环处理。因此,数据段常用来存储常用变量。
如果8051不需要用总线执行任何I/O设备或者设计者希望当I/O设备通过总线存取时让RAM循环开、关,那么它可使这个段全部占满64KRAM。
微机接口
微机接口实现两种信息形式的交换。在计算机之外,由电子系统所处理以一种物理形式存在,但在程序中,它是用数字表示的。任一接口的功能都可分为以某种形式进行数据变换的一些操作,所以外部和内部形式的转换由许多步骤完成的。
所示的情况为例加以说明,图中展示了微计算机和产生的信号和形式被系统的其他部分处理之前需要再次转换.举例来说,许多传感器具有电阻变化,这必须由一专门电路转换成电压。这种将传感器输出转换成电压信号,并与系统的其他电路相连接的过程,称为信号调理。信号调理部分将源自传感器的电压或电流信号范围转换用模拟-数字转换器变成数字形式的信号范围。
一个模拟-数字转换器(ADC)用来将连续变化信号变成相应的数字量,这数字量可是可能的二进制数值中的一个固定值。如果传感器输出不是连续变化的,就不需要模拟-数字转换。这种情况下,信号调理单元必须将输入信号变换成为另一信号,也可直接与接口的下一部分,即微计算机本身的输入输出相连接。
输入/输出单元将数字"开/关"电压信号转换成能通过系统总线传送到系统总线传送到计算机的信号。这里每一根线的状态,无论是"开"或是"关",用相应的"1"或"0"表示。对于已经转换成数字形式的模拟输入量,内部表示中用1和0组成的排列形式形成与补转换量相对应的二进制数。
从接口得到的原数值会受到接口电路设计的限制,而且常需要线性化和量程调整才能形成适合于在主程序中使用的数值。举例来说,接口可用于转换范围为-20oC至50oC的温度,而8 位转换器所产生的数值会在范围0至255之间。显然,从程序员的观点,对温度进行直接的处理要比使用由ADC所产生的与一个给定温度相一致的值要容易。接口操作需要将控制信号在微机和接口之间进行传送。根据这些理由,通常使用子程序来监督接口的具体操作,并完成任何所需的量程调整和/或线性化。
输出接口采用相似的形式,明显的差别在于信息流的方向相反;是从程序到外部世界。这种情况下,程序可称为输出程序,它监督接口的操作并完成数字-模拟转换器(DAC)所需数字的标定。该子程序依次送出信息给输出器件,产生相应的电信号,由DAC转换成模拟形式。最后,信号经调理(通常是放大)以形成适应于执行器操作的形式。
数字接口电路
在微机电路中使用的信号几乎总是太小而不能被直接地连到“外部世界”,因而必须用某种形式将其转换成更适宜的形式。接口电路部分的设计是使用微机的工程师所面临最重要的任务之一。我们已经了解到微机中,信息以离或散的位形式表示。当微机要与只有打开或关闭操作的设备相连时,这种数字形式是最有用的,这里每一位都可表示一个开关或执行器的状态。
连接逻辑电路时,必须小心翼翼,以保证它们的逻辑电平和电流额定值是兼容的。由逻辑电路产生的输出电压通以拉出或灌入最大额定电流时,按最弱情况下数值所定义。这样VOH是当拉出最大额定“高”输出电流IOH时的允许最小“高”电压,而VOL,则是当灌入最大额定“低”输出电流IOL时允许最“低”电压。对逻辑输入也有相应的参数,规定最小输入电压为逻辑“高”状态VIH,以及最大输入电压为逻辑“低”状态VIL。
对于输入接口,也许设计所面临的主要问题是电噪声,小噪声信号会引起系统工作不良,而大量的噪声会造成永久性损坏。设计者必须从一开始就清楚这些危险。有许多方法保护接口电路和微机不受各种各样噪声影响,下面是一些例子:
1.使用光电隔离或变压器实现微机系统和外部器件之间的输入输出电信号隔离。
2.用一低通滤器和施密特触发器排除高频噪声脉冲。
3.用一对二极管以反向偏置于正常方向的形式连接至电源端,来保护过高的输入电压。
对于输出接口,一个逻辑器件的参数VOH,VOL,IOH,和IOL往往太小而不能直接与负载相连,实践中必须在一个外部将电流和电压进行放大以驱动一个负载。现在尽管有一些类型的半导体器件可用于DC和AC的功率控制至若干千瓦,有两种基本方式将连至负载,并对其进行控制:串联连接和并联连接。
对于串联连接,开关闭合时使电流渡过负载,而当并联连接时合上开关将使电流绕过负载。两种方式都可用于低功率电路中,但只有串联连接才能用于高功率电路,这是因为串联电阻R上要消耗功率。
AT89C52的使用简介
AT89C52带8K字节闪速存储器的8位单片机特性
于80C51和80C52产品兼容
8K字节编程闪速存储器寿命:1000次写/擦循环 ,数据保留时间:10年
全静态工作:0H——24MHZ
三级程序存储器锁定
256×8位内部RAM
三个16位定时器/计数器
8个中断源
可编程串行通道
低功耗的闲置和掉电模式
说明:
AT89C52是一种带8K字节闪速可编程可擦除只读存储器(PEROM)的低电压、高性能CMOS 8位为控制器。该器件采用ATMEL 非易失存储器制造技术制造,与工业标准的80C51和 80C52指令集和输出管脚相兼容。由于将多功能8位CPU和闪速存储器组合在单个芯片中,ATMEL的AT89C52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C52具有以下一些标准特性:8K字节的闪速存储器,256字节RAM,32个I/O线,3个16位定时器/计数器,8个两级中断源结构,一个全双工串行口,片内振荡器和时钟电路。此外,AT89C52设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的省电模式。在闲置模式下,CPU停止工作,但RAM、定时器/计数器、串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为管脚说明:
V :供电电压
GND:接地
P0口:P0口为一个8位漏极开路双向I/O口,作为输出口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。P0口当用于外部程序数据寄存器,它可以被定义为数据/地址的低八位。在FLASH编程时,P0口作为原码输入口。当FLASH进行校验时,P0输出原码,此时P0口外部必须被拉高。
P1口:P1口是一个内部提供上拉8位双向I/O口。P1口缓冲器能接受输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。P1.0和P1.1颗作为定时器2外部计数器和定时器2外部控制端,如下表所示:
表  接口功能
口引脚
交替功能
P1.0
T (定时器2/计数器2外部计数输入)时钟输入
P1.1
T(定时器/计数器2捕捉/再装配控制)

在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:P2口为带内部上拉的8位双向I/O口,P2口缓冲器可接受,输出4个TTL门电流。当P2口被写“1”时,其管脚被内部上拉电路拉高,且作为输入。并因此用作输入时,P2口的管脚被外部拉低,降输出电流(I )这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取(MOVX@DPTR)时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上优势,当对外部八位地址数据存储器进行读写时(MOVX@RI)P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和其他控制信号。
P3口:P3口管脚时8个带内部上拉的双向I/O口管脚。可接受输出4个TTL门电流P3口可写入“1”后,他们被内部上拉为高电平,并用作输入。作为输入,由于外部P3口也可用作AT89C52的一些特殊功能口。

完整文档下载(word格式 可编辑):
基于单片机的俄罗斯方块毕业论文.doc (1.24 MB, 下载次数: 46)

评分

参与人数 1黑币 +8 收起 理由
红尘过客 + 8 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:340904 发表于 2018-5-29 20:50 | 只看该作者
666666666666666666666
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表