按下P32:
数码管从0变成10000
接着按P32:
再按P33:
其实功能1和功能4都可以实现这个功能
接着看虚拟键盘:
任务3:按下数字按键在数码管显示对应的按键数字!
例:按下按键0数码管显示0;
先完成显示任务:
u32 REC_NUM = 0;
// 任务3:按下数字按键在数码管显示对应的按键数字!
void TASK_3( void )
{
SEG7_ShowLong( REC_NUM ,10);
}
REC_NUM怎么得到?
看main.c里USB_CDC:
void main(void)
{
Sys_init(); //系统初始化
usb_init(); //USB CDC 接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init(); //定时器初始化
EA = 1; //IE |= 0X80;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
while(1)
{
if (bUsbOutReady) //如果接收到了数据
{
REC_NUM = UsbOutBuffer-48;
// USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done(); //
}
Task_Pro_Handler_Callback(); //执行功能函数
}
}
注意:
REC_NUM是在io.c里定义:
u32 REC_NUM = 0;
主函数中一定要extern u32 REC_NUM;
extern u32 REC_NUM;//此变量是在io.c建立,但本文件也要用,这里后面不能加=
接受的数据是第5个:
其实是第6个字节(从0开始数)
声明:
后调用:
static TASK_COMPONENTS Task_Comps[]=
{
//状态计数周期函数
// {0, 300, 300, LED0_Blink}, /* task 1 Period: 300ms */
// {0, 600, 600, LED1_Blink}, /* task 1 Period: 600ms */
// {0, 900, 900, LED2_Blink}, /* task 1 Period: 600ms */
{0, 10, 10, KEY_Task}, //10ms运行一次按键检测函数
{0, 500, 500, TASK_1}, /* task 1 Period: 500ms */
//{0, 500, 500, TASK_2}, /* task 1 Period: 500ms */
{0, 10, 10, TASK_3}, /* task 1 Period: 500ms */
};
这里还有个ASCII码的问题:
-48后就OK