# include <reg51.h># include <intrins.h>#define LED P2 void Delay(unsigned int); void main(void){unsigned char n;LED=0x01;while(1){for(n=0; n<7; n++){LED = _crol_(LED,1); Delay(25);}for(n=0; n<7; n++){LED = _cror_(LED,1);Delay(25);}}}void Delay(unsigned int c){unsigned int i, j;while(c--){for(i=38; i>0; i--)for(j=130; j>0; j--);}}
3 回答
九州编程
TA贡献1785条经验 获得超4个赞
首先对比一下 左边与右边 那里有不同 同时 程序不同对应的输出结构有哪些不同。。
P2口 连接8个LED 低电平驱动使其发光。
P2=0xfe //上电 P2.0连接的 LED发光。 其余的熄灭。
对比一下程序
void main() //主函数
{
P2=0xfe; //P2初始化
while(1) //死循环
{
num=P2; //这里 与左边不同 把P2的状态给 NUM 也就是0XFE num=0xfe
P2=_crol_(num,1); //P2等于num 循环左移 P2=0xef 这时应该是连接的P2.7的LED发光
delay(0);//延迟
}
}
左边 代码 NUM 每次大循环 都赋值 num=0xfe 是固定的 所以不管你以后怎么移动 P2口的输出都是不变得 只移动了一次。
慕尼黑的夜晚无繁华
TA贡献1864条经验 获得超6个赞
一个时钟周期=晶振的倒数
51单片机的一个机器周期=6个状态周期=12个时钟周期
一个单周期指令包括一个机器周期,即12个时钟周期,所以12m晶振的话一条单周期指令执行的时间为12*(1除12m)=1us
延时更多的话往上乘就是了
- 3 回答
- 0 关注
- 177 浏览
添加回答
举报
0/150
提交
取消