本文目录一览:

用C语言在·at89c51单片机点亮一个led灯

用c啊,我想想:

1、和硬件有点儿关系,这个你清楚么?

2、假设led连接到p1口吧。第一个灯接到p1.0。阴极接io,阳极接5v。

#include

bit

secflag;

unsigned

char

ms;

void

display(unsigned

char

num,unsigned

char

sec)

{

num%=8;

p1=~(1

8;tl0=-50000;

ms++;

if(ms20){ms=0;secflag=1;}//12mhz,

50ms定时中断,1秒计时。

}

你很容易扩展出任意要求的闪烁流水灯啦。

display(2,1);

display(1,1);

display(3,2);

display(1,2);

……放到while里面就好了。祝你玩得开心。

51单片机LED灯闪烁实验,具体分析一下以下程序每一步的作用,完全看不懂。。。

#includereg51.h

void delay(unsigned int i);

main() //主函数

{

P2=0x55; //P2口:0101 0101 从左到右:第一个口低电平,第二个口高电平。。。。

delay(600); //延时600,不延时你来不及看见灯亮

P2=0xaa; /*P2口输出端取反,1010 1010 高电平变低电平,低电平变高电平,(原来亮的关掉,原来不亮的亮)*/

delay(600);

}

void delay(unsigned int i) //这个是延时函数

{

unsigned char j;

for(i;i0;i--)

for(j=255;j0;j--) ;

}

这样应该明白了吧!不过你这个程序,按一下复位(或者打开一次电源)只亮一下。加个循环就可以不停的闪啦!

单片机点亮一个led的实验目的

任何单片机程序都要有一个死循环,否则程序执行到底了,然后怎么办。没有这个死循环,单片机从0地址重新运行,整个系统重新初始化,会导致IO口复位,运行的很快的话,就看到别的灯微亮。at89s52也是51系列的单片机,程序完全兼容,用51的程序就行了,包括外围电路也一样,直接用就行了。 单灯亮就是在io口输出一个二进制数中只有一位不同的数,比如说“00000001”,就只有最后一位是“1”,其余的都是“0”,要双灯亮就使其中的两位与其他的不同就行了,还是那上面的例子来说,现在改成“00000011”,这样有两位是不用的了,当然不同的两位也可以不挨着,比如“00100001”,这样也是两位同时点亮。(例子的前提是输出高电平时led点亮,如果不是的话就把里面的“0”改成“1”,“1”改成“0”就行了。出现这种问题我感觉有一下几点原因,你可以逐个排查下,如果程序下载成功,说明单片机电源应该没有问题,那就需要看已下几点

1.看你的程序是不是编写的不对,主要看你的IO口配置是否正确,IO口的高低电平是不是写错了,IO口电平翻转时,中间是不是延时太短,延时太短的话,人眼看不出来。

2.硬件方面的话,你就看看你的指示灯是不是接错了

3.你看一下你的单片机晶振是不是符合你单片机的型号

4.看一下,晶振旁边的电容是不是焊错了

如果这些都没有问题的话,那只能说你的程序肯定有问题,或者程序没有下载成功。

单片机C语言编程点亮LED灯

可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。 具体实现方法可以参考如下程序: #include #include #define uint unsigned int#define uchar unsigned charvoid delay(uint a);void main(){ P1=0xfe; while(1) { // 向左循环点亮LED for(i=0; i7; i++) { P1=_crol_(P1,1); // 左移一位,点亮下一位LED delay(55); } // 向右循环点亮LED for(i=0; i/ 右移一位,,点亮上一位LED delay(55); } }}// 延时函数,延时a毫秒void delay(uint a){ uint x,y; for(x=a;x0;x--) for(y=110;y0;y--);}