📄 mc33993.h
字号:
//////
sys_data_type SP_status,SGH_status,SGL_status;
sys_data_type mc993_status_flag;
sys_data_type back_status_flag;
/////
unsigned char xjql_timer_count=0; //小计清零有效计数>1.5s=110ms*14
unsigned char bgtz_timer_count=0; //背光调整计数
unsigned char bgtz_1_timer; //有效显示时间(2<->12)/13
unsigned char bgtz_cyc; //背光调节周期计数器=13
//周期为13个时基中断,2<->12
unsigned char sjtz_timer_count=0; //按健时间长短计数(闭合时间)
unsigned char sjtz_timer_out=0; //无按键时间>200*100ms=20s则退出
#define xjql_b_flag mc993_status_flag.Bit.BIT6 //小计清零/1=按钮有效
#define light_first_on back_status_flag.Bit.BIT0
#define bgtz_oth_flag back_status_flag.Bit.BIT1 //中间变化
#define modify_time_flag mc993_status_flag.Bit.BIT5 //1=进入调时模式/0=退出调时
#define timer_button_change back_status_flag.Bit.BIT7 //1=时间调整按钮有变化
#define timer_bit_change back_status_flag.Bit.BIT6 //时间4位转换
#define timer_add_change back_status_flag.Bit.BIT5 //时间数值加一
//以上按钮变量
#define mc993_cs PTD_PTD4
#define mc993_ready_flag mc993_status_flag.Bit.BIT0 //mc993已读新状态准备好=1
#define warn_wakeup_flag mc993_status_flag.Bit.BIT7 //紧急状态标志
unsigned char turn_timer_count=0; //转向灯闪烁时间控制
/////////////////////////////////////////////
//mc33993的SPI读写
void mc993_oper(unsigned char mc993comm,unsigned char mc993dat1,unsigned char mc993dat2){
mc993_cs=0;
SPDR=mc993comm;
while((SPSCR&0x80)==0);
SP_status.Byte=SPDR;
SPDR=mc993dat1;
while((SPSCR&0x80)==0);
SGH_status.Byte=SPDR;
SPDR=mc993dat2;
while((SPSCR&0x80)==0);
SGL_status.Byte=SPDR;
mc993_cs=1;
SP_status.Byte=SP_status.Byte<<2;
SP_status.Bit.BIT0=SGH_status.Bit.BIT6;
SP_status.Bit.BIT1=SGH_status.Bit.BIT7;
SGH_status.Bit.BIT6=0;
SGH_status.Bit.BIT7=0;
//SP_status: SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0
//SGH_status: NC NC SG13 SG12 SG11 SG10 SG9 SG8
//SGL_status: SG7 SG6 SG5 SG4 SG3 SG2 SG1 SG0
asm(nop);
__RESET_WATCHDOG();
}
//mc33993初始化
void inti_mc33993(void){
mc993_oper(0x7f,0x00,0x00);
delay(20);//复位
mc993_oper(0x01,0x00,0xff);
//寄存器名:可设计开关寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 0 0 0 1 X X X X X X X X sp7sp6sp5sp4sp3sp2sp1sp0
//赋值: 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
//说明:使用该寄存器设置sp7-sp0端口开关属性(16-23为地址位,该地址为可编程开关寄存器地址。8-15为任意位,可加入0或1任意值不影响使用。
// 0-7为状态数据,此时1为SPn8路模拟输入开关相应端口接电源,0为SPn8路模拟输入开关相应端口接地
mc993_oper(0x02,0x00,0xff);
mc993_oper(0x03,0x3f,0xff);
//寄存器名:唤醒/中断寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 0 0 1 0 X X X X X X X X sp7sp6sp5sp4sp3sp2sp1sp0
//赋值: 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
//说明:使用该寄存器设置sp7-sp0端口唤醒/中断(16-23为地址位,该地址为唤醒/中断寄存器地址。8-15为任意位,可加入0或1任意值不影响使用。
// 0-7为状态数据,此时1为相应端口使能端口唤醒中断,0为相应端口屏蔽唤醒中断
//位定义: 0 0 0 0 0 0 1 1 X X sg13sg12sg11sg10sg9sg8sg7sg6sg5sg4sg3sg2sg1sg0
//赋值: 0 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
//说明:使用该寄存器设置sg13-sg0端口唤醒/中断(16-23为地址位,该地址为唤醒/中断寄存器地址。14-15为任意位,可加入0或1任意值不影响使用。
// 0-13为状态数据,此时1为相应端口使能端口唤醒中断,0为相应端口屏蔽使唤醒中断
mc993_oper(0x04,0x00,0xff);
mc993_oper(0x05,0x3f,0xff);
//寄存器名:湿变电流寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 0 1 0 0 X X X X X X X X sp7sp6sp5sp4sp3sp2sp1sp0
//赋值: 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
//说明:使用该寄存器设置sp7-sp0端口湿变电流(16-23为地址位,该地址为湿变电流寄存器地址。8-15为任意位,可加入0或1任意值不影响使用。
// 0-7为状态数据,此时1为相应端口16mA 湿变电流,0为相应端口2.0 mA湿变电流,推荐使用16mA 湿变电流
//位定义: 0 0 0 0 0 1 0 1 X X sg13sg12sg11sg10sg9sg8sg7sg6sg5sg4sg3sg2sg1sg0
//赋值: 0 0 0 0 0 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
//说明:使用该寄存器设置sg13-sg0端口湿变电流(16-23为地址位,该地址为湿变电流寄存器地址。14-15为任意位,可加入0或1任意值不影响使用。
// 0-13为状态数据,此时1为相应端口16mA 湿变电流,0为相应端口2.0 mA湿变电流,推荐使用16mA 湿变电流
mc993_oper(0x07,0x00,0xff);
mc993_oper(0x08,0x3f,0xff);
//寄存器名:湿变时间寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 0 1 1 1 X X X X X X X X sp7sp6sp5sp4sp3sp2sp1sp0
//赋值: 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
//说明:使用该寄存器设置sp7-sp0端口湿变时间(16-23为地址位,该地址为湿变时间使能寄存器地址。8-15为任意位,可加入0或1任意值不影响使用。
// 0-7为状态数据,此时1为相应端口允许湿变电流,0为相应端口屏蔽湿变电流
//位定义: 0 0 0 0 1 0 0 0 X X sg13sg12sg11sg10sg9sg8sg7sg6sg5sg4sg3sg2sg1sg0
//赋值: 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1
//说明:使用该寄存器设置sg13-sg0端口湿变时间(16-23为地址位,该地址为湿变时间使能寄存器地址。14-15为任意位,可加入0或1任意值不影响使用。
// 0-13为状态数据,此时1为相应端口允许湿变电流,0为相应端口屏蔽湿变电流
mc993_oper(0x09,0x00,0xff);
mc993_oper(0x0a,0x3f,0xff);
//寄存器名:使能输出高阻抗寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 1 0 0 1 X X X X X X X X sp7sp6sp5sp4sp3sp2sp1sp0
//赋值: 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
//说明:使用该寄存器设置sp7-sp0端口输出靠阻抗(16-23为地址位,该地址为使能输出高阻抗寄存器地址。8-15为任意位,可加入0或1任意值不影响使用。
// 0-7为状态数据,此时0为相应端口屏蔽输出高阻抗,1为相应端口使能输出高阻抗
//位定义: 0 0 0 0 1 0 1 0 X X sg13sg12sg11sg10sg9sg8sg7sg6sg5sg4sg3sg2sg1sg0
//赋值: 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
//说明:使用该寄存器设置sg13-sg0端口输出靠阻抗(16-23为地址位,该地址为使能输出高阻抗寄存器地址。14-15为任意位,可加入0或1任意值不影响使用。
// 0-13为状态数据,此时0为相应端口屏蔽输出高阻抗,1为相应端口使能输出高阻抗
mc993_oper(0x06,0x00,0x40);
//寄存器名:电流比较寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 0 1 1 0 X X X X X X X X X 16mA 2.0mA 0 0 0 0 0
//赋值: 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
//说明:使用该寄存器设置各端口电流比较(16-23为地址位,该地址为电流比较寄存器地址。7-15为任意位,可加入0或1任意值不影响使用。
// 5-6为湿变电流允许值。0-4位决定使能某端口电流比较,下有详细说明
//00000 无任何输出比较 //00001 SG0端口 //00010 SG1端口
//00011 SG2端口 //00100 SG3端口 //00101 SG4端口
//00110 SG5端口 //00111 SG6端口 //01000 SG7端口
//01001 SG8端口 //01010 SG9端口 //01011 SG10端口
//01100 SG11端口 //01101 SG12端口 //01110 SG13端口
//01111 SP0端口 //10000 SP1端口 //10001 SP2端口
//10010 SP3端口 //10011 SP4端口 //10100 SP5端口
//10101 SP6端口 //10110 SP7端口
///变量初始化
//turn_l_flag=0;
//turn_r_flag=0; //左右转无效
//按钮状态和变量初始化
xjql_b_flag=0;
xjql_timer_count=0;
//
bgtz_timer_count=0; //背光初始化
//bgtz_max_flag=1;
//bgtz_min_flag=0;
bgtz_oth_flag=0;
//
modify_time_flag=0; //非调时状态
sjtz_timer_count=0;
sjtz_timer_out=0;
timer_button_change=0;
}
/////////////////////////
//MC33993时钟校准
void check_mc33993(void){
mc993_oper(0x0b,0x00,0x00);
//寄存器名:时钟校准寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 1 0 1 1 X X X X X X X X X X X X X X X X
//赋值: 0 0 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
//说明:使用该寄存器使能时钟校准(16-23为地址位,该地址为时钟校准寄存器地址。
// 0-15为任意位,可加入0或1任意值不影响使用。
}
/////////////////////////
//MC33993休眠
void sleep_mc33993(void){
mc993_oper(0x0c,0x00,0x38);
//寄存器名:使能休眠寄存器
//寄存器位:23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
//位定义: 0 0 0 0 1 1 0 0 X X X X X X X X X X 1 1 1 0 0 0
//赋值: 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0
//说明:使用该寄存器使能芯片休眠(16-23为地址位,该地址为使能休眠寄存器地址。
// 6-15为任意位,可加入0或1任意值不影响使用。0-5为中断唤醒时间设置,下有详细说明
//位定义: 5 4 3 中断唤醒时间
// 0 0 0 32 ms
// 0 0 1 64 ms
// 0 1 0 128 ms
// 0 1 1 256 ms
// 1 0 0 512 ms
// 1 0 1 1.024 s
// 1 1 0 2.048 s
// 1 1 1 4.096 s
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -