
但根据这几句可以分析出,temp是一个字符型变量
其功能可以理解为:跑马灯电路
temp可以被赋值为十六进制数,而十六进制数则是单片机中二进制数的表达方式
例如二进制 1111 1110,对应十六进制 FE,单片机中写法为 0xfe,点亮右边第一个发光管
二进制中的这8个数据位,则对应P1的8个IO端口
在你的程序中,开头的部分应该有一句 P1=0xfe 之类的语句
temp = _cror_(temp,1)
cror应该是移位函数,此句的意思为,将变量temp左移移位或右移移位
假设是左移,那么temp的值就变为 0xfd,即 1111 1101,则点亮右边第二个发光管
或temp的值变为 0xfc,即 1111 1100 ,点亮右边第一个和第二个发光管
再调用一次此函数,则又会移一位,temp变为0xfb或0xf8,即 1111 1011 或 1111 1000
点亮右边第三个或同时点亮第一二三个发光管,剩下的以此类推
所以直接用数值数据 1,无法达到此效果
#include<reg51h>
#define uchar unsigned char
uchar led=0xfe;
sbit kr=P3^2;
sbit kl=P3^3;
uchar key;
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
void ext0() interrupt 0
{
key=1;
while(kr==0);
}
void ext1() interrupt 2
{
key=2;
while(kl==0);
}
main()
{
EX0=1;
EX1=1;
IT0=1;
IT1=1;
EA=1;
while(1)
{
if(key==1){P1=led;led=_cror_(led,1);}
else if(key==2){P1=led;led=_crol_(led,1);}
else P1=0xff;
delay(200);
}
}
org 0000h
ajmp start
org 0030h
start:
mov a,#0ffh ;
clr c ;
mov r2,#08h ;循环八次。
loop: rlc a ;带进位左移。
mov p1,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop ;反复循环
mov r2,#07h ;再往回循环。
loop1: rrc a ;带进位右移
mov p1,a ;输出到P1口。
call delay ;延时一段时间
djnz r2,loop1 ;反复循环
jmp start ;重新开始
delay: mov r3,#20 ;延时子程序
d1: mov r4,#20
d2: mov r5,#248
djnz r5,$
djnz r4,d2
djnz r3,d1
ret
end
这段程序就是一个流水灯的程序,我只拣重要的给你大概解释一下:
这段程序的主要是先是循环7次左移,每次1位,然后右移,每次两位
P2=0×01 //给P2口赋初值
Delay MS (150) //这是一个延时子程序调用,这里延时150毫秒
P2=_crol-(P2,1); //这一句是 P2口的值左移1位
P2=_cror_(P2,2) //P2口的值右移2位
另外,你的这段代码错误不少,肯定无法通过编译,应改为:
#inclule<reg52h>
#inclule<intrinsh>
#define uchar unsigned char
#define uint unsigned int
void Delay MS (uint x)
{
uchar t;
while(x--)
{
for(t=120;t>0;t--);
}
}
void main()
{
uchar i;
P2=0x01;
while(1)
{
for(i=7;i>0;i--)
{
P2=_crol_(P2,1);
Delay MS(150);
}
for(i=7;i>0;i--)
{
P2=_cror_(P2,2);
Delay MS (150);
}
}
}
写程序时一定要养成良好的习惯,从你的代码中可以看出你仍不够认真,因为你在许多语句后面就丢掉了一个字符“;”,这很重要。
以上就是关于在c51中P1 = temp; temp = _cror_(temp,1);为什么要用temp而不直接用P1全部的内容,包括:在c51中P1 = temp; temp = _cror_(temp,1);为什么要用temp而不直接用P1、求一个程序,两个独立按键控制流水灯左右循环的程序,谢谢、单片机跑马灯程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)