msp430f55299中的TA2CCR0对应f149中的多少

&&&&&&&&这次聊聊定时器A,Timer_A。
&&&&&&& F5529的定时器和F149刚能上几乎没有区别,会用F149的定时器就会用F5529的定时器了。可是呢~F55系列定时器的数量不一样了,而且寄存器的名字也有所改变了。
&&&&&&&&·F5529一共有3个定时器A,3个!TimerA!这3个分别是Timer0_A5,Timer1_A3,Timer2_A3,前面的数字就是定时器的序数,后面的数字是这个定时所拥有的捕获比较单元数量。
&&&&&&&&这些我都不是从datasheet或者user&guide上查到的,而是最直接地翻CCS里的&msp430f5529.h&知道的。datasheet和user&guide&都是讲一个系列的,各种芯片之间可能有点差异,所以还是进这个专门的头文件里找比较精确。因为数目多了,所以在使用时很容易会产生混乱。大家刚开始学着写程序时一定要经常翻翻user&guide和头文件,避免写错。
&&&&&&&&x代表定时器,n代表捕获比较单元,Timer_A的寄存器也就这么6种,需要我们注意的也就2种。都是TAx开头,如果是涉及捕获比较单元的会在后面再有个n。
TAxCTL——定时器Ax的控制寄存器。
TAxCCTLn——定时器Ax里的捕获比较单元n的控制寄存器,多了个C是Capture/Compare。
TAxR——定时器Ax的计数器,这个不归我们管。
TAxCCRn——定时器Ax里的捕获比较寄存器,用到这个捕获比较的时候直接写就行了,或者是写CCR0。
TAxIV——定时器Ax的中断向量寄存器。进这个中断时查看就行了,switch。
TAxEX0——定时器A扩增的寄存器,里面只有一个TAIDEX对时钟再分频,可以忽略。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
&&&&&&&&待我们用到定时器时,对着user&guide,
&&&&&&& 先把TAxCTL设置好——TASSEL时钟源,ID分频不分频,MC工作模式,TAIE打开不打开定时器溢出中断。
&&&&&&& 再把要用到的捕获比较单元的TAxCCTLn设置好——CAP捕获还是比较,捕获的话CM怎么捕,SCS同步,CCIS信号从哪进;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&无论捕获还是比较,CCIE中断总得打开吧;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&如果输出PWM波,设置OUTMOD就够了(一般用模式7)。
&&&&&&&&最后写TAxCCRn(比较或者是输出PWM波)。
----------------------------------------------------------------------------------------------------------------------------------------------------------
&&&&&&&&有些疑问。
&&&&&&&&对于TAxCCTLn里的CCIS和SCCI我搞不太懂。
&&&&&&& CCIS默认的是CCIxA,这个就是该捕获比较单元所对应的引脚,但CCIxB对应的是哪个呢?我找不出来。我也试过,不是对应的TBxCCTLn的引脚。另外VCC和GND是怎么捕获的,也不太好懂。还好这问题无伤大雅,就那默认地CCIxA用就行了。
&&&&&&&&另外,SCCI的值说是信号发生跳变时,也就是捕获瞬间的值,但这瞬间的值是什么?捕获前还是捕获后的电平,我无从而知,也没有人告诉我。
&&&&&&&&曾看了这一段程序,说是可以测PWM波持续高电平的时间,用的是上升下降沿捕获。
#pragma vector = TIMERA1_VECTOR
__interrupt void TIMERA1(void)
switch(TAIV)
case TAIV_TACCR1: if((TACCTL1 & SCCI)== SCCI)
pulse = CCR1-oldCCR1;
oldCCR1=CCR1;
case TAIV_TACCR2:
case TAIV_TAIFG:
&&&&&&&&可我试了貌似不行,而且在我写的程序里面,单步单步的运行,一直看SCCI都是0,没有变过。
&&&&&&&&如果有哪位懂得这两个问题而又刚好看见这篇文章的,请不要吝啬地留言。谢谢!
----------------------------------------------------------------------------------------------------------------------------------------------------------
&&&&&&&&那么对于如何测PWM波持续高电平的时间,我想到这样的办法,大家应该都能想出来。
#pragma vector = TIMER0_A1_VECTOR
__interrupt void timer0A1( void )
switch( __even_in_range( TA0IV,14) )
case TA0IV_TA0CCR1 :
period = TA0CCR1 - oldccr1;
oldccr1 = TA0CCR1;
case TA0IV_TA0CCR2 :
if( TA0CCTL2 & CM_1 )
TA0CCTL2 &= ~CM_1;
//取消上升沿捕获
TA0CCTL2 |= CM_2;
//改为下降沿捕获
oldccr2 = TA0CCR2;
TA0CCTL2 &= ~CM_2;
//趋向下降沿捕获
TA0CCTL2 |= CM_1;
//改为下降沿捕获
pulse = TA0CCR2 - oldccr2;
case TA0IV_TA0CCR3 :
case TA0IV_TA0CCR4 :
case TA0IV_TA0IFG :
}&&&&&&&&无非就是进上升沿中断后改下降沿。比较笨的方法,但能用。
----------------------------------------------------------------------------------------------------------------------------------------------------------
&&&&&&&&关于每一种工作模式如何如何地我就不啰嗦了,和149一样,如果有F149底子应该都懂的。学到5529,我觉得要注意的就是寄存器和有一些位的命名。多了真的很容易混乱,不过多练几次很快就能掌握记忆的技巧了。
&&&&&&&&祝大家学习愉快!

