📄 main.c
字号:
#include "avr/io.h"
#include "avr/interrupt.h"
//#include "util/delay.h"
#include "CPU.h"
#include "MyBit.h"
const unsigned char DataString[]="0123456789";
unsigned char RE_OK = 1;
unsigned char WORDFLAG = 4;
#include "RT12864.c"
#include "DS18B20.c"
#include "chaoshengbo.c"
#include "RedRec.c"
#include "4002.c"
/**********************************************
//任务0 读温度 显示温度
**********************************************/
void Task0(void)
{
dispstr_12864(0,0,"温度: ℃");
dispstr_12864(0,1,"测距: 米");
while(1)
{
Read_DS18B20();
display_DS18B20(3,0);//显示温度
if(RE_OK)Distance();
OSTimeDly(350);
}
}
/**********************************************
//任务1 语音测距
**********************************************/
void Task1(void)
{
//OSTaskSuspend(1);//语言报测距任务睡眠
while(1)
{
OSTimeDly(800);
PlayDistance();
dispstr_12864(0,2," ");
}
}
/***********************************
** 任务2
** 红外接收数据处理
***********************************/
void Task2(void)
{
unsigned char key[3];
dispstr_12864(0,3,"语音开");
dispstr_12864(4,3,"测距开");
while(1)
{
OSTaskSuspend(2);//挂起自己
key[0]=DataString[REKEY/10];
key[1]=DataString[REKEY%10];
dispstr_12864(0,2,key);
if(REKEY == 13)
{
OSTaskSuspend(1);//语言报测距任务睡眠
stop_4002();
dispstr_12864(0,3,"语音关");
dispstr_12864(0,2," ");
}
if(REKEY == 12)
{
OSTaskResume(1);//唤醒语言报测距任务
dispstr_12864(0,3,"语音开");
}
if(REKEY == 14)
{
RE_OK = 1;
dispstr_12864(4,3,"测距开");
}
if(REKEY == 15)
{
RE_OK = 0;
dispstr_12864(4,3,"测距关");
}
if(REKEY == 0)
{
Wucha ++;
if(Wucha ==13)
{
Wucha = 7;
}
}
}
}
/******************************************
//任务3 显示安全距离 保持距离 危险距离
******************************************/
void Task3(void)
{
while(1)
{
OSTimeDly(500);
switch(WORDFLAG)
{
case 0:dispstr_12864(4,2,"安全距离");break;
case 1:dispstr_12864(4,2,"合适距离");break;
case 2:dispstr_12864(4,2,"保持距离");break;
case 3:dispstr_12864(4,2,"危险距离");break;
default:break;
}
WORDFLAG = 4;
}
}
/******************************************
//任务4 空任务
******************************************/
void TaskScheduler(void)
{
OSSched();
while(1)
{
}
}
/*****************************************
//主函数
*****************************************/
int main(void)
{
Init_12864(); //初始化液晶12864
TCN0Init(); //初始化时钟节拍
int_interr1();//初始化外中断1 红外接收部分
DDRA = 0xff;
RD7 = 1;
OD7 = 0;
RD2 = 0;
OSRdyTbl=0;
IntNum=0;
OSTaskCreate(Task0,&Stack[79],0);
OSTaskCreate(Task1,&Stack[159],1);
OSTaskCreate(Task2,&Stack[239],2);
OSTaskCreate(Task3,&Stack[319],3);
OSTaskCreate(TaskScheduler,&Stack[399],OS_TASKS);
OSStartTask();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -