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

📄 my_task_buzzer.c

📁 嵌入式SH7145开发板的蜂鸣器源代码
💻 C
字号:
#include <tk/tkernel.h>
#include <device/sdrvif.h>
#include <tk/util.h>
#include <stdio.h>

#include "buzzer.h"
#include "display.h"
#include "buzzerTone.h"



ER display_task_init(void);     					//显示初始化
EXPORT void Buzzer_task(INT stacd, VP exinf);		//蜂鸣器任务

ER g_delay = 3000;      //g_delay大小与乐曲延迟有关  延迟时间 = g_delay / melo_dly[i++]
ER g_buzdd;				//蜂鸣器设备ID					
ER g_scrdd;				//屏幕设备ID

B g_buff[128];

//乐曲的音符
LOCAL const UH melo[75] = 
	   {E3__N, D3__N, F3__N, E3__N, C3__N, A4__N, B4__N, C4__N,
		A4__N, G3__N, C3__N, C3__N, A4__N, A4__N, A4__N, G3__N,
		G3__N, G3__N, F3__N, E3__N, D3__N, E3__N, F3__N, E3__N,
		G3__N, A4__N, B4__N, G3__N, G3__N, A4__N, B4__N, D4__N,
		B4__N, C4__N, C4__N, C4__N, C4__N, G3__N, G3__N, A4__N,
		G3__N, F3__N, D3__N, E3__N, F3__N, G3__N, A4__N, F3__N,
		A4__N, B4__N, '.'};
		


//与乐曲音符的延迟有关   延迟时间 = g_delay / melo_dly[i++]
LOCAL const UB melo_dly[75] = 
	{	8, 8, 8, 4, 8, 8, 8, 8, 8, 8, 4, 8, 8, 4, 8, 8,
		4, 8, 8, 8, 8, 8, 8, 4,	8, 8, 8, 4, 8, 8, 8, 8,
		8, 8, 4, 8, 8, 8, 8, 8,	8, 8, 8, 8, 8, 8, 8, 8,
		8, 2, 0
	};



EXPORT void main(void)
{
	ER er;
	ER ercd;
	T_CTSK ctsk;
		
	//设备驱动注册
	er = Buzzer_drv(0, NULL);
	if (er < 0)
	{
		return;
	}
	er = screen_drv(0, NULL);
	if (er < 0)
	{
		return;
	}	
	//初始化LCD显示
	display_task_init();
	
	//任务创建
	memset(&ctsk, 0, sizeof(T_CTSK));
	ctsk.tskatr = TA_HLNG | TA_RNG0;
	ctsk.task = (FP)Buzzer_task;
	ctsk.itskpri = 4;
	ctsk.stksz = 1024 * 2;
	ctsk.sstksz = 1024 * 2;
	er = tk_cre_tsk((T_CTSK*)&ctsk);
	if (er < 0)
	{
#if TRG_DEBUG
		sprintf((B *)g_buff, "on_adc_task -> tk_cre_tsk() error [%#x]\n", er);
		tm_putstring(g_buff);
#endif
		return;
	}
	ercd = er;
	er = tk_sta_tsk(ercd, 0);						//任务开始
	if (er < 0)
	{
		tk_del_tsk(ercd);
		ercd = -1;
		
#if TRG_DEBUG
		sprintf((B *)g_buff, "on_adc_task -> tk_sta_tsk() error [%#x]\n", er);
		tm_putstring(g_buff);
#endif

	}
	//main task go to sleep forever never return
	tk_slp_tsk (TMO_FEVR);							//主程序任务休眠
	return;
}


ER display_task_init(void)						//初始化显示
{
	ER ercd;
	UB scrdev[] = {"SCREEN\0"};
	INT sz;
	LCD_DRAW test_disp;

	
	ercd = tk_opn_dev(scrdev, TD_UPDATE);                                //系统函数 任务打开
	if (ercd < 0)
	{
		sprintf((B *)g_buff, "tk_opn_dev() error [%#x]\n", ercd);
		tm_putstring(g_buff);
		goto EXIT_SCRINIT;
	}
	g_scrdd = ercd;

		ercd = tk_swri_dev(g_scrdd, DN_LCDCLEAR, (VP)NULL, 0, &sz);//清空屏幕	
		
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 0;
		test_disp.y = 0;
		test_disp.text_len = 17;
		sprintf((B *)test_disp.text, "Fitting Trainning");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,
			sizeof(LCD_DRAW), &sz);
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 7;
		test_disp.y = 1;
		test_disp.text_len =6;
		sprintf((B *)test_disp.text, "Buzzer");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,
			sizeof(LCD_DRAW), &sz);
		
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 0;
		test_disp.y = 2;
		test_disp.text_len = 14;
		sprintf((B *)test_disp.text, "Written By LXY");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,
			sizeof(LCD_DRAW), &sz);
		
		memset(&test_disp, 0, sizeof(LCD_DRAW));
		test_disp.x = 0;
		test_disp.y = 3;
		test_disp.text_len = 13;
		sprintf((B *)test_disp.text, "2008-10-07-PM");
		ercd = tk_swri_dev(g_scrdd, DN_LCDDRAW, (VP)&test_disp,
			sizeof(LCD_DRAW), &sz);
			
		tk_dly_tsk(100);
		

EXIT_SCRINIT:
	return ercd;
}



EXPORT void Buzzer_task(INT stacd, VP exinf)//蜂鸣器任务
{
	ER ercd;
	UB i;
	INT sz;
	UB buz_On;

	tm_putstring((B *)"start test_Buzzer \n");

	g_buzdd = -1;
	ercd = tk_opn_dev((UB *)"BUZZER\0", TD_UPDATE);	//设备打开
	if (ercd < 0)
	{
		sprintf((B *)g_buff, "tk_opn_dev() error [%#x]\n", ercd);
		tm_putstring(g_buff);
		goto EXIT_BUZINIT;
	}
	g_buzdd = ercd;

	buz_On = 1;
	
	ercd = tk_swri_dev(g_buzdd, DN_BUZONOFF, (VP)&buz_On, sizeof(UB),&sz); //写设备
	
	if (ercd < E_OK)
	{
		goto EXIT_BUZINIT;
	}

	i = 0;
	while (melo[i] != '.')																						//乐曲播放
	{
		ercd = tk_swri_dev(g_buzdd, DN_BUZPITCH, (VP)&melo[i],sizeof(UH), &sz);

		if (ercd < E_OK)
		{
			sprintf((B *)g_buff, "tk_swri_dev() error [%#x]\n", ercd);
			tm_putstring(g_buff);
			break;
		}
		tk_dly_tsk (g_delay / melo_dly[i++]);														//延迟
	}

EXIT_BUZINIT:
	buz_On = 0;
	ercd = tk_swri_dev(g_buzdd, DN_BUZONOFF, (VP)&buz_On, sizeof(UB),&sz);
		
	if (ercd < E_OK)
	{
		sprintf((B *)g_buff, "tk_swri_dev() error [%#x]\n", ercd);
		tm_putstring(g_buff);
	}
	if (g_buzdd > 0)
	{
		tk_cls_dev(g_buzdd, 0);
		g_buzdd = -1;
	}
	tm_putstring((B *)"Buzzer_task ended\n");
	ercd = -1;
	tk_exd_tsk();
	return;
}

⌨️ 快捷键说明

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