单片机:在程序中实现八灯从上到下流水,然后在从下到上流水,同时亮和同时灭可以考虑循环左右移来实现)?

如题所述

可以实现,首先随便连接一个I/O口,P1/P2/P0均可,然后赋予一初值,然后使用本征函数_cror_(循环变量,循环次数)循环右移,或者循环左移实现。左移只需改掉本征函数,同时亮灭可以先给全1,然后给全0,中间加延时,自然得到需要的功能。
#include <reg51.h> //包含头文件
#include <INTRINS.H> //包含本征函数头文件
#define uint unsigned int //定义uint
#define uchar unsigned char //定义uchar
void delayms(uint n) //延时,n为多少延时多少ms
{
uint i;
for(;n>0;n--) //延时nms
for(i=121;i>0;i--) //12M晶振而言,延时1ms;
}
void main() //主程序
{
uint w=0xfe; //定义变量w为第一个灯点亮
while(1)
{
P0=w%256; //取出变量w的低八位89%10=9,89/10=8,2^8=256
delayms(500); //延时500ms
w=_irol_(w,1); //对双字节变量w循环左移1位
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-28
根据要求完成程序,循环左右没问题,只是程序判断如何实现效果