请选择 进入手机版 | 继续访问电脑版

普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2715|回复: 2

指针与数组

 关闭 [复制链接]

15

主题

196

帖子

503

积分

高级会员

Rank: 4

积分
503
发表于 2017-9-24 15:43:17 | 显示全部楼层 |阅读模式
花样流水灯#include<reg51.h>
/*************************************************
函数功能:延时约150ms (3*200*250=150 000μs=150ms
*************************************************/
void delay150ms(void)
{
  unsigned char m,n;
  for(m=0;m<200;m++)
    for(n=0;n<250;n++)
           ;
}
/*************************************************
函数功能:主函数
*************************************************/
void main(void)
{  
     unsigned char i;     
     unsigned char Tab[ ]=
     {
          0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,
          0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,
          0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
          0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81,
          0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB
     };
     //流水灯控制码
     unsigned char *p;   //定义无符号字符型指针
     p=Tab;              //将数组首地址存入指针p
     while(1)
     {
          for(i=0;i<32;i++) //共32个流水灯控制码
          {
               P1=*(p+i);     //*(p+i)的值等于a[i]
               delay150ms();  //调用150ms延时函数
               delay150ms();  //调用150ms延时函数
          }
     }
}

回复

使用道具 举报

15

主题

196

帖子

503

积分

高级会员

Rank: 4

积分
503
 楼主| 发表于 2017-9-24 15:52:26 | 显示全部楼层
关于指针,看看这三句:
1  unsigned char *p;   //定义无符号字符型指针
2 p=Tab;              //将数组首地址存入指针p
3 P1=*(p+i);     //*(p+i)的值等于a[i]
1 P是一个指针变量,指向的是一个地址,至于这个地址里面存放的是什么内容,不管
2 将数组Tab在内存中的首地址赋值给P,就像一个班级人,按学号包下房间301~340,1号住301,其余的童鞋也就知道了!注意,数组在内存中是连续存放,否则也就没有指针了!
3 P1=*(p+i),类似上面,310房间住的是谁,知道了吧,学号10号
回复 支持 反对

使用道具 举报

15

主题

196

帖子

503

积分

高级会员

Rank: 4

积分
503
 楼主| 发表于 2017-9-24 15:54:57 | 显示全部楼层
直接用数组下标处理上面例子:
花样流水灯#include<reg51.h>
/*************************************************
函数功能:延时约150ms (3*200*250=150 000μs=150ms
*************************************************/
void delay150ms(void)
{
  unsigned char m,n;
  for(m=0;m<200;m++)
    for(n=0;n<250;n++)
           ;
}
/*************************************************
函数功能:主函数
*************************************************/
void main(void)
{  
     unsigned char i;     
     unsigned char Tab[ ]=
     {
          0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,
          0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,
          0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
          0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81,
          0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB
     };
     //流水灯控制码
     while(1)
     {
          for(i=0;i<32;i++) //共32个流水灯控制码
          {
               P1=Tab[i];     
               delay150ms();  //调用150ms延时函数
               delay150ms();  //调用150ms延时函数
          }
     }
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-3-28 16:32 , Processed in 0.086083 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表