几种流水灯控制程序
#include <reg52.h>
unsigned int a;
unsigned char i;
void main()
{
while(1)
{
for(i=0;i<8;i++)
{
P1= P1 << 1; //移位点亮
a= 65535;
while(a--); //软件延时
}
P1 = 0xff;
a= 65535;
while(a--);
}
}
If方式#include <reg52.h>
unsigned int a;
void main()
{
while(1){
P1 = P1 <<1;//移位点亮
a = 65535;
while(a--); //软件延时
if(P1 == 0)
{
P1= 0xff;
a= 65535;
while(a--); //软件延时
}
}
}
For加循环移位
#include <reg52.h>
#include <intrins.h>
unsigned int a;
unsigned char i;
unsigned temp;
void main()
{
temp= 0xfe;
P1= temp;
while(1)
{
for(i= 0; i < 8; i++)
{
temp= _crol_(temp,1);
P1= temp;
a= 65535;
while(a--);
}
}
}
添加几个相关的习题代码,并有一个疑惑(见下红色部分),望解答特定延时为1s
#include <reg52.h>
#include <intrins.h>
unsigned int a;
unsigned char i;
unsigned temp;
void delay(unsigned int z);
void main()
{
temp= 0xfe;
P1= temp;
while(1)
{
for(i= 0; i < 8; i++)
{
temp= _crol_(temp,1);
P1= temp;
delay(1000);
}
}
}
void delay(unsigned int z)
{
unsignedint x,y;
for(x= z;x > 0;x--)
for(y= 120; y > 0; y--);
}
这里有一点疑问:晶振的频率是11.0592MHz,为什么把Y值设定为120刚好是1ms呢?我是看视频学习的,讲解人只是用debug测试了一下,确实大致等于1ms,但是我没算懂~有知道的小伙伴可以回复一下解答我的疑惑。
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint a;
uchar i;
unsigned temp;
void delay(uint z)
{
uintx,y;
for(x= z;x > 0;x--)
for(y= 120; y > 0; y--);
}
void main()
{
temp= 0xfd;
P1= temp;
while(1)
{
for(i= 0; i < 4; i++)
{
temp= _crol_(temp,2);
P1= temp;
delay(250);
}
}
}
使发光二极管从右往左循环点亮间隔500毫秒,然后熄灭
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint a;
uchar i;
unsigned temp;
void delay(uint z)
{
uintx,y;
for(x= z;x > 0;x--)
for(y= 120; y > 0; y--);
}
void main()
{
temp= 0xfe;
P1= temp;
delay(500);
while(1)
{
for(i= 0; i < 7; i++)
{
temp= _crol_(temp,1);
P1= temp;
delay(500);
}
if(i== 7)
temp= 0xff;
}
}
依次点亮LED1到LED8发光二极管间隔500毫秒#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uint a;
uchar i;
unsigned temp;
void delay(uint z)
{
uintx,y;
for(x= z;x > 0;x--)
for(y= 120; y > 0; y--);
}
void main()
{
temp= 0xfe;
P1= temp;
delay(500);
while(1)
{
for(i= 0; i < 7; i++)
{
temp= temp << 1;
P1= temp;
delay(500);
}
}
}
首先不说代码质量,编码风格就很规范。再接再厉,大牛也是从菜鸟开始的。
谢谢你啊。我接触过蛮多语言,代码书写规范很重要,不然就没有什么可读性了。
前面2-4-6-8闪烁的含义我理解错了,在这里进行修正
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z)
{
uintx,y;
for(x= z;x > 0;x--)
for(y= 120; y > 0; y--);
}
void main()
{
while(1)
{
P1= 0x55;
delay(1000);
P1= 0xff;
delay(1000);
}
}
然后,循环点亮led1到8也可以进行修改,更简洁
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar i;
void delay(uint z)
{
uintx,y;
for(x= z;x > 0;x--)
for(y= 120; y > 0; y--);
}
void main()
{
for(i= 0; i < 8; i++)
{
P1= P1 <<1;
delay(500);
}
}
非常好的资料 小编最好打包分享一下
谢谢提醒,现在处于学习阶段, 以后会整理分享。现在是边学边分享,也正好可以跟论友们交流。
好的 小编加油 期待中
小编的学习精神可嘉,帮顶让更多的爱好者能过看到~~~~