本文已收录于以下专栏:
相关文章推荐
stm8 硬件spi 驱动 si4432 如果想看模拟的 我有另外一篇博文写有代码。
这个硬件驱动 si4432 我弄了几乎一天时间,我一边看波形一边分析数据,可是spi驱动一直没有成功。
第二天发现...
在调试STM8S的SPI时候,由于在学习板上
介绍在stm8的硬件SPI和SPI怎么驱动DAC8830。
STM8的SPI还是挺好用的,也挺简单,起码相比于I2C来说是的。近期因为要调试NRF905,所以就用到了STM8的SPI。因为调试过程中没有遇到什么大的问题,所以在此只对STM8的SPI作简单的点拨...
浅谈关于STM8S的硬件I2C初始化配置,主要寄存器的配置。附有I2C的初始化函数。
MSP430(F5529)相比MSP430(F149)来讲,功能更加强大。
MSP430F5XX/MSP430F6XX系列器件的UCS包含有五种时钟源,依次是:XT1CLK、VLOCLK、...
        刚开始摸索430F55系列,我也是菜鸟一名,折腾了两天它的时钟系统,总算自认为有点眉目。想到入门不易,趁热把我的一些体会分享一下。菜鸟才疏学浅,如有不妥之处,请务必指出。
前天写了关于DCO,FLL
他的最新文章
讲师:姜飞俊
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)君,已阅读到文档的结尾了呢~~
MSP430F5529微控制器专题培训,微控制器,微电脑温度控制器,微电脑控制器,微程序控制器,微电脑时间控制器,嵌入式微控制器,8051微控制器,杭州普微控制器厂,微控制器原理及应用
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
MSP430F5529微控制器专题培训
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口/*基于MSP430F5529俄罗斯方块游戏程序*/
<em style="color:#999;font-size:12 margin-left:10" id="authorposton12-11-19 08:35:16&nbsp
/*基于MSP430F5529俄罗斯方块游戏程序*/
//作者:& & & & 詹磊
//功能:& & & & 基于MSP430F5529俄罗斯方块游戏程序
//说明:& & & & 运行环境:TI官方MSP-EXP5529开发板(外接4个带上拉电阻独立按键)
//& & & & & & & & 非原创,思路是从51单片机上移植过来的
//& & & & & & & & 底层液晶驱动是TI官方提供的LCD API
//& & & & & & & & 游戏算法部分的底层程序多处已经修改,与原版会有较大的差别
//版本:& & & & 测试版 V1.0(基本能流畅运行,但需要进一步的美化和优化)
#include &MSP430F5529.h&
#include &LCD_102x64.h&
#include &main.h&
#include &Key.h&
#define MAXHANG 20& & & & & & & & & & & & & & & & & & & & & & & & //游戏显示行数
#define MAXLIE&&16& & & & & & & & & & & & & & & & & & & & & & & & //游戏显示列数
#define MapWide& & & & 48& & & & & & & & & & & & & & & & & & & & & & & & //地图宽
#define MapHigh& & & & 60& & & & & & & & & & & & & & & & & & & & & & & & //地图高
#define ON& & & & & & & & 0
#define OFF& & & & & & & & 1
#define BIT(n)& & & & & & & & (1&&(n))
volatile uint cubeMap[MAXHANG];& & & && & & & & & & & & & //地图显示存存
typedef struct{
& && && && && &uchar const *& & & && & & & & & //方块图形字模数据指针
& & & & & & & & & & & && & uchar cube : 4;& & & & & & & && & & & & & //方块形态(占用4个位域)
& & & & & & & & & & & && & uchar state : 4;& & & & & & & && & & & & & //方块状态(占用4个位域)
& & & & & & & & & & & && && & & & & & & & & & & && & & & & & //方块所在行
& & & & & & & & & & & && && & & & & & & & & & & && & & & & & //方块所在列
& & & & & & & & & & & && & }
uchar liang=11;
uchar Speed=1,Score=0;
uint timeA=0;
uchar downflag=0;
uchar randomNumber=0;
const uchar cube[]=
0,4,0xe,0,&&0,2,6,2,& &&&0,7,2,0,& &&&4,6,4,0,
0,8,0xe,0,&&0,4,4,0xc,& &0,0,0xe,2,& &0,6,4,4,
0,0xe,8,0,&&0,4,4,6,& &&&0,1,7,0,& &&&6,2,2,0,
0,0xc,6,0,&&0,2,6,4,& &&&0,6,3,0,& &&&2,6,4,0,
0,6,0xc,0,&&0,4,6,2,& &&&0,3,6,0,& &&&4,6,2,0,
/*■■■■
0,0xf,0,0,&&4,4,4,4,& &&&0,0,0xf,0,& &2,2,2,2,
0,6,6,0,& & 0,6,6,0,& &&&0,6,6,0,& &&&0,6,6,0
void delay_ms(uint z)//毫秒级延时函数
& & & & uint i,m;
& & & & for(i=z;i&0;i--)
& & & & & & & & for(m=4500;m&0;m--)
& & & & & & & & {
& & & & & & & & & & & & _NOP();
& & & & & & & & }
//-------------------------------------------//
//函数名:八位LED灯控制函数
//入口:Number:Number哪位为一则哪位LED点亮
//出口:Void
//-------------------------------------------//
void DigitalLedControl(uchar Number)
& & & & if(Number&BIT7)
& & & & & & & & P1OUT|=BIT0;
& & & & else
& & & & & & & & P1OUT&=~BIT0;
& & & & if(Number&BIT6)
& & & & & & & & P8OUT|=BIT1;
& & & & else
& & & & & & & & P8OUT&=~BIT1;
& & & & if(Number&BIT5)
& & & & & & & & P8OUT|=BIT2;
& & & & else
& & & & & & & & P8OUT&=~BIT2;
& & & & if(Number&BIT4)
& & & & & & & & P1OUT|=BIT1;
& & & & else
& & & & & & & & P1OUT&=~BIT1;
& & & & if(Number&BIT3)
& & & & & & & & P1OUT|=BIT2;
& & & & else
& & & & & & & & P1OUT&=~BIT2;
& & & & if(Number&BIT2)
& & & & & & & & P1OUT|=BIT3;
& & & & else
& & & & & & & & P1OUT&=~BIT3;
& & & & if(Number&BIT1)
& & & & & & & & P1OUT|=BIT4;
& & & & else
& & & & & & & & P1OUT&=~BIT4;
& & & & if(Number&BIT0)
& & & & & & & & P1OUT|=BIT5;
& & & & else
& & & & & & & & P1OUT&=~BIT5;
//-------------------------------------------//
//函数名:显存清空函数
//入口:Void
//出口:Void
//功能:清空显存
//-------------------------------------------//
void DisplayRamClear()
& & & & for(i=0;i&20;i++)
& & & & & & & & cubeMap[i]=0x0;
//-------------------------------------------//
//函数名:两位十进制数字显示函数
//入口:& & & & Row:显示的行数
//& & & & & & & & Column:显示的列数
//& & & & & & & & Number:需要显示的数字&100 && &=0
//出口:Void
//-------------------------------------------//
void Number2BitDisplay(uchar Row,uchar Column,uchar Number)
& & & & uchar tempShi,tempGe;
& & & & tempShi=Number/10;
& & & & tempGe=Number%10;
& & & & Dogs102x6_charDraw(Row, Column,tempShi+'0',ON);
& & & & Dogs102x6_charDraw(Row, Column+6,tempGe+'0',ON);
//-------------------------------------------//
//函数名:游戏背景函数
//入口:Void
//出口:Void
//功能:绘制游戏背景地图
//-------------------------------------------//
void GameBackground()
& & & & for(i=0;i&MapHigh+1;i++)
& & & & & & & & Dogs102x6_pixelDraw(0, i, ON);
& & & & & & & & Dogs102x6_pixelDraw(MapWide+1, i, ON);
& & & & for(i=0;i&MapWide+2;i++)
& & & & & & & & Dogs102x6_pixelDraw(i, 0, ON);
& & & & & & & & Dogs102x6_pixelDraw(i, MapHigh+1, ON);
& & & & DisplayRamClear();
& & & & Dogs102x6_stringDraw(3, 10, &START&,ON);
& & & & Dogs102x6_stringDraw(1, 51, &NEXT:&,ON);
& & & & Dogs102x6_stringDraw(3, 51, &SPEED:--&,ON);
& & & & Dogs102x6_stringDraw(5, 51, &SCORE:--&,ON);
& & & & Number2BitDisplay(3,87,Speed);
& & & & Number2BitDisplay(5,87,Score);
//-------------------------------------------//
//函数名:游戏Map清空
//入口:Void
//出口:Void
//功能:清空游戏背景地图(不清空显存)
//-------------------------------------------//
void GameMapClear()
& & & & uchar i,j;
& & & & for(i=0;i&MapHi++)
& & & & & & & & for(j=0;j&MapWj++)
& & & & & & & & {
& & & & & & & & & & & & Dogs102x6_pixelDraw(j+1, i+1, OFF);
& & & & & & & & }
//-------------------------------------------//
//函数名:系统初始化
//入口:Void
//出口:Void
//-------------------------------------------//
void SystemInit()
& & & & WDTCTL = WDTPW + WDTHOLD;
& & & & P8DIR|=BIT1+BIT2;
& & & & P8OUT|=BIT1+BIT2;
& & & & P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;
& & & & P1OUT|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;
& & & & InitKey();
& & & & UCSCTL3 = SELREF_2;& && && && && && && &&&// Set DCO FLL reference = REFO
& & & & UCSCTL4 |= SELA_2;& && && && && && && && &// Set ACLK = REFO
& & & & __bis_SR_register(SCG0);& && && && && && &// Disable the FLL control loop
& & & & UCSCTL0 = 0x0000;& && && && && && && && & // Set lowest possible DCOx, MODx
& & & & UCSCTL1 = DCORSEL_7;& && && && && && && & // Select DCO range 50MHz operation
& & & & UCSCTL2 = FLLD_1 + 609;& && && && && && & // Set DCO Multiplier for 25MHz(这里设置为20MHz适应液晶的SPI通信)
& & & && && && && && && && && && && && && && && & // (N + 1) * FLLRef = Fdco
& & & && && && && && && && && && && && && && && & // (762 + 1) * 32768 = 25MHz
& & & && && && && && && && && && && && && && && & // Set FLL Div = fDCOCLK/2
& & & & __bic_SR_register(SCG0);& && && && && && &// Enable the FLL control loop
& & & & TA1CCTL0 = CCIE;& && && && && && && && &&&// CCR0 interrupt enabled
& & & & TA1CCR0 = 328-1;
& & & & TA1CTL = TASSEL_1 + MC_1 + TACLR;& && && &// ACLK, upmode, clear TAR
& & & & _BIS_SR(GIE);
& & & & Dogs102x6_init();
& & & & Dogs102x6_clearScreen();
& & & & Dogs102x6_backlightInit();
& & & & Dogs102x6_setContrast(11);
& & & & Dogs102x6_setBacklight(liang);
//-------------------------------------------//
//函数名:3x3点显示函数
//入口:& & & & x:x轴坐标
//& & & & & & & & y:y轴坐标
//& & & & & & & & mode:ON 打点;OFF 消点
//出口:Void
//-------------------------------------------//
void Display3x3Pixels(uchar x,uchar y,uchar mode)
& & & & x=3*x+1;
& & & & y=3*y+1;
& & & & Dogs102x6_pixelDraw(x, y, mode);
& & & & Dogs102x6_pixelDraw(x+1, y, mode);
& & & & Dogs102x6_pixelDraw(x+2, y, mode);
& & & & Dogs102x6_pixelDraw(x, y+1, mode);
& & & & Dogs102x6_pixelDraw(x+1, y+1, mode);
& & & & Dogs102x6_pixelDraw(x+2, y+1, mode);
& & & & Dogs102x6_pixelDraw(x, y+2, mode);
& & & & Dogs102x6_pixelDraw(x+1, y+2, mode);
& & & & Dogs102x6_pixelDraw(x+2, y+2, mode);
//-------------------------------------------//
//函数名:显示像素点更改函数
//入口:& & & & Row:行数
//& & & & & & & & Column:列数
//& & & & & & & & mode:ON 打点;OFF 消点
//出口:Void
//-------------------------------------------//
void ChangeRamBit(uchar Row,uchar Column,uchar mode)
& & & & uint tempD
& & & & tempData=(0x8000&&(Column%16));
& & & & if(mode==ON)
& & & & & & & & cubeMap[Row]|=tempD
& & & & else
& & & & & & & & cubeMap[Row]&=~tempD
//-------------------------------------------//
//函数名:读取某个显示像素点位值函数
//入口:& & & & Row:行数
//& & & & & & & & Column:列数
//出口:uchar 1:所选点位1,0:所选的点位0
//-------------------------------------------//
uchar ReadDisplayRamBit(uchar Row,uchar Column)
& & & & uint tempD
& & & & tempData=(0x8000&&(Column%16));
& & & & if(cubeMap[Row]&tempData)
& & & & & & & & return 1;
& & & & else
& & & & & & & & return 0;
//-------------------------------------------//
//函数名:下一个方块显示函数
//入口:& & & & x:x轴坐标
//& & & & & & & & y:y轴坐标
//& & & & & & & & *p:图形字模数据指针
//出口:Void
//-------------------------------------------//
void showNextCube(uchar const * p,uchar x,uchar y)
#define NexPoinX& & & & 27& & & & & & & & & & & & & & & & & & & & & & & & & & & & //下一个图形显示的X坐标
#define NexPoinY& & & & 2& & & & & & & & & & & & & & & & & & & & & & & & & & & & //下一个图形显示的Y坐标
uchar i,j,
&&for(i=0;i&4;i++)
& && &temp=0x08;
& && &for(j=0;j&4;j++)
& && &&&if(p[i] & temp)
& && &&&& & & & Display3x3Pixels(x+j,y+i,ON);
& && &&&else
& && &&&& & & & Display3x3Pixels(x+j,y+i,OFF);
& && &&&temp&&=1;
//-------------------------------------------//
//函数名:显示函数
//入口:Void
//出口:Void
//功能:将显存的内容写入显示器显示
//-------------------------------------------//
void showCubeMap(void)
uchar hang,
for(hang=0;hang&MAXHANG;hang++)
& &if(cubeMap[hang]!=0)& & & & & & & & & & & & & & & & & & & & & & & & & & & & //跳过某行全为零的地方
& &for(lie=0;lie&MAXLIE;lie++)
& & & && & if(cubeMap[hang]&(0x8000&&(lie%16)))
& & & & & & & && & Display3x3Pixels(lie,hang,ON);
//-------------------------------------------//
//函数名:产生新方块函数
//入口:Void
//出口:Void
//-------------------------------------------//
void createCube(void)
&&static uchar next=0;
&&this.cube=
&&next=randomNumber%7;& & & & & & & && && & & & & & & & & & & & & & & & & & & & //产生随机数
&&this.row=0;& & & & & & & && && & & & & & & & & & & & & & & & & & & & & & & & & & & & //初始行为0
&&this.column=6;& & & && && & & & & & & & & & & & & & & & & & & & & & & & & & & & //初始列为6
&&this.state=0;& & & & & & & && && & & & & & & & & & & & & & & & & & & & & & & & & & & & //初始状态为0
&&this.box=cube+16*this.&&& & & & & & & & & & & & & & & & & & & & //设定方块指针起始地址
&&showNextCube(cube+16*next,NexPoinX,NexPoinY);& & & & //提示区显示下一个方块
&&timeA=0;
&&downflag=0;
//-------------------------------------------//
//函数名:写显存函数
//入口:mode:ON 打点;OFF 消点
//出口:Void
//功能:将数据写入显存,同时写入显示器显示
//-------------------------------------------//
void writeCubeToMap(uchar mode)
& & & & uchar tempData,tempRow,tempColumn,i,j,k=0;
& & & & for(i=0;i&4;i++)
& & & & & & & & tempData=this.box[i];
& & & & & & & & if(tempData==0)
& & & & & & & & & & & &
& & & & & & & & for(j=0;j&4;j++)
& & & & & & & & {
& & & & & & & & & & & & if(tempData&0x08)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & tempRow=this.row+k;
& & & & & & & & & & & & & & & & tempColumn=this.column+j;
& & & & & & & & & & & & & & & & ChangeRamBit(tempRow,tempColumn,mode);
& & & & & & & & & & & & & & & & Display3x3Pixels(tempColumn,tempRow,mode);
& & & & & & & & & & & & }
& & & & & & & & & & & & tempData&&=1;
& & & & & & & & }
& & & & & & & & k++;
//-------------------------------------------//
//函数名:方块边沿检测函数
//入口:Void
//出口:uchar 0:可以继续移动& & & & 1:到底,停止移动
//-------------------------------------------//
uchar checkClask(void)
& & & & uchar tempData,tempRow,tempColumn,i,j,k=0;
& & & & for(i=0;i&4;i++)
& & & & & & & & tempData=this.box[i];
& & & & & & & & if(tempData==0)& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //跳过全为零的行
& & & & & & & & & & & &
& & & & & & & & for(j=0;j&4;j++)
& & & & & & & & {
& & & & & & & & & & & & if(tempData&0x08)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & tempRow=this.row+k;
& & & & & & & & & & & & & & & & tempColumn=this.column+j;
& & & & & & & & & & & & & & & & if& & & & (
& & & & & & & & & & & & & & & & & & & & & & & & ReadDisplayRamBit(tempRow,tempColumn)& & & & //与边上的方块接触
& & & & & & & & & & & & & & & & & & & & & & & & ||(tempRow&=MAXHANG)& & & & & & & & & & & & & & & & & & & & //到了最底部
& & & & & & & & & & & & & & & & & & & & & & & & ||(tempColumn&=MAXLIE)& & & & & & & & & & & & & & & & & & & & //到了最右边
& & & & & & & & & & & & & & & & & & & & & & & & ||(tempColumn==255)& & & & & & & & & & & & & & & & & & & & & & & & //到了最左边
& & & & & & & & & & & & & & & & & & & & )
& & & & & & & & & & & & & & & & & & & & return 1;& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //返回1,停止移动
& & & & & & & & & & & & }
& & & & & & & & & & & & tempData&&=1;
& & & & & & & & }
& & & & & & & & k++;
& & & & return 0;& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & //返回0,可以继续移动
//-------------------------------------------//
//函数名:地图检测函数
//入口:Void
//出口:Void
//功能:检测地图中是否有满行,有的话就消行,加分,一定分后加速,同时刷一次屏
//-------------------------------------------//
void CheckMap()
& & & & uchar fullFlag=0;
& & & & static uchar tempScore=0,tempSpeed=0;
& & & & char i,j;
& & & & for(i=MAXHANG-1;i&0;i--)
& & & & & & & & if(cubeMap[i]==0xffff)
& & & & & & & & {
& & & & & & & & & & & & fullFlag++;
& & & & & & & & & & & & for(j=i;j&0;j--)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & if(j&0)
& & & & & & & & & & & & & & & & & & & & cubeMap[j]=cubeMap[j-1];
& & & & & & & & & & & & & & & & else
& & & & & & & & & & & & & & & & & & & & cubeMap[j]=0;
& & & & & & & & & & & & }
& & & & & & & & & & & & i++;
& & & & & & & & }
& & & & tempScore=S
& & & & tempSpeed=S
& & & & switch(fullFlag)
& & & & case 1:Score++;
& & & & case 2:Score+=2;
& & & & case 3:Score+=4;
& & & & case 4:Score+=6;
& & & & default:
& & & & if(Score&99)
& & & & & & & & Speed++;
& & & & & & & & if(Speed&9)
& & & & & & & & & & & & Speed=1;
& & & & & & & & Score=0;
& & & & if(tempScore!=Score)
& & & & & & & & Number2BitDisplay(5,87,Score);
& & & & if(tempSpeed!=Speed)
& & & & & & & & Number2BitDisplay(3,87,Speed);
& & & & if(fullFlag)
& & & & & & & & GameMapClear();
& & & & & & & & showCubeMap();
//-------------------------------------------//
//函数名:方块左移函数
//入口:Void
//出口:Void
//-------------------------------------------//
void moveLeft(void)
& & & & writeCubeToMap(OFF);
&&& & & & this.column--;
&&& & & & if(checkClask())
&&& & & & & & & & this.column++;
&&& & & & writeCubeToMap(ON);
//-------------------------------------------//
//函数名:方块右移函数
//入口:Void
//出口:Void
//-------------------------------------------//
void moveRigh(void)
& & & & writeCubeToMap(OFF);
& & & & this.column++;
& & & & if(checkClask())
& & & & & & & & this.column--;
& & & & writeCubeToMap(ON);
//-------------------------------------------//
//函数名:方块下移函数
//入口:Void
//出口:uchar 到底返回1,否则返回0;
//-------------------------------------------//
uchar moveDown(void)
& & & & writeCubeToMap(OFF);
& & & & this.row++;
& & & & if(checkClask())& & & & & & & & & & & & & & & & //到底
& & & & & & & & this.row--;
& & & & & & & & writeCubeToMap(ON);
& & & & & & & & CheckMap();& & & & & & & & & & & & & & & & & & & & //是否消行
& & & & & & & & return 1;
& & & & else
& & & & & & & & writeCubeToMap(ON);
& & & & & & & & return 0;
//-------------------------------------------//
//函数名:方块翻转函数
//入口:Void
//出口:Void
//-------------------------------------------//
void cubeRotation(void)
& & & & temp=this.
& & & & writeCubeToMap(OFF);
& & & & this.state=++this.state%4;
& & & & this.box=cube+16*this.cube+4*this.
& & & & if(checkClask())
& & & & & & & & this.state=
& & & & & & & & this.box=cube+16*this.cube+4*this.
& & & & writeCubeToMap(ON);
//-------------------------------------------//
//函数名:俄罗斯方块结束界面函数
//入口:Void
//出口:Void
//-------------------------------------------//
void TetrisGameOver()
& & & & DisplayRamClear();
& & & & GameMapClear();
& & & & Score=0;
& & & & Speed=1;
& & & & Number2BitDisplay(5,87,Score);
& & & & Number2BitDisplay(3,87,Speed);
& & & & Dogs102x6_stringDraw(3, 13, &GAME&,ON);
& & & & Dogs102x6_stringDraw(4, 13, &OVER&,ON);
//-------------------------------------------//
//函数名:俄罗斯方块游戏运行函数
//入口:Void
//出口:Void
//功能:不阻塞CPU
//-------------------------------------------//
void TetrisGame()
& & & & uchar temp=0;
& & & & static uchar Flag=0;
& & & & if(Flag==0)
& & & & & & & & createCube();
& & & & & & & & if(checkClask())
& & & & & & & & {
& & & & & & & & & & & & TetrisGameOver();
& & & & & & & & & & & & delay_ms(1000);
& & & & & & & & & & & & GameMapClear();
& & & & & & & & }
& & & & & & & & else
& & & & & & & & & & & & writeCubeToMap(ON);
& & & & & & & & Flag=1;
& & & & if(downflag&&Flag)
& & & & & & & & downflag=0;
& & & & & & & & if(moveDown())
& & & & & & & & {
& & & & & & & & & & & & Flag=0;
& & & & & & & & }
& & & & temp=GetKey();
& & & & switch(temp)
& & & & & & & & case KeyUP:cubeRotation();DigitalLedControl(0);
& & & & & & & & & & & &
& & & & & & & & case KeyDOWN:while(moveDown()==0);Flag=0;DigitalLedControl(1);
& & & & & & & & & & & &
& & & & & & & & case KeyLEFT:moveLeft();DigitalLedControl(2);
& & & & & & & & & & & &
& & & & & & & & case KeyRIGHT:moveRigh();DigitalLedControl(3);
& & & & & & & & & & & &
& & & & & & & & case KeyBACK:DigitalLedControl(4);liang=--liang%12;Dogs102x6_setBacklight(liang);
& & & & & & & & & & & &
& & & & & & & & case KeyMEU:DigitalLedControl(5);
& & & & & & & & & & & &
& & & & & & & & case 0:
& & & & & & & & & & & &
& & & & & & & & default:
& & & & & & & & & & & &
void main(void)
& & & & SystemInit();
& & & & GameBackground();
& & & & DisplayRamClear();
& & & & GameMapClear();
& & & & showCubeMap();
& & & & while(1)
& & & & & & & & TetrisGame();
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
& & & & randomNumber=++randomNumber%100;
& & & & if(downflag==0)
& & & & & & & & timeA++;
& & & & if(timeA==(10-Speed)*10)
& & & & & & & & timeA=0;
& & & & & & & & downflag=1;
(85.37 KB, 下载次数: 19)
08:33 上传
(234.78 KB, 下载次数: 13)
08:34 上传
没有原理图呀 楼主
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
yuhonglong 发表于
没有原理图呀 楼主
TI公司的官方开发板,原理图网上都有,TI官网也有下的
(514.47 KB, 下载次数: 58)
08:22 上传
MSP430F5529开发板
main.h和key.h文件木有啊,求把整个工程打包发给我写呗,谢啦!我邮箱:
楼主好人,把.h和.c文件也贴出来吧,谢谢!
求整个工程文件..好人一生平安...
驭风者杨 发表于
楼主好人,把.h和.c文件也贴出来吧,谢谢!
同求 。哥们有的话发给我一份
楼主能把 两个.H文件发给我吗& &
楼主,求.h文件啊···课程设计啊谢谢了,
楼主好人,求整个文件。邮箱
楼主怎么不发全
同求哇,楼主,来个全的,万分感激,邮箱
谢谢楼主分享学习资料。
亲爱的楼主,谢谢分享两个&&.h文件
求程序,谢谢楼主。
站长推荐 /9
Powered by

我要回帖

更多关于 msp430f5529ipnr 的文章

 

随机推荐