C语言指针在单片机编程中的基本应用-LED闪烁
时间:10-02
整理:3721RD
点击:
本人是单片机初学者,凭着对创造和单片机的热爱一直在坚持学习。
最近看了关于指针的C语言书籍,但是关于指针在单片机中应用的例子没有
所以自己写了一段,供大家参考学习。
例程我已经在自己的开发板上验证。就怕有错误的地方误导各位读者。
今天看看如何用移动指针的方法来实现LED的闪烁
在程序中我已经进行了详细标注
#include <reg51.h>
unsigned char code x[]={1,0,1,0,1,0,1,0};//指针在数组中移位,依次指向各个数组元素,用1或0控制亮灭
unsigned char *p=x;//数组名即数组首地址,将数组的首地址赋值给指针变量p,这样p指向数组的第一个元素x[0],即1
sbit led=P1^0;
void delayms(unsigned int x)
{
unsigned char t;
while(x--)
{
for(t=0;t<120;t++);
}
}
void main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++)
{
led=*(p+i);//精华部分在这里!不断的对地址加1,刚开始p+i(0)指向数组的第一个元素,即1。
//在for循环中,i不断增加。p+i(1)指向数组的第二的元素,即0。
//p+i(2)指向数组的第三个元素,即1。如此反复下去。注意:(p+i)代表各个元素的地址
//并且用*运算符取出地址对应的数组元素。
delayms(500);
}
}
}
最近看了关于指针的C语言书籍,但是关于指针在单片机中应用的例子没有
所以自己写了一段,供大家参考学习。
例程我已经在自己的开发板上验证。就怕有错误的地方误导各位读者。
今天看看如何用移动指针的方法来实现LED的闪烁
在程序中我已经进行了详细标注
#include <reg51.h>
unsigned char code x[]={1,0,1,0,1,0,1,0};//指针在数组中移位,依次指向各个数组元素,用1或0控制亮灭
unsigned char *p=x;//数组名即数组首地址,将数组的首地址赋值给指针变量p,这样p指向数组的第一个元素x[0],即1
sbit led=P1^0;
void delayms(unsigned int x)
{
unsigned char t;
while(x--)
{
for(t=0;t<120;t++);
}
}
void main()
{
unsigned char i;
while(1)
{
for(i=0;i<8;i++)
{
led=*(p+i);//精华部分在这里!不断的对地址加1,刚开始p+i(0)指向数组的第一个元素,即1。
//在for循环中,i不断增加。p+i(1)指向数组的第二的元素,即0。
//p+i(2)指向数组的第三个元素,即1。如此反复下去。注意:(p+i)代表各个元素的地址
//并且用*运算符取出地址对应的数组元素。
delayms(500);
}
}
}
谢谢小编资料分享。
8位单片机的间址(indirect)和变址(index)指令和寄存器少得可怜,比如51只支持间址,也只有2个间址寄存器R0和R1,所以用从基本的指令结构上就不适合用指针。我测试过,大量使用指针程序反而会导致程序变大变慢,这跟从8086开始的处理器上面结果是相反的。所以8位单片机我从来不用指针。等到你开始用32位单片机的时候再用指针也来得及。
小伙子,你可以的