C51 Revision

今天复习跑马灯程序,感觉熟练多了,呵呵,基本上没有按照题目编,因为其实细节就是那些延迟的参数,那个很容易修改的。

Example 1: 8个发光管演示出8位二进制数累加过程。

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

void delay1s(void);

uchar status;

void main()
{
 status=0;
 while (1)
 {
  delay1s();
  status=status+1;
  P0=~status;
 }
}

void delay1s(void)
{
    uchar a,b,c;
    for(c=46;c>0;c–)
        for(b=152;b>0;b–)
            for(a=70;a>0;a–);
    _nop_();  //if Keil,require use intrins.h
}

Example 2: 8个发光管来回流动,管亮100ms,[流动时让蜂鸣器发出“滴滴”声。]

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

void delay1s(void);

uchar status;

void main()
{
 while (1)
 {
  P0=0xFE;
  delay1s();
  for(status=1; status<8; status++)
  {
   
   P0=_crol_(P0,1);
   delay1s();
  }
  //P0=0x7F;
  for(status=7; status>1; status–)
  {
   
   P0=_cror_(P0,1);
   delay1s();
  }
 }
}

void delay1s(void)
{
    uchar a,b,c;
    for(c=46;c>0;c–)
        for(b=152;b>0;b–)
            for(a=70;a>0;a–);
    _nop_();  //if Keil,require use intrins.h
}

Example 3: 8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

void delay1s(void);
uchar status,s1;

void main()
{
 while (1)
 {
  P0=0xFE;
  delay1s();
  for(status=1; status<8; status++)
  {
   
   P0=_crol_(P0,1);
   delay1s();
  }
  //P0=0x7F;
  for(status=7; status>0; status–)
  {
   
   P0=_cror_(P0,1);
   delay1s();
  }
  for(status=0; status<5; status++)
  {
   P0=0x00;
   delay1s();
   P0=~P0;
   delay1s();
  }
 }
}

void delay1s(void)
{
    uchar a,b,c;
    for(c=46;c>0;c–)
        for(b=152;b>0;b–)
            for(a=70;a>0;a–);
    _nop_();  //if Keil,require use intrins.h
}