MCU学习2--跑马灯

来源:互联网 发布:算法英文版 编辑:程序博客网 时间:2024/06/13 12:45

程序(跑马灯) :

#include <stdio.h>

#include <reg52.h>

 

sbit P10 = P1^0;

sbit P11 = P1^1;

sbit P12 = P1^2;

sbit P13 = P1^3;

sbit P14 = P1^4;

sbit P15 = P1^5;

sbit P16 = P1^6;

sbit P17 = P1^7;

 

void main( void )

{  

    unsigned int n;

    while( 1 )

    {

       P10=0; P11=1; P12=1; P13=1;

       for(n=40000; n>0; n--);

      

       P10=1; P11=0; P12=1; P13=1;

       for(n=40000; n>0; n--);

      

       P10=1; P11=1; P12=0; P13=1;

       for(n=40000; n>0; n--);

      

       P10=1; P11=1; P12=1; P13=0;

       for(n=40000; n>0; n--);

    }

}

 

 

总结 :

1. main函数没有返回值, 也没有参数. 否则keil不仿真. 不知道为什么

 

2. build的时候需要先clear target. 然后再builder target.而且不能build all target. 否则直接进入RUN方式,并且还不能仿真。 奇哉怪也, 不知道为什么。 以后就这么干吧!

 

3. MS延迟都使用类似这样的代码来达到

    unsigned int n;

    for(n=40000; n>0; n--);

    至于究竟延迟了多长时间, 先不理会! 精确延迟也暂时不考虑

   

   

作业:

例程中的跑马灯在同一时刻只显示1个灯,现在改为同时亮着2个灯的跑马灯。

 

#include <stdio.h>

#include <reg52.h>

 

sbit P10 = P1^0;

sbit P11 = P1^1;

sbit P12 = P1^2;

sbit P13 = P1^3;

sbit P14 = P1^4;

sbit P15 = P1^5;

sbit P16 = P1^6;

sbit P17 = P1^7;

 

void main( void )

{  

    unsigned int n;

    while( 1 )

    {

       P10=0; P11=0; P12=1; P13=1;

       for(n=40000; n>0; n--);

 

       P10=1; P11=0; P12=0; P13=1;

       for(n=40000; n>0; n--);

 

       P10=1; P11=1; P12=0; P13=0;

       for(n=40000; n>0; n--);

 

       P10=0; P11=1; P12=1; P13=0;

       for(n=40000; n>0; n--);

      

    }

}

 

由于延时太短了, 都看不大清楚. 以上的延迟我改为了

for(n=40000; n>0; n--);

for(n=40000; n>0; n--);

for(n=40000; n>0; n--);

for(n=40000; n>0; n--);

for(n=40000; n>0; n--);

呵呵就能看能明白点了。(将一个延迟放大5)

通常延迟加长, 估计都是利用嵌套循环的吧! 不会像我为了省事COPY & PASTER. :

unsigned char i;

unsigned int n;

 

// 将延迟放大10

for(i=10; i>0; i--)

    for(n=40000; n>0; n--)

       ;

那么, 作业就修改为 :

#include <stdio.h>

#include <reg52.h>

 

sbit P10 = P1^0;

sbit P11 = P1^1;

sbit P12 = P1^2;

sbit P13 = P1^3;

sbit P14 = P1^4;

sbit P15 = P1^5;

sbit P16 = P1^6;

sbit P17 = P1^7;

 

void main( void )

{  

    unsigned char i;  // 尽量的用小数据类型, 如果够用的话.

    unsigned int n;

    while( 1 )

    {

       P10=0; P11=0; P12=1; P13=1;

       for(i=5; i>0; i--)

           for(n=40000; n>0; n--);

 

       P10=1; P11=0; P12=0; P13=1;

       for(i=5; i>0; i--)

           for(n=40000; n>0; n--);

 

       P10=1; P11=1; P12=0; P13=0;

       for(i=5; i>0; i--)

           for(n=40000; n>0; n--);

 

       P10=0; P11=1; P12=1; P13=0;

       for(i=5; i>0; i--)

           for(n=40000; n>0; n--); 

    }

}