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

📄 main.c

📁 用超声波来测量距离
💻 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 + -