📄 config.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 + -