跑馬燈是一種電腦編程工具,利用涂鴉等效果顯示文字。電腦中的跑馬燈,跑馬燈在編程中,通常指有時(shí)需要用一矩形條顯示少量用戶特別關(guān)心的信息,這條信息串首尾相連,向一個(gè)方向循環(huán)滾動(dòng)。證券業(yè)中常用“跑馬燈”來顯示不斷變化的股票行情;實(shí)際應(yīng)用中也常通過“跑馬燈”來監(jiān)視是否死機(jī)。一般是指各種發(fā)光二極管,如主板和主機(jī)箱上的指示燈。開機(jī)后用來指示各種工作狀態(tài)。
這個(gè)例子主要還是熟悉有關(guān)定時(shí)器A的寄存器配置以及IAR的配置方式。
[cpp] view plain copy/***********************************************
程序功能:實(shí)現(xiàn)流水燈以三種流動(dòng)方式和四種流動(dòng)速度
的不同組合而進(jìn)行點(diǎn)亮“流動(dòng)”
------------------------------------------------
撥碼開關(guān)設(shè)置:將LED位撥至ON,其余撥至OFF
測(cè)試說明:觀察流水燈流動(dòng)順序和速度的變化
************************************************/
#include 《msp430x14x.h》
typedef unsigned int uint;
uint i = 0,j = 0,dir = 0;
uint flag = 0,speed = 0; //flag--燈光流動(dòng)方式,speed--燈光流動(dòng)速度
/****************主函數(shù)****************/
void main(void)
{
/*下面六行程序關(guān)閉所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
WDTCTL = WDTPW + WDTHOLD; //關(guān)閉看門狗
P6DIR |= BIT2;P6OUT |= BIT2; //關(guān)閉電平轉(zhuǎn)換
P5OUT &= ~BIT7;
CCTL0 = CCIE; //使能CCR0中斷
CCR0 = 50000;
TACTL = TASSEL_2 + ID_3 + MC_1; //定時(shí)器A的時(shí)鐘源選擇SMCLK,8分頻增計(jì)數(shù)模式
P2DIR = 0xff; //設(shè)置P2口方向?yàn)檩敵?/p>
P2OUT = 0xff;
_EINT(); //使能全局中斷
LPM0; //CPU進(jìn)入LPM0模式各時(shí)鐘全部工作
}
/*******************************************
函數(shù)名稱:Timer_A
功 能:定時(shí)器A的中斷服務(wù)函數(shù),在這里通過標(biāo)志
控制流水燈的流動(dòng)方向和流動(dòng)速度
參 數(shù):無
返回值 :無
********************************************/
#pragma vector = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
if(flag == 0)
{
P2OUT = ~(0x80》》(i++)); //燈的點(diǎn)亮順序D8 -》 D1
}
else if(flag == 1)
{
P2OUT = ~(0x01《《(i++)); //燈的點(diǎn)亮順序D1 -》 D8
}
else
{
if(dir) //燈的點(diǎn)亮順序 D8 -》 D1,D1 -》 D8,循環(huán)繞圈
{
P2OUT = ~(0x80》》(i++));
}
else
{
P2OUT = ~(0x01《《(i++));
}
}
if(i == 8)
{
i = 0;
dir = ~dir;
}
j++;
if(j == 10)
{
i = 0;
j = 0;
flag++;
if(flag == 4) flag = 0;
switch(speed)//根據(jù)speed的值來選擇相應(yīng)的速度,速度的選擇主要通過改變分頻來實(shí)現(xiàn)
{
case 0:
TACTL &=~ (ID0 + ID1);//這個(gè)地方其實(shí)沒必要,意思是清零TACTL的78兩位
//ID1的值是0x0080 ID2的值是0x0040通過計(jì)算就可以得出
TACTL |= ID_3;//改為八分頻
break;
case 1:
TACTL &=~ (ID0 + ID1);
TACTL |= ID_2;
break;
case 2:
TACTL &=~ (ID0 + ID1);
TACTL |= ID_1;
break;
case 3:
TACTL &=~ (ID0 + ID1);
TACTL |= ID_0;
break;
default:
break;
}
if(flag != 3) speed++;
if(speed == 4) speed = 0;
}
}
-
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3246瀏覽量
114715 -
跑馬燈
+關(guān)注
關(guān)注
5文章
117瀏覽量
34773
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論