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