⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.h

📁 单片机开发的一个完整性
💻 H
字号:
#ifndef __CONFIG_H__
#define __CONFIG_H__


/********************************/
/*     "以下为系统配置"         */
/********************************/
#include <regx51.h>
#include <string.h>
#include <intrins.h>


#include "ir.h"
#include "lcd1602.h"
#include "ds18b20.h"

#define RELAY     P3_5        // 继电器1引脚
#define FELAY     P3_6        // 继电器2引脚
#define F_LED     P2_3        // 继电器2工作指示灯
#define Y_LED     P2_4        // 继电器1工作指示灯
#define C_LED     P2_5        // 定时控制指示灯
#define D_LED     P2_6        // 整点报时指示灯
#define W_LED     P2_7        // 时钟工作指示灯

#define K1        P1_0        // 当前时间的设置与结束
#define K2        P1_1        // 整点报时开关/小时加1
#define K3        P1_2        // 闹铃控制开关/分钟加1
#define K4        P1_3        // 闹铃时间的设置与结束
#define K5        P1_4        // 手动控制继电器1
#define K6        P1_5        // 手动控制继电器2

uchar  hour,min,sec;          // 当前时间寄存器
uchar  armhour,armmin,armsec; // 控制时间寄存器
uchar  con_1s;                // 时间计数器

uchar  data Time[8]={0x30,0x30,0x3a,0x30,0x30,0x3a,0x30,0x30}; // 显示时间暂存

void turn_on_information(void);//开机信息信息

// 时间控制部分
void TimeOut(void);//到点工作
void O_clock(void);//整点报时
void Scan(bit mark,bit line,uchar arr[]);//显示
//  手动控制部分函数
void Keyscan(void);           // 手动按键扫描
void Set_time(void);          // 手动设置当前时间
void Set_ctrltime(void);      // 手动设置控制时间
//  遥控部分函数
void Telecontrol(void);       // 遥控按键扫描
void Tele_Set_time(void);     // 遥控设置当前时间
void Tele_Set_ctrltime(void); // 遥控设置控制时间

//  密码锁部分函数
void Coded_lock(void);



/***************************************************** 
 函 数 名:void Clearmen(void)
 功    能:系统初始化
 说    明:对系统引脚变量及中断进行初始化
 入口参数:无
 返 回 值:无 
 *****************************************************/
void Clearmen(void)
{
    //*****************  中断初始化  *****************

// 中断允许寄存器IE 
/*----------------------------------------------------
  | D7 | D6 | D5  | D4 | D3  | D2  | D1  | D0  |
  - - - - - - - - - - - - - - - - - - - - - - - -
  | EA |    | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
-----------------------------------------------------*/
    IE  = 0x00;                        // "清除中断"
    EX0 = 0;                           // 0"外部中断0允许"
    ET0 = 1;                           // 1"定时器0中断允许"
    EX1 = 0;                           // 2"外部中断1允许"
    ET1 = 0;                           // 3"定时器1中断允许"
    ES  = 0;                           // 4"串行中断允许"
    ET2 = 0;                           // 5"定时器2中断允许"-52才有
	EA  = 1;                           // "中断总允许"

// 中断优先级管理寄存器IP
/*----------------------------------------------------
  | D7 | D6 | D5  | D4 | D3  | D2  | D1  | D0  |
  - - - - - - - - - - - - - - - - - - - - - - - -
  |    |    | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
-----------------------------------------------------*/
    IP  = 0x00;                        // "清除中断优先级"
    PS  = 0;                           // "串行中断优先"
    PX0 = 0;                           // "外部中断0"
    PT0 = 1;                           // "定时器中断0"
    PX1 = 0;                           // "外部中断1"
    PT1 = 0;                           // "定时器中断1"

// 定时器控制寄存器TCON 
/*----------------------------------------------------
  |  D7 |  D6 |  D5 |  D4 |  D3 | D2  | D1  | D0  |
  - - - - - - - - - - - - - - - - - - - - - - - -
  | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 
  - - - - - - - - - - - - - - - - - - - - - - - -
  |      用于定时器       |      用于外中断       |
-----------------------------------------------------*/
    TCON = 0x00;
	IT0 = 0;                          // "外部中断0触发方式 0=电平 1=边沿"
	IE0 = 0;                          // "外部中断0申请标志"
	IT1 = 0;                          // "外部中断1触发方式 0=电平 1=边沿"
	IE1 = 0;                          // "外部中断1申请标志"
	TR0 = 0;                          // "T0运行控制"
    TF0 = 0;                          // "T0溢出标志"
	TR1 = 0;                          // "T1运行控制"
    TF1 = 0;                          // "T1溢出标志"
   
// 定时器模式控制寄存器TMOD            
/*----------------------------------------------------
  | D7 | D6 | D5  | D4 | D3  | D2  | D1  | D0  |
  - - - - - - - - - - - - - - - - - - - - - - - -
  |GATE| C/T| M0  | M1 |GATE | C/T | M0  | M1  | 
  - - - - - - - - - - - - - - - - - - - - - - - -
  |   高4位用于T1      |     低4位用于T0"      |
-----------------------------------------------------*/
    TMOD=0x01;                        // 定时器T0、T1为16位定时模式1

	TH0=0x3C;TL0=0xB0;                // 定时器0赋初值

//*****************  变量及引脚初始化  **********************************
    hour=0; min=0; sec=0;             // 当前时间初始化
	armhour=0;armmin=0;armsec=0;      // 控制时间初始化
	IRIN=1;	BEEP=1;	RELAY=1; FELAY=1;
	W_LED=1;D_LED=1;C_LED=1;          // 指示灯初始化
    F_LED=1;Y_LED=1;

	Adjust_Res(0x5f);                 // 调整18B20的分辨率 0x1f:0.5; 0x3f:0.25; 0x5f:0.125
}

/***************************************************** 
 函 数 名:void Delay_50us(uint t)
 功    能:延时函数
 说    明:系统用延时
 入口参数:无
 返 回 值:无 
 *****************************************************/
void Delay_50us(uint t)
{
 uchar j;  
 for(;t>0;t--)   
  for(j=19;j>0;j--) 
   ;
}

/***************************************************** 
 函 数 名:void Work_led(uchar count)
 功    能:工作指示灯闪烁提示
 说    明:闪烁以提示工作状态
 入口参数:无
 返 回 值:无 
 *****************************************************/
Work_led(uchar count)
{
 while(count--)
 {
   W_LED=~W_LED;     //工作灯取反
   Delay_50us(3000); 
 }
   C_LED=1;
}

/***************************************************** 
 函 数 名:void turn_on_information(void)
 功    能:开机显示信息
 说    明:第1行显示作者名;第2行动态显示制作日期
 入口参数:无 
 返 回 值:无  
 *****************************************************/
uchar code string[]="       2008-1-20";  
void turn_on_information(void)
{
  uchar num=30;
  uchar *cp;
  cp=string; 
  do 
  {
    WriteCommandLCM(0x01,1);               // 显示清屏
    Delay_50us(100);
	DisplayListChar(0,0,"zhao jun");
    DisplayListChar(0,1,cp);
    Delay_50us(7000);
	switch(num)                           // 指示灯测试
	{
      case 30:W_LED=0;break;
      case 29:D_LED=0;break;
	  case 28:C_LED=0;break;
	  case 27:Y_LED=0;break;
	  case 26:F_LED=0;break;
	  case 25:W_LED=1;break;
	  case 24:D_LED=1;break;
	  case 23:C_LED=1;break;
	  case 22:Y_LED=1;break;
	  case 21:F_LED=1;break;
	  case 20:W_LED=0;Delay_50us(3000);W_LED=1;break;
	  case 19:D_LED=0;Delay_50us(3000);D_LED=1;break;
	  case 18:C_LED=0;Delay_50us(3000);C_LED=1;break;
	  case 17:Y_LED=0;Delay_50us(3000);Y_LED=1;break;
	  case 16:F_LED=0;Delay_50us(3000);F_LED=1;break;
	  case 15:F_LED=0;Delay_50us(3000);F_LED=1;break;
	  case 14:Y_LED=0;Delay_50us(3000);Y_LED=1;break;
	  case 13:C_LED=0;Delay_50us(3000);C_LED=1;break;
	  case 12:D_LED=0;Delay_50us(3000);D_LED=1;break;
	  case 11:W_LED=0;Delay_50us(3000);W_LED=1;break;
	  case 10:W_LED=0;D_LED=1;C_LED=0;Y_LED=1;F_LED=0;break;
	  case 9:W_LED=1;D_LED=0;C_LED=1;Y_LED=0;F_LED=1;break;
	  case 8:W_LED=0;D_LED=1;C_LED=0;Y_LED=1;F_LED=0;break;
	  case 7:W_LED=1;D_LED=0;C_LED=1;Y_LED=0;F_LED=1;break;
	  case 6:W_LED=0;D_LED=0;C_LED=0;Y_LED=0;F_LED=0;break;
	  case 5:W_LED=1;D_LED=1;C_LED=1;Y_LED=1;F_LED=1;break;
	  case 4:W_LED=0;D_LED=0;C_LED=0;Y_LED=0;F_LED=0;break;
	  case 3:W_LED=1;D_LED=1;C_LED=1;Y_LED=1;F_LED=1;break;
	  case 2:W_LED=0;D_LED=0;C_LED=0;Y_LED=0;F_LED=0;break;
	  case 1:W_LED=1;D_LED=1;C_LED=1;Y_LED=1;F_LED=1;break;
	  default:break;
	}
    cp++;
    if(*cp=='\0')
    {
      cp=string;                           // 到达字符的尾部时,改变指针,重新指向字符串的头部
    }
  }while(num--);
  WriteCommandLCM(0x01,1);                 // 显示清屏
}

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -