C51单片机小程序(一)

  • 好久没碰单片机了,有些生疏了。到现在还依稀记得自己独自坐在电脑屏幕前自学单片机,硬生生的去看了单片机的基础,现在想想还是挺有趣的。附上当初一点初学的单片机小程序,请大家多多指教!
用P1口作为输出口,接8位用作逻辑电平显示的发光二极管。设计程序使发光二极管间
隔300ms先奇数亮再偶数亮,循环3次;一个发光二极管亮上下循环3次;两个分别从两
边向中间流动3次;再从中间向两边流动3次;8个全部闪烁3次;关闭全部发光二极管
,停止。



综合实验程序:

#库定义
#include<reg52.h>
#include<intrins.h>

sbit  led=P1^0;    #位定义
int i,j,k,num,e,p,m;            
void delay(int k)       #定义延时函数
{
 while(k--);
}
void timer0()   #定时器0的初始化
{
  TMOD=0X01;    #工作模式
    TR0=1;          
    EA=1;           #开启总中断
    ET0=1;
    TH0=0XDc;       #定时时间  需经过换算
    TL0=0X00;
}
void Pled()     
{
          EA=0;
                        //P1=0xfe;
                //delay(50000);
for(p=0;p<3;p++){               
    P1=0xfe;
    for(num=0;num<8;num++)
    {
   delay(50000);
     P1=_crol_(P1,1);    #_crol_(左移函数)
        if(num==6)
        {
            for(e=0;e<6;e++){
                delay(50000);
    P1=_cror_(P1,1);    #_cror_(左移函数)

 }
 }

            }
}
}
void flowmiddle()
{
for(m=0;m<3;m++)
{   
  P1=0x7e;
    delay(50000);
    P1=0XBD;
    delay(50000);
    P1=0XDB;
    delay(50000);
    P1=0XE7;
    delay(50000);
}
for(m=0;m<3;m++)
{   
        P1=0XE7;
    delay(50000);
    P1=0XDB;
    delay(50000);
    P1=0XBD;
    delay(50000);
    P1=0x7e;
    delay(50000);
}
  for(m=0;m<3;m++){
            P1=0xff;
            delay(50000);
            P1=0;
            delay(50000);
  }
}
void main()
{
    timer0();
     while(1){
       if(j==7)
         { j=0;
     Pled();
     flowmiddle();
} if(j==0)
{
P1=0xff;
}
     }
}
void time0() interrupt 1    #定时器0中断响应
{
    TH0=0Xdc;
    TL0=0X00;//10ms
    i++;
    if(i==30)
    {  i=0; 
        j++;
        if(j%2==0){
        P1=0x55;}
        if(j%2!=0)
        {
     P1=0xaa;
}  
  }
}



实验实现说明:使用定时器0设定一个计时300ms的计时器,通过判断变量j在计时器计时到后是奇偶数,分别亮对应的小灯,当变量到7时,清除变量值,并执行通过左右移操作,以及流向中间的操作。

猜你喜欢

转载自blog.csdn.net/qq_36913795/article/details/82084599