C51入门之跑马灯

  • 跑马灯

  • 使用protues仿真图如下 

  • 延时函数实现 

span style=”color:#000000;”>使用硬延时空等待来实现达到延时的目的

   注意:实现产品软件开发中,不建议使用硬延时,使用硬延时会降低产品的实时性

实现方法:

 1. 写一个函数,带一个形参,延时值由其传入函数

2.函数体内由2for循环组成

3.由分 语句实现空等待操作 

       延时值,可以通过调整循环体变量j所赋的初值

  • IO口定义声明

span style=”color:#000000;”>P0,P1,P2,P3这四组IO口都是由特殊功能声明寄存器进行声明定义的。

reg52.h头文件中对4IO口进行了定义声明

  1. sfr P0    = 0x80; // 将符 P0与功能寄存器地址0x80关联
  2. sfr P1    = 0x90; // 将符 P1与功能寄存器地址0x90关联
  3. sfr P2    = 0xA0; // 将符 P2与功能寄存器地址0xA0关联
  4. sfr P3    = 0xB0; // 将符 P3与功能寄存器地址0xB0关联

对符 P0,P1,P2,P3操作,相当于是对功能寄存器地址0x80,0x90,0xA0,0xB0操作 

span style=”color:#000000;”>sfrC51内核MCUkeil编译环境定义功能寄存器特有的关键字

span style=”color:#000000;”>因此,使用sfr可以自己重新对功能寄存器赋于新的符 ,例如将P0口重新定义符 为PORT0,

    那么使用sfr定义如下:

   sfr PORT0 = 0x80;

 

   定义后,可以使用PORT0这个符 操作IOP0

   应的引脚,如果将P0.01个引脚输出低,其余输出高,则:

                       PORT0 = 0xfe;    // 1111 1110

 

  • 跑马灯代码输入 

#include <reg52.h>  //引用单片机头文件

void main(void)    //主函数,程序的入口

  while(1)   //无限循环

  { 

  }

}

1.操作单片机首先要引入与MCU相关的头文件

2.C语言的程序入口是main函数

3.  while(1)大循环实现单片机的轮循工作结构

span style=”color:#000000;”>选点亮P0.0上的LED,根据线路接法,将此脚置低即可点亮,则:

span style=”color:#000000;”>P0 = 0xfe;

#include <reg52.h>  //引用单片机头文件

void main(void)    //主函数,程序的入口

  while(1)   //无限循环

  {

  P0 = 0xfe;

  }

}

1.点亮后需要延时一段时间才能点另一个LED,这样才能看出灯亮灭的过程,如果不延时,人眼无法区分

2.采用2for循环实现延时功能

现在来使用跑马灯流动时序,main函数while循环中,编写代码

生成的HEX档可以加载到最上面的protues中运行仿真,也可以烧到实体开发板中,以下为STC90C516RD+ 为例

接好开发板后,双击stc-isp-15xx-v6.85I.exe打开烧录工具,选择STC90C516RD+ 

span style=”color:#000000;”>由于跑马灯是有规律的,因此可以对上面的代码进行优化,使用一个循环来实现

这里采用for来实现,8LED循环8,循环框架如下 

span style=”color:#000000;”>现将8组点亮数值做成一张table表,用一维数组实现,将表存在程序表中,用code关键字来修饰,这个关键字是C51keil编译

环境 中特有的。定义数组如下: 

  在for循环中约每1秒查询一次led_table的值,取出赋给P0寄存器。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年9月10日
下一篇 2019年9月11日

相关推荐