Commit 5d498236 authored by FineL's avatar FineL 😛

更新丑陋流水灯

parent 4ac17df0
#include <msp430.h>
#include <stdint.h>
/**
* main.c
*/
uint8_t total = 0;
uint8_t mode = 0;
uint8_t cnt = 0;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD | WDTNMI | WDTNMIES; // stop watchdog timer
IFG1 &= ~NMIIFG;
IE1=NMIIE;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ; //MCLK閸滃MCLK閸у洩顔曟稉锟�8MHz
BCSCTL3 |= LFXT1S1;
__bis_SR_register(GIE);
__delay_cycles(1000); //缁涘绶熺粙鍐茬暰
P1DIR |= BIT2 | BIT4 | BIT6 | BIT7;
P2DIR |= BIT1 | BIT2 | BIT4 | BIT5;
P1DIR |= BIT0;
P1OUT |= BIT0;
TA0CTL &= ~TAIFG;
TA0CTL |= TACLR|TASSEL_2|MC_1|TAIE;
TA0CCR0 = 5000;
while(1){
switch(mode){
case 0:
switch(total){
case 1:P1OUT = BIT2 | BIT7; P2OUT = 0;break;
case 2:P1OUT = BIT2 | BIT7; P2OUT = BIT1;break;
case 3:P1OUT = BIT2 | BIT7; P2OUT = BIT1 | BIT4;break;
case 4:P1OUT = BIT2 | BIT7; P2OUT = BIT1 | BIT4 | BIT5; break;
case 5:P1OUT = BIT2 | BIT7; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 6:P1OUT = BIT2 | BIT6 | BIT7; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 13:P1OUT = BIT6| BIT7; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 14:P1OUT = BIT6| BIT7; P2OUT = BIT2 | BIT4 | BIT5 ;break;
case 15:P1OUT = BIT6| BIT7; P2OUT = BIT2 |BIT5 ;break;
case 16:P1OUT = BIT6| BIT7; P2OUT = BIT2;break;
case 17:P1OUT = BIT6| BIT7; P2OUT = 0;break;
default:P1OUT = BIT7;P2OUT = 0;break;
}
if(total <13&&total >6){
P1OUT = BIT2 | BIT6 | BIT7;
P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;
}
break;
case 1:
switch(total){
case 7:P1OUT = BIT2 |BIT4; P2OUT = 0;break;
case 8:P1OUT = BIT2 |BIT4; P2OUT = BIT1;break;
case 9:P1OUT = BIT2 |BIT4; P2OUT = BIT1 | BIT4;break;
case 10:P1OUT = BIT2 |BIT4; P2OUT = BIT1 | BIT4 | BIT5; break;
case 11:P1OUT = BIT2 |BIT4; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 12:P1OUT = BIT2 | BIT6|BIT4; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 19:P1OUT = BIT6|BIT4; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 20:P1OUT = BIT6|BIT4; P2OUT = BIT2 | BIT4 | BIT5 ;break;
case 21:P1OUT = BIT6|BIT4; P2OUT = BIT2 |BIT5 ;break;
case 22:P1OUT = BIT6|BIT4; P2OUT = BIT2;break;
case 23:P1OUT = BIT6|BIT4; P2OUT = 0;break;
default:P1OUT = BIT4;P2OUT = 0;break;
}
if(total <19&&total >12){
P1OUT = BIT2 | BIT6 | BIT4; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
}
break;
}
}
return 0;
}
#pragma vector= TIMER0_A1_VECTOR
__interrupt void TimeA0_ISR(void)
{
if(TA0CTL&TAIFG){
TA0CTL &= ~TAIFG;
cnt ++;
if(cnt == 100){
cnt = 0;
total += 1;
P1OUT ^= BIT0;
if(total == 25)total = 0;
}
switch(mode){
case 0 : mode = 1; break;
case 1 : mode = 0; break;
default :mode = 0;break;
}
}
}
#include <msp430.h>
#include <stdint.h>
/**
* main.c
*/
uint8_t total = 0;
uint8_t mode = 1;
uint16_t cnt = 0;
uint8_t pwm1 = 0;//TA1.1
int main(void)
{
WDTCTL = WDTPW | WDTHOLD | WDTNMI | WDTNMIES; // stop watchdog timer
IFG1 &= ~NMIIFG;
IE1=NMIIE;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ; //MCLK闁告粌顒玀CLK闁秆冩穿椤旀洘绋夐敓锟�8MHz
BCSCTL3 |= LFXT1S1;
__bis_SR_register(GIE);
__delay_cycles(1000); //缂佹稑顦欢鐔虹矙閸愯尙鏆�
P1DIR |= BIT2 | BIT4 | BIT6 | BIT7 | BIT0;
P2DIR |= BIT1 | BIT2 | BIT4 | BIT5;
P1OUT =0;
TA1CCTL1 &= ~(CAP|CCIFG);
TA1CCTL1 |= CCIE;
TA1CCR1 = 99; //TA1.1
TA1CTL &= ~TAIFG;
TA1CTL |= TACLR|TASSEL_1|TAIE|MC_1;
TA1CCR0 = 100;
TA0CTL &= ~TAIFG;
TA0CTL |= TACLR|TASSEL_2|MC_1|TAIE;
TA0CCR0 = 800;
while(1){
switch(mode){
case 0:
switch(total){
case 0: P1OUT = (pwm1<<2)|BIT7;P2OUT = 0;break;
case 1: P1OUT = BIT2 |BIT7 ;P2OUT = (pwm1<<1);break;
case 2: P1OUT = BIT2 |BIT7 ;P2OUT = BIT1 | (pwm1<<4);break;
case 3: P1OUT = BIT2 |BIT7 ;P2OUT = BIT1 | BIT4 |(pwm1<<5);break;
case 4: P1OUT = BIT2 |BIT7; P2OUT = BIT1 | BIT4 | (pwm1<<2)|BIT5; break;
case 5: P1OUT = BIT2 |(pwm1<<6) |BIT7; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 12:P1OUT = BIT6 |(!pwm1<<2)|BIT7; P2OUT = BIT1 |BIT2 | BIT4 | BIT5 ;break;
case 13:P1OUT = BIT6 | BIT7; P2OUT = BIT2 |BIT5| BIT4 |(!pwm1<<1) ;break;
case 14:P1OUT = BIT6 | BIT7; P2OUT = BIT2 |(!pwm1<<4)| BIT5;break;
case 15:P1OUT = BIT6 | BIT7;P2OUT = BIT2 |(!pwm1<<5);break;
case 16:P1OUT = BIT6| BIT7; P2OUT = (!pwm1<<2);break;
case 17:P1OUT = (!pwm1 << 6)| BIT7; P2OUT = 0;break;
default:P1OUT = BIT7;P2OUT = 0;break;
}
if(total <12&&total >5){
P1OUT = BIT2 | BIT6 | BIT7;
P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;
}
break;
case 1:
switch(total){
case 6: P1OUT = (pwm1<<2)|BIT4;P2OUT = 0;break;
case 7: P1OUT = BIT2 |BIT4 ;P2OUT = (pwm1<<1);break;
case 8: P1OUT = BIT2 |BIT4 ;P2OUT = BIT1 | (pwm1<<4);break;
case 9: P1OUT = BIT2 |BIT4 ; P2OUT = BIT1 | BIT4 |(pwm1<<5);break;
case 10: P1OUT = BIT2 |BIT4; P2OUT = BIT1 | BIT4 | (pwm1<<2)|BIT5; break;
case 11: P1OUT = BIT2 |(pwm1<<6) |BIT4; P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;break;
case 18:P1OUT = BIT6 |(!pwm1<<2)|BIT4; P2OUT = BIT1 |BIT2 | BIT4 | BIT5 ;break;
case 19:P1OUT = BIT6 | BIT4; P2OUT = BIT2 |BIT5| BIT4 |(!pwm1<<1) ;break;
case 20:P1OUT = BIT6 | BIT4; P2OUT = BIT2 |(!pwm1<<4)| BIT5;break;
case 21:P1OUT = BIT6 | BIT4;P2OUT = BIT2 |(!pwm1<<5);break;
case 22:P1OUT = BIT6| BIT4; P2OUT = (!pwm1<<2);break;
case 23:P1OUT = (!pwm1 << 6)| BIT4; P2OUT = 0;break;
default:P1OUT = BIT4; P2OUT = 0;break;
}
if(total <18&&total >11){
P1OUT = BIT2 | BIT6 | BIT4;
P2OUT = BIT1 | BIT2 | BIT4 | BIT5 ;
}
break;
}
}
return 0;
}
#pragma vector= TIMER1_A1_VECTOR
__interrupt void TimeA1_ISR(void)
{
switch(TA1IV){
case 0x02:pwm1 = BIT0;break;
case 0x04:break;
case 0x0A:
pwm1 &= ~BIT0;
if(TA1CCR1 == 2){
TA1CCR1 = 99;
total++;
if(total == 24){
total =0;
}
}
TA1CCR1 -=1;
break;
default:break;
}
}
#pragma vector= TIMER0_A1_VECTOR
__interrupt void TimeA0_ISR(void)
{
if(TA0CTL &TAIFG){
TA0CTL &= ~TAIFG;
switch(mode){
case 0:mode = 1;break;
case 1:mode = 0;break;
default :break;
}
}
}
#include <msp430.h>
#include <stdint.h>
/**
* main.c
*/
uint8_t total = 0;
uint8_t mode = 1;
uint16_t cnt = 0;
uint8_t status0 = 0;//TA0.1status
uint8_t status1 = 0;//TA1.1status
uint8_t status2 = 0;//TA1.2status
uint8_t pwm1 = 0; //TA1.1
uint8_t pwm2 = 0; //TA1.2
uint8_t pwm0 = 0; //TA0.1
int main(void)
{
WDTCTL = WDTPW | WDTHOLD | WDTNMI | WDTNMIES; // stop watchdog timer
IFG1 &= ~NMIIFG;
IE1=NMIIE;
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ; //MCLK闁告粌顒玀CLK闁秆冩穿椤旀洘绋夐敓锟�8MHz
BCSCTL3 |= LFXT1S1;
__bis_SR_register(GIE);
__delay_cycles(1000); //缂佹稑顦欢鐔虹矙閸愯尙鏆�
P1DIR |= BIT2 | BIT4 | BIT6 | BIT7|BIT0;
P2DIR |= BIT1 | BIT2 | BIT4 | BIT5;
P1OUT &= ~BIT4;
TA1CTL &= ~TAIFG;
TA1CCTL1 &= ~(CAP|CCIFG);
TA1CCTL1 |= CCIE;
TA1CCR1 = 0;//TA1.1初始化
TA1CCTL2 &= ~(CAP|CCIFG);
TA1CCTL2 |= CCIE;
TA1CCR2 = 0;//TA1.2初始化
TA1CTL |= TACLR|TASSEL_1|TAIE|MC_1;
TA1CCR0 = 120;
TA0CTL &= ~TAIFG;
TA0CCTL2 &= ~(CAP|CCIFG);
TA0CCTL2 |= CCIE;
TA0CCR2 = 12;//TA0.2初始化
TA0CCTL1 &= ~(CAP|CCIFG);
TA0CCTL1 |= CCIE;
TA0CCR1 = 119;//TA0.1初始化
TA0CTL |= TACLR|TASSEL_1|MC_1|TAIE;
TA0CCR0 = 120;
P1OUT =0;P2OUT =0;
while(1){
// P1OUT |=pwm2;
// P1OUT =0;P2OUT =0;
switch(total){
case 0:P1OUT &= ~BIT6;P1OUT = (pwm0<<2);P2OUT = (pwm1<<1)|(pwm2<<4);break;
case 1:P1OUT &= ~BIT2;P2OUT = (pwm1<<1)|(pwm2<<4)|(pwm0<<5);break;
case 2:P2OUT &= ~BIT1;P2OUT = (pwm1<<2)|(pwm2<<4)|(pwm0<<5);break;
case 3:P2OUT &= ~BIT4;P1OUT = (pwm2<<6);P2OUT=(pwm1<<2)|(pwm0<<5); break;
case 4:P2OUT &= ~BIT5;P1OUT = (pwm2<<6)|(pwm0<<2);P2OUT = (pwm1<<2);break;
case 5:P2OUT &= ~BIT5;P1OUT = (pwm2<<6)|(pwm0<<2);P2OUT = (pwm1<<1);break;
default:break;
}
}
return 0;
}
#pragma vector= TIMER1_A1_VECTOR
__interrupt void TimeA1_ISR(void)
{
switch(TA1IV){
case 0x02:if(TA1CCR1 !=0)pwm1 |= BIT0;break;
case 0x04:if(TA1CCR2 !=0)pwm2 |= BIT0;break;
case 0x0A:
if(TA1CCR1 !=0){
pwm1 &= ~BIT0;
if(TA1CCR1 == 2){
status1 = 1;
}
else if(TA1CCR1 == 119){
status1 =0;
total ++;
}
switch(status1){
case 0: TA1CCR1 -=1;break;
case 1: TA1CCR1 +=1;break;
default:break;
}
}
if(TA1CCR2 !=0){
pwm2 ^= BIT0;
if(TA1CCR2 == 2){
status2 = 1;
}
else if(TA1CCR2 == 119){
status2 =0;
total ++;
if(total == 6)total =0;
}
switch(status2){
case 0: TA1CCR2 -=1;break;
case 1: TA1CCR2 +=1;break;
default:break;
}
}
break;
default:break;
}
}
#pragma vector= TIMER0_A1_VECTOR
__interrupt void TimeA0_ISR(void)
{
switch(TA0IV){
case 0x02:pwm0 |= BIT0;break;
case 0x04:break;
case 0x0A:
pwm0 &= ~BIT0;
if(TA0CCR1 == 2){
status0 = 1;
}
else if(TA0CCR1 == 119){
status0 =0;
total ++;
}
switch(status0){
case 0: TA0CCR1 -=1;if(TA0CCR1 == 40&&TA1CCR1 ==0)TA1CCR1 = 119;break;
case 1: TA0CCR1 +=1;if(TA0CCR1 == 40&&TA1CCR2 ==0)TA1CCR2 = 119;break;
default:break;
}
}
}
#include <msp430.h>
void PWM_Init(void)
{
TA0CTL |= TASSEL1;//设置时钟源为SMCLK
TA0CTL |= MC0|MC1;//计时器向上计数到 TACCR0,然后向下计数到 0000h。
TA0CCR0 = 255;
TA0CCR1 = 255;//占空比(TACCR0 - TACCR2) / TACCR0,频率=SMCLK/(TACCR0+1)/2
TA0CCTL0 &= ~CAP;//比较模式
TA0CCTL1 &= ~CAP;
TA0CCTL1 |= OUTMOD_6;//比较输出模式
TA1CTL |= TASSEL1;//设置时钟源为SMCLK
TA1CTL |= MC0|MC1;//计时器向上计数到 TACCR0,然后向下计数到 0000h。
TA1CCR0 = 255;
TA1CCR1 = 255;//占空比(TACCR0 - TACCR1) / TACCR0,频率=SMCLK/(TACCR0+1)/2
TA1CCR2 = 255;
TA1CCTL0 &= ~CAP;//比较模式
TA1CCTL1 &= ~CAP;
TA1CCTL2 &= ~CAP;
TA1CCTL1 |= OUTMOD_6;//比较输出模式
TA1CCTL2 |= OUTMOD_6;//比较输出模式
P1SEL |= BIT2;//P1.2 TA0.1
P1DIR |= BIT2;
P1SEL |= BIT6;//P1.3 TA0.1
P1DIR |= BIT6;
// P2SEL |= BIT6;//P2.6 TA0.1
// P2DIR |= BIT6;//无反应???
P2SEL |= BIT1;//P2.1 TA1.1
P2DIR |= BIT1;
P2SEL |= BIT2;//P2.2 TA1.1
P2DIR |= BIT2;
P2SEL |= BIT4;//P2.4 TA1.2
P2DIR |= BIT4;
P2SEL |= BIT5;//P2.5 TA1.2
P2DIR |= BIT5;
}
int main(void)
{
unsigned int cnt0_1=0,cnt1_1=0,cnt1_2=0;
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;//配置DCO频率为1MHz
P1DIR |= BIT4;//控制第一行
P1DIR |= BIT7;//控制第二行
PWM_Init();
while(1)
{
P1OUT &= ~BIT4;
P1OUT &= ~BIT7;
// for(cnt0_1 = 0;cnt0_1 < 255;cnt0_1 ++)//同时变亮变暗
// {
// TA0CCR1 = cnt0_1;
// TA1CCR1 = cnt0_1;
// TA1CCR2 = cnt0_1;
// __delay_cycles(5000);
// }
// for(cnt0_1 = 255;cnt0_1 > 0;cnt0_1 --)
// {
// TA0CCR1 = cnt0_1;
// TA1CCR1 = cnt0_1;
// TA1CCR2 = cnt0_1;
// __delay_cycles(5000);
// }
while(cnt0_1<255 || cnt1_1<255 || cnt1_2<255)
{
if(cnt0_1<255) cnt0_1++;
if(cnt0_1>100)
{
if(cnt1_1<255) cnt1_1++;
if(cnt1_1>100)
{
if(cnt1_2<255) cnt1_2++;
}
}
TA0CCR1 = cnt0_1;
TA1CCR1 = cnt1_1;
TA1CCR2 = cnt1_2;
__delay_cycles(5000);
}
while(cnt0_1>0 || cnt1_1>0 || cnt1_2>0)
{
if(cnt1_2>0) cnt1_2--;
if(cnt1_2<150)
{
if(cnt1_1>0) cnt1_1--;
if(cnt1_1<150)
{
if(cnt0_1>0) cnt0_1--;
}
}
TA0CCR1 = cnt0_1;
TA1CCR1 = cnt1_1;
TA1CCR2 = cnt1_2;
__delay_cycles(5000);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment