原创 匠人DIY旋转时钟全程实播(连载18:公共头文件源程序)

2008-3-5 22:50 3704 7 7 分类: MCU/ 嵌入式

相关连接:jhinfo.gif [匠人DIY旋转时钟 系列文章 (连载中…)]


//--------------------------------------------------------
// 项目:
// 模块:公共头文件
// 说明:常量/变量/IO口/定义
// 本工程中所有模块文件都枰帽疚募?lt;BR>// 设计:程序匠人(版权所有,引用者请保留原作者姓名)
//--------------------------------------------------------
/*
版本说明:
common.H 2005-07-23



*/
//--------------------------------------------------------



//--------------------------------------------------------
//插入文件包
//--------------------------------------------------------
#include 
//--------------------------------------------------------



#ifdef root
  #define EXT_ 
#else
 #define EXT_ extern
#endif
//--------------------------------------------------------
//重新命名数据类型
//--------------------------------------------------------
typedef unsigned char tU08;   //unsigned 8 bit definition
typedef unsigned char tU8;   //unsigned 8 bit definition
typedef unsigned int tU16;   //unsigned 16 bit definition
typedef unsigned long tU32;   //unsigned 32 bit definition


typedef signed char tS08;   //signed 8 bit definition
typedef signed char tS8;   //signed 8 bit definition
typedef signed int tS16;   //signed 16 bit definition
typedef signed long tS32;   //signed 32 bit definition


typedef float  tF24;
typedef double  tF24;


//=================
//位结构类型定义
//定义一个位结构,结构名=BIT_F
//=================
typedef struct  {
 unsigned b0 : 1;      //结构元素表
        unsigned b1 : 1;                               
        unsigned b2 : 1;                               
        unsigned b3 : 1;                               
        unsigned b4 : 1;                               
        unsigned b5 : 1;                               
        unsigned b6 : 1;                               
        unsigned b7 : 1;                               
} BIT_F;                 //定义一个只能按位寻址的变量类型  //结构类型


//=================
//联合定义
//定义一个联合,联合名=FLAG_union
//=================
typedef union {
 BIT_F  oneBit;  //按位寻址
 tU08 allBits; //按字节寻址
}FLAG_union;   //定义一个既能按位寻址,也可按字节寻址的联合变量类型  


 


//--------------------------------------------------------
//定义变量
//--------------------------------------------------------
//串口通讯
#define COMM_BUF_NUM    8    //通讯缓冲区大小
EXT_ tU08 bank1 COMM_BUF[COMM_BUF_NUM];   //通讯缓冲区(接收缓冲队列)
EXT_ tU08 bank1 COMM_PUT_PTR;              //接收数据存放指针(范围:0 ~ (COMM_BUF_NUM-1))
EXT_ tU08 bank1 COMM_GET_PTR;              //接收数据读取指针(范围:0 ~ (COMM_BUF_NUM-1))


//通讯命令字定义
#define COM_SET    0B11111110   //"设置"命令字
#define COM_CH    0B11111101   //"切换"命令字
#define COM_INC    0B11111011   //"递增"命令字
#define COM_DEC    0B11110111   //"递减"命令字


EXT_ tU08 NO_KEY_JSQ;                     //无按键计数器(每1S+1)


//显缓区
#define DISP_QUEUE_SUM 8    //待显示字符串队列长度
EXT_ tU08 DISP_QUEUE[DISP_QUEUE_SUM];   //待显示字符串队列


EXT_ bit DISP_QUEUE_FLAG;                    //显缓区(字符串队列)开启标志(0=未开启,1=开启)


//时间系统
EXT_ tU08 TIME_H;                     //时钟"时"(0~23)
EXT_ tU08 TIME_M;                     //时钟"分"(0~59)
EXT_ tU08 TIME_S;                     //时钟"秒"(0~59)
EXT_ tU08 TIME_MS;                     //时钟"毫秒"(0~99) (每过10ms,+1)
EXT_ tU08 TIME_US;                     //时钟"微秒"(0~179) (每过(250*0.222us)=55.556us,+1)


EXT_ bit MS_1HZ_FLAG;                     //秒闪标志(1HZ)
EXT_ bit T_10MS_FLAG;                     //10毫秒定时溢出标志(0=未溢出,1=溢出)


//闹钟系统
EXT_ tU08 TIMER_H;                     //闹钟"时"(0~23)
EXT_ tU08 TIMER_M;                     //闹钟"分"(0~59)
EXT_ tU08 SP_M;                     //闹铃时间设置值(0~99分)(说明:0=关闭闹钟)
EXT_ tU08 SP_RUN;                     //闹铃时间运行值(0~99分)


//工作模式
EXT_ bit MOTOR_ST_FLAG;     //电机状态标志(0=关闭,1=开启)
EXT_ bit SET_EN_FLAG;     //设置使能标志(0=禁止,1=使能)


EXT_ tU08 DISP_MODE;                   //显示状态(0~3)
EXT_ tU08 SET_MODE;                   //设置状态(0~5)
EXT_ tU08 MOTOR_STOP_JSQ;              //电机停转计时器


//温度系统
EXT_ tU08 TEMP;                     //当前温度(1~109=(实际温度-10))
EXT_ tU08 ADR_NEW;                     //最新AD结果


EXT_ bit TEMP_ERR_FLAG;                     //温度检测故障标志(0=正常,1=故障)
EXT_ bit TEMP_SCAN_EN_FLAG;                    //温度检测使能标志(0=禁止,1=使能)


EXT_ bit TEMP_LS_NEW_FLAG;                    //温度历史纪录队列更新使能标志(0=禁止,1=使能)(每小时更新一次)


#define TEMP_LB_QUEUE_SUM 10   //温度滤波队列长度
EXT_ tU08 bank1 TEMP_LB_QUEUE[TEMP_LB_QUEUE_SUM]; //温度滤波队列


#define TEMP_LS_QUEUE_SUM 24   //温度历史纪录队列长度
EXT_ tU08 bank1 TEMP_LS_QUEUE[TEMP_LS_QUEUE_SUM]; //温度历史纪录队列
EXT_ tU08 TEMP_LSPJ;                   //24小时历史平均温度


//附加功能
EXT_ bit FUN_ZDBS_FLAG;                    //整点报时标志(0=禁止,1=使能)


//显示扫描功能
EXT_ bit NEW_DISP_EN_FLAG;                    //显示刷新使能标志(0=禁止,1=使能)


EXT_ tU16 DISP_TIME_SET;    //单列显示时间设置值(赋值给TMR1H,TMR1L)



#ifdef root
 tU16 TMR1HL @ 0x0E ;    //重新定义TMR1HL(代替TMR1H,TMR1L)
#else
 extern tU16 TMR1HL ;    //重新定义TMR1HL(代替TMR1H,TMR1L)
#endif



EXT_ tU08 TIMR1_JSQ;     //TIMR1溢出计数器(TIMR1每次溢出+1,检测到过零信号后清零)
EXT_ tU08 DISP_LINE;     //显示列计数器(0~179)


EXT_ tU08 DISP_LINE_ADJ;    //显示列计数器 角度校正值(0~179) (用于校正盘面角度)


//指针定位
EXT_ tU08 H_LINE;                  //时针定位(0~179)
EXT_ tU08 M_LINE;                  //分针定位(0~179)
EXT_ tU08 S_LINE;                  //秒针定位(0~179)


EXT_ tU08 ZB_LINE;     //钟摆定位(65~115)


//IO口输出临时缓冲区
EXT_ FLAG_union PORTA_TEMP;    //PORTA 口输出临时缓冲区
EXT_ FLAG_union PORTB_TEMP;    //PORTB 口输出临时缓冲区
EXT_ FLAG_union PORTC_TEMP;    //PORTC 口输出临时缓冲区


#define PORTA_TMP PORTA_TEMP.allBits
#define PORTB_TMP PORTB_TEMP.allBits
#define PORTC_TMP PORTC_TEMP.allBits


#define LED00_TMP PORTC_TEMP.oneBit.b3
#define LED01_TMP PORTB_TEMP.oneBit.b1
#define LED06_TMP PORTB_TEMP.oneBit.b6
#define LED02_TMP PORTB_TEMP.oneBit.b2
#define LED03_TMP PORTB_TEMP.oneBit.b3
#define LED04_TMP PORTB_TEMP.oneBit.b4
#define LED05_TMP PORTB_TEMP.oneBit.b5
#define LED07_TMP PORTB_TEMP.oneBit.b7
#define LED08_TMP PORTA_TEMP.oneBit.b2
#define LED09_TMP PORTA_TEMP.oneBit.b3
#define LED10_TMP PORTA_TEMP.oneBit.b4
#define LED11_TMP PORTA_TEMP.oneBit.b5
#define LED12_TMP PORTC_TEMP.oneBit.b0
#define LED13_TMP PORTC_TEMP.oneBit.b1


//--------------------------------------------------------
//EEPROM地址分配
//--------------------------------------------------------
#define EEPROM_EN_ADR    0  //EEPROM格式化标志(0XA5=已经格式化,否则=未格式化)
#define DISP_LINE_ADJ_ADR    1  //显示列计数器 角度校正值(0~179) (用于校正盘面角度)
#define TIMER_H_ADR     2  //闹钟"时"(0~23)
#define TIMER_M_ADR     3  //闹钟"分"(0~59)
#define SP_M_ADR     4  //闹铃时间设置值(0~99分)(说明:0=关闭闹钟)


//EEPROM数据更新标志
EXT_ FLAG_union EEP_NEW_FLAGS;     //EEPROM数据更新标志寄存器 联合


#define EEPROM_NEW_FLAGS EEP_NEW_FLAGS.allBits  //EEPROM数据更新标志寄存器


#define EEPROM_EN_FLAG  EEP_NEW_FLAGS.oneBit.b0  //EEPROM格式化标志(0XA5=已经格式化,否则=未格式化)         
#define DISP_LINE_ADJ_FLAG EEP_NEW_FLAGS.oneBit.b1  //显示列计数器 角度校正值(0~179) (用于校正盘面角度)       
#define TIMER_H_FLAG  EEP_NEW_FLAGS.oneBit.b2  //闹钟"时"(0~23)                                          
#define TIMER_M_FLAG  EEP_NEW_FLAGS.oneBit.b3  //闹钟"分"(0~59)                                          
#define SP_M_FLAG  EEP_NEW_FLAGS.oneBit.b4  //闹铃时间设置值(0~99分)(说明:0=关闭闹钟)                 


EXT_ bit EEPROM_ERR_FLAG;                     //EPPROM写失败标志
EXT_ tU08 EEPROM_ERR_JSQ;                     //EPPROM写失败计数器



//--------------------------------------------------------
//插入文件包
//--------------------------------------------------------
#include "main.h"   //主程序 头文件
#include "display.h"   //显示处理 头文件
#include "filter.h"    //滤波处理 头文件
#include "temperature.h"   //温度处理 头文件
#include "Serial.h"   //串行通讯 头文件
#include "Interruption.h"  //中断服务 头文件
#include "eeprom.h"   //内部eeprom与FLASH操作 头文件


 


//--------------------------------------------------------
//
// THE END
//
// 版权所有:程序匠人(引用者请保留原作者姓名)
//
//--------------------------------------------------------

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条