• 头文件里应该写些什么


    1、输入输出接口函数声明如extern void InitLcd1602();

    2、全局变量声明

    3、声明自定义数据类型:结构体,枚举体

    typedef  signed    char    int8;  
    main.h

    #ifndef _MAIN_H
    #define _MAIN_H enum eStaSystem { E_NORMAL, E_SET_TIME, E_SET_ALARM }; #ifndef _MAIN_C extern enum eStaSystem staSystem; #endif void RefreshTemp(uint8 ops); void ConfigTimer0(uint16 ms); #endif

    main.c

    #define
    _MAIN_C#include
    "config.h" #include "Lcd1602.h" #include "LedBuzzer.h" #include "keyboard.h" #include "DS1302.h" #include "DS18B20.h" #include "Infrared.h" #include "Time.h" #include "main.h" bit flag2s = 0; bit flag200ms = 0; uint8 T0RH = 0; uint8 T0RL = 0; enum eStaSystem staSystem = E_NORMAL; //ϵͳÔËÐÐ״̬ void main() {
    //通用头文件,每个.c都引用
    #ifndef _CONFIG_H
    #define _CONFIG_H
    
    /* ͨÓÃÍ·Îļþ */
    #include <reg52.h>
    #include <intrins.h>
    
    /* Êý¾ÝÀàÐͶ¨Òå */
    typedef  signed    char    int8;    // 8λÓзûºÅÕûÐÍÊý
    typedef  signed    int     int16;   //16λÓзûºÅÕûÐÍÊý
    typedef  signed    long    int32;   //32λÓзûºÅÕûÐÍÊý
    typedef  unsigned  char    uint8;   // 8λÎÞ·ûºÅÕûÐÍÊý
    typedef  unsigned  int     uint16;  //16λÎÞ·ûºÅÕûÐÍÊý
    typedef  unsigned  long    uint32;  //32λÎÞ·ûºÅÕûÐÍÊý
    
    /* È«¾ÖÔËÐвÎÊý¶¨Òå */
    #define SYS_MCLK   (11059200/12)  //ϵͳÖ÷ʱÖÓƵÂÊ£¬¼´Õñµ´Æ÷ƵÂÊ¡Â12
    
    /* IOÒý½Å·ÖÅ䶨Òå */
    sbit KEY_IN_1  = P2^4;  //¾ØÕó°´¼üµÄɨÃèÊäÈëÒý½Å1
    sbit KEY_IN_2  = P2^5;  //¾ØÕó°´¼üµÄɨÃèÊäÈëÒý½Å2
    sbit KEY_IN_3  = P2^6;  //¾ØÕó°´¼üµÄɨÃèÊäÈëÒý½Å3
    sbit KEY_IN_4  = P2^7;  //¾ØÕó°´¼üµÄɨÃèÊäÈëÒý½Å4
    sbit KEY_OUT_1 = P2^3;  //¾ØÕó°´¼üµÄɨÃèÊä³öÒý½Å1
    sbit KEY_OUT_2 = P2^2;  //¾ØÕó°´¼üµÄɨÃèÊä³öÒý½Å2
    sbit KEY_OUT_3 = P2^1;  //¾ØÕó°´¼üµÄɨÃèÊä³öÒý½Å3
    sbit KEY_OUT_4 = P2^0;  //¾ØÕó°´¼üµÄɨÃèÊä³öÒý½Å4
    
    sbit ADDR0 = P1^0;  //LEDλѡÒëÂëµØÖ·Òý½Å0
    sbit ADDR1 = P1^1;  //LEDλѡÒëÂëµØÖ·Òý½Å1
    sbit ADDR2 = P1^2;  //LEDλѡÒëÂëµØÖ·Òý½Å2
    sbit ADDR3 = P1^3;  //LEDλѡÒëÂëµØÖ·Òý½Å3
    sbit ENLED = P1^4;  //LEDÏÔʾ²¿¼þµÄ×ÜʹÄÜÒý½Å
    
    #define LCD1602_DB  P0   //1602Òº¾§Êý¾Ý¶Ë¿Ú
    sbit LCD1602_RS = P1^0;  //1602Òº¾§Ö¸Áî/Êý¾ÝÑ¡ÔñÒý½Å
    sbit LCD1602_RW = P1^1;  //1602Òº¾§¶ÁдÒý½Å
    sbit LCD1602_E  = P1^5;  //1602Òº¾§Ê¹ÄÜÒý½Å
    
    sbit DS1302_CE = P1^7;  //DS1302ƬѡÒý½Å
    sbit DS1302_CK = P3^5;  //DS1302ͨÐÅʱÖÓÒý½Å
    sbit DS1302_IO = P3^4;  //DS1302ͨÐÅÊý¾ÝÒý½Å
    
    sbit I2C_SCL = P3^7;  //I2C×ÜÏßʱÖÓÒý½Å
    sbit I2C_SDA = P3^6;  //I2C×ÜÏßÊý¾ÝÒý½Å
    
    sbit BUZZER = P1^6;  //·äÃùÆ÷¿ØÖÆÒý½Å
    
    sbit IO_18B20 = P3^2;  //DS18B20ͨÐÅÒý½Å
    
    sbit IR_INPUT = P3^3;  //ºìÍâ½ÓÊÕÒý½Å
    
    
    #endif

    ——程序引自金沙滩工作室

     

    有人讲过:

    “我们又如何区分全局变量哪个是定义声明,哪个是引用声明呢?这个比函数要复杂一些, 一般在C语言中有如下几种模型来区分:

    1、 初始化语句模型

    顶层声明中,存在初始化语句是,表示这个声明是定义声明,其他声明是引用声明。C语言的所有文件之中,只能有一个定义声明。

    按照这个模型,我们可以在first.h中定义如下TPYE G_test=1;那么就确定在first中的是定义声明,在其他的所有声明都是引用声明。

    2 省略存储类型说明

    在这个模型中,所有引用声明要显示的包括存储类extern 而每个外部变量的唯一定义声明中省略存储类说明符。”——引用博主流窜的风http://www.cnblogs.com/light-wind/archive/2012/11/25/c_1.html

  • 相关阅读:
    dijkstra最短路算法--模板
    k8s ansible自动化部署
    k8s persistenvolume 动态供给
    k8s 1.12二进制部署
    k8s 1.14.1 coredns部署
    django单表操作,增、删、改、查
    数据库基础
    TCP/IP协议 socket
    面向对象的程序设计
    模块
  • 原文地址:https://www.cnblogs.com/yifan2015/p/5143021.html
Copyright © 2020-2023  润新知