急求!求一个使单片机控制P1端口的8个LED灯做作左移流水灯的C语言程序(用循环结构)

急求!求一个使单片机控制P1端口的8个LED灯做作左移流水灯的C语言程序(用循环结构),第1张

#include<reg52h>

#include<intrinsh>

#define uchar unsigned char

#define uint unsigned int

/

名称 : Delay()

功能 : 延时,延时时间为 10ms del

输入 : del

输出 : 无

/

void Delay(uint del)

{

uint i,j;

for(i=0; i<del; i++)

for(j=0; j<1827; j++)

;

}

/

名称 : Main()

功能 : 实现灯的闪烁

输入 : 无

输出 : 无

说明 :也可以使用例1的的方法来关闭数码管

/

void Main(void)

{

uchar i;

while(1)

{

P1 = 0xfe;

for(i=0; i<7; i++)

{

P1 = _crol_(P0, 1); //用于循环左移

Delay(15);

}

}

}

这是一个51单片机的P1口小灯循环左移的例子,不懂的问我。应该能用

C语言中,“<<”为左移运算符,“>>”为右移运算符。

具体使用方法如下:

1、左移运算符(<<)

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

例:a = a << 2 将a的二进制位左移2位,右补0,

左移1位后a = a 2;

若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

2、右移运算符(>>)

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

*** 作数每右移一位,相当于该数除以2。

例如:a = a >> 2 将a的二进制位右移2位。

左补0 or 补1 得看被移数是正还是负。

ORG 0 //开始位置地址,0x00

START: MOV R2,#8 //将8写入R2寄存器

MOV A,#0FEH //将0xfe写入A

SETB C //进位标志位C(CY)置1

LOOP: MOV P1,A //将A里面的数值送到P1口

LCALL DELAY //长跳转,跳到DELAY

RLC A //A数值左移一位,最高位移进C,C移到A最低位

DJNZ R2,LOOP //R2减一,判断不等于0,跳转到loop

MOV R2,#8 //将8写入R2寄存器

LOOP1: MOV P1,A //将A里面的数值送到P1口

LCALL DELAY //长跳转,跳到DELAY

RRC A //A数值右移一位,最高低位移进C,C移到A最高位

DJNZ R2,LOOP1 //R2减一,判断不等于0,跳转到LOOP1

LJMP START //跳转到START

DELAY: MOV R5,#20 ;//DELAY 函数,延时作用

D1: MOV R6,#20

D2: MOV R7,#248

DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

RET //返回到断点

END//结束指令

以上就是关于急求!求一个使单片机控制P1端口的8个LED灯做作左移流水灯的C语言程序(用循环结构)全部的内容,包括:急求!求一个使单片机控制P1端口的8个LED灯做作左移流水灯的C语言程序(用循环结构)、C程序中,左移“<<”、右移“>>” 的具体用法是什么、单片机程序说明解释等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10141656.html

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

发表评论

登录后才能评论

评论列表(0条)

保存