单片机循环程序

单片机循环程序,第1张

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

void delay(int a)

{

uchar i

while(a--)for(i=0i<120i++)

}

main()

{

uchar i,j

P0=0xfe

for(i=0i<5i++)

for(j=0j<8j++)

    {

    P0=_crol_(P0,1)

    delay(1000)

    }

}

x0为启动按钮,x1为停止按钮。y0~y7为8盏灯。程序在按下启动按钮后,灯1先亮,1秒(T0延时)后灭,1秒后(T1延时)灯2亮,依次循环。当按下x1后,循环结束。

按下x0后,m0得电为1并自保持,此时1秒计时器T0计时,1秒后T0常开点闭合1秒计时器T1计时,再过1秒T1计时结束常闭点断开T0线圈,

T0失电复位并断开T0常开点,此时T1线圈也失电复位,T1常闭点又闭合,T0得电重复上述计时过程。

第二个程序块:

当M0为1时,在T0触点的上升沿来时k3M10这个二进制数乘以2再写入k3M10中。

K3M10代表M10~M21共12个辅助继电器的组合,那么可以将K3M10看作是一个二进制数。程序未启动时,M10~M21均为0,那么这个二进制数为0;当程序启动时,在下一个程序块中利用了M0的上升沿置位M10,此时M10~M21为1,当T0触点的上升沿来时k3M10(此时为1)这个二进制数乘以2再写入k3M10中(写入后为2),2在二进制数中为10,此时M10失电,M11得电,可以认为M10把"1"交给了M11,以此类推。当第8个M17得电时,完成了一次循环。下一个T0上升沿来到时,M18得电,M17失电。此时下面的程序块利用了M18的上升沿重新置位M10并且将M18复位。这样程序又从M10得电开始循环下去了。

这个程序块的作用就是每次T0的上升沿来到时,“1”在M10~M17之间转移。

电路很简单八个led灯接在p1口.运行后看到的效果是 从第一个灯开始 随着时间变化 二进制数的递减 所有的灯都会依次的点亮,当全部的灯都被点亮后再重新开始这个过程 一直循环下去 单片机是不是很有趣?

下面是c语言程序源码

#include <reg51.h>

void delay100ms()  //如果函数是在主函数后面定义,那么一定要在主函数前面声明                                      

void main()

{

int i

i=0xfe

while(1)

{P1=i

i--

delay100ms()

if(i==0)

i=0xfe

}

}

void delay100ms(void)//

{

unsigned char a,b,c

for(c=19c>0c--)

for(b=20b>0b--)

for(a=230a>0a--)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11041317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存