急需单片机高手帮忙用C语言写一个单片机4个灯轮流闪亮的源程序。 详细内容看补充。

1,单片机为STC89C51RC。
2,要求程序简单易懂,请编写时在旁边添加详细注释。
3,我是学C语言的大一学生,还不怎么懂,所以网上的类似程序有点看不懂,请谅解。
4,看了百度一下找到的类似程序,好像都有不是用C语言写,所以请尽量添加详细注释。
5,非常感谢。

/*对于个单片机的初学者,我希望用最直观的方式来达到你要的要求,程序每一句我已经写好备注,希望对你有帮助*/
#include<reg51.h> //使用51功能头文件
sbit L1=P0^0; //L1对应P0.0,表示第一盏灯
sbit L2=P0^1; //L1对应P0.1,表示第二盏灯
sbit L3=P0^2; //L1对应P0.2,表示第三盏灯
sbit L4=P0^3; //L1对应P0.3,表示第四盏灯

void delay(unsigned int i) //延迟子程序,注意这里的unsigned int i,这里相当于限定了调用时候变量的类型
{
unsigned char j; //局部变量定义
while(i--) //循环i次,主程序main调用时候,i为100,这数值你可随便该,但小于65355
for(j = 200; j > 0; j--) ; //这步的意思是空操作200次,也就是暂用CPU200次的工作时间

}
void main(void) //主函数,这里的viod是无类型,意思是没有给这函数指定数据类型
{
P0=0x00; //将P0口初始化位高电平,如果没有这句,初始化为低电平,这里可根据需要选择
L1=1; //第一盏灯亮
delay(100); //调用延时子程序
L2=1; //第二盏灯亮
delay(100); //调用延时子程序
L3=1; //第三盏灯亮
delay(100); //调用延时子程序
L4=1; //第四盏灯亮
delay(100); //调用延时子程序
while(1); //这里我用了个死循环,目的程序只运行一次,如果需要自动重新运行,可以把这句删掉
}
纯手工书写,并仿真调试过,记得加分哟~
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-10
//假如用p1口的p1.0,p1.1,p1.2,p1.3来控制四个小灯的点亮
#include<reg51.h>
sbit led0=P1^0; //注意P要大写
sbit led1=P1^1;
sbit led2=P1^2;
sbit led3=P1^3;
void delay(unsigned int m) //m是几就是延时几毫秒
{
unsigned int n;
for(;m>0;m--)
for(n=124;n>0;n--); //大约是一毫秒延时
}
void main()
{
P1=0x00;
while(1)
{
led0=1;
delay(200);
led0=0;
delay(200);
led1=1;
delay(200);
led1=0;
delay(200);
led2=0;
delay(200);
led2=1;
delay(200);
led2=0;
delay(200);
led3=1;
delay(200);
led3=0;
delay(200);
}
}

//有不懂的还可以问 这是最简单的变法 还有三种变法
第2个回答  2011-06-27
授人以鱼,不如授人以渔。
推荐看郭天祥的《十天学会单片机和C语言》,你这个可以是最简单的了。追问

哥,我才学C语言15天,单片机更是昨天才进行了解,你说的那些我明白,哥你认为如此简单,就给小弟一个完美的答案吧。

追答

#include
#include
#define uchar unsigned char
uchar j,temp;

void delay(unsigned int ms)
{
uchar t;
while(ms--)
for(t=0;t<123;t++);
}
void main()
{
while(1)
{
temp=0xfe;
for(j=0;j<4;j++)
{
P1=temp;
delay(500);
temp=_crol_(temp,1);
}
}
}

第3个回答  2011-06-27
// 延时函数
void Delay()
{
int i = 0;
for(i=0;i<100000;i++); // 空转
}
// 主函数
void main()
{
int i = 0;
for(;;)
{
for(i=0;i<4;i++)
{
P1 = ~(1<<i); // 假设这4盏灯在P1.0-P1.4,低电平亮
Delay(); // 点亮后等待一会儿避免看不清楚
}
}
}追问

顶礼膜拜,哥,我单片机上4个灯分别是p2^3,p2^4,p2^5,p2^6,这个又应该怎么写呢?
开头的那些我会。
另外,i值<100000,这个100000会不会太大了?

本回答被提问者采纳
相似回答