微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > C语言指针在单片机编程中的基本应用-LED闪烁

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);
                }
        }
}

谢谢小编资料分享。

8位单片机的间址(indirect)和变址(index)指令和寄存器少得可怜,比如51只支持间址,也只有2个间址寄存器R0和R1,所以用从基本的指令结构上就不适合用指针。我测试过,大量使用指针程序反而会导致程序变大变慢,这跟从8086开始的处理器上面结果是相反的。所以8位单片机我从来不用指针。等到你开始用32位单片机的时候再用指针也来得及。

小伙子,你可以的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top