keil C51 以流水灯为例 mian.c ;led.c ;led.h 多文件编程

 

多文件编程可以大大提高程序代码移植率:以流水灯为例。我们需要创建三个文件 led.c ;led.h ;main.c;

1.led.c文件编写:


#include  "led.h"    // 这里包含 led.h 这个头文件
sbit ADDR0 = P2^0;
sbit ADDR1 = P2^1;
sbit ADDR2 = P2^2;
sbit ENLED = P1^1;
unsigned char cnt = 0; //定义计数变量 cnt,用于移位控制 

void delay690ms()        //@12.000MHz,延时约0.5s
{
    unsigned char i, j, k;
    _nop_();
    _nop_();
    i = 32;
    j = 119;
    k = 85;
    do
    {
        do
        {
            while (--k);
        } 
        while (--j);
    } 
    while (--i);
}
void led_move()
{     

  ENLED = 0;
  ADDR2 = 1;
  ADDR1 = 1;
  ADDR0 = 0; 
  P0 = ~(0x01 << cnt); //P0 等于 1 左移 cnt 位,控制 8 个 LED
  delay690ms(); //软件延时,约0.5s
  cnt++; //移位计数变量自加 1
  if (cnt > 7) //移位计数超过 7 后,再重新从 0 开始
  {
  cnt = 0;
  }   

}
2.led.h文件编写:


#ifndef LED_H             //理解为    if not define led.h
#define LED_H             //如果没有定义 led.h ,这里就定义一个 led.h 
#include "reg52.h"        //由于  led,c 里面要用到 51单片机寄存器    P1,
                                     // 所以这里包含    51 单片机的头文件
#include "intrins.h"        // 循环移位用到
#define    uchar unsigned char
#define    uint unsigned int    // 这些宏定义都可以在头文件 .h 里定义
void delay690ms();
void led_move();        // 将led.c 里的函数在led.h 里面申明
 #endif    // 定义结束

3.main.c文件编写:


#include "led.h"        //在  main.c 里现在包含的也是 led.h 而不是 reg52.h了
void main()
{

  while (1) //主循环,程序无限循环执行该循环体语句
 {
   led_move();
 }
}

注意一点
1、此时void led_move(); 是可以调用void delay690ms();函数的
2、cnt变量必须定义在led_move外,不然程序每次进入led_move就会重新定义为0,无法实现以为循环功能
 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值