#include <reg51.h> // 包含头文件
// 延时函数
// 参数 in 为延时的时间长度(单位时间很短,大约一条指令的时间)
void delay(unsigned int in)
{
unsigned int i;
for(i=0;i<100;i++) {;}
}
// 由暗变亮的子函数
// 参数 ledn 为点第几位的灯
void off_on(unsigned char ledn)
{
unsigned int i,j;
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
{
if(i<=j)
{ // 模拟pwm的低电平输出
P0 = 0;
}
else
{ // 模拟PWM的高电平输出
P0 = 1<<ledn;
}
delay(10); // 这里的延时 根据灯的情况自己调整
}
}
}
// 由亮变暗的子函数
// 参数 ledn 为点第几位的灯
void on_off(unsigned char ledn)
{
unsigned int i,j;
for(i=100;i>1;i--)
{
for(j=0;j<100;j++)
{
if(i<=j)
{ // 模拟pwm的低电平输出
P0 = 0;
}
else
{ // 模拟PWM的高电平输出
P0 = 1<<ledn;
}
delay(10); // 这里的延时 根据灯的情况自己调整
}
}
}
// 主程序开始
void main()
{
unsigned char ledn;
while(1)
{
for(ledn=0;ledn<8;ledn++)
{
off_on(ledn);
on_off(ledn);
}
}
}
这个程序我简单测试了一下,效果还好,不知道这个效果是不是您想要的?
说明一下啊,我这个程序是高电平点的灯,就是P0口在输出高电平的时候灯才会亮,
如果调试程序的时候看见各个灯的亮暗顺序反了的话,仅仅需要调换一下亮暗的顺序或者改一下输出的电平关系就可以了。
追问你好 先谢谢这位大哥啦
然后我吧程序烧写到我的板上面就是有一种情况 第一个灯在闪烁然后后面七个灯是一直亮着的 0 0 这是什么情况
追答是不是我的延时给的太长了,把那两行delay注释掉看看呢?
本回答被提问者采纳