《第十集 虚拟键盘LED和数码管》学习
虚拟键盘LED和数码管是Aiapp-ISP提供的功能,可以通过如下菜单打开。
工具很贴心提供了帮助信息
一、实验一:通过串口工具发送数码管协议指令显示数字
1、注册一个CDC_Task任务用于处理串口收发
- static TASK_COMPONENTS Task_Comps[]=
- {
- //状态 计数 周期 函数
- {0, 200, 200, CDC_Task},
- {0, 500, 500, wash_Task},
- {0, 10, 10, KEY_Task}, /* task 1 Period: 600ms */
- {0, 200, 200, matrix_Task},
- };
复制代码
2、CDC_Task任务处理函数
- void CDC_Task(void)
- {
- if (bUsbOutReady) //如果接收到了数据
- {
- USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
- usb_OUT_done(); //
- }
- }
复制代码
将USB配置为CDC虚拟串口,串口在收到数据后,原路返回。
3、按照数码管串口数据协议发送数据
功能1: | 在数码管上显示字符串 | 命令格式: | 37H 53H 45H 47H 53H 00H 00H 00H s1 s2 s3 s4 ... | 命令说明: |
| 第1~4字节: | 命令头 | 第5字节: | 功能选择(53H显示字符串) | 第6~8字节: | 保留 | 第9~n字节: | 字符的ASCII码,字符串必须以‘\0’结尾 | 示例: | 发送37H 53H 45H 47H 53H 00H 00H 00H 31H 32H 2EH 33H 00H |
| 在数码管上会显示“12.3” | 库函数声明: | int SEG7_ShowString(const char *fmt, ...); | 库函数调用: | SEG7_ShowString("%08lx", 0x1234abcdL); |
1)通过串口工具先MCU发送指令37H 53H 45H 47H 53H 00H 00H 00H 31H 32H 2EH 33H 00H,
2)MCU指令数据后,原路返回
3)窗口工具在收到指令数据后,判定为虚拟数码管驱动指令,解析后在虚拟数码管上显示12.3。
二、实验二:密码锁
完成如下:
1、任务注册
- static TASK_COMPONENTS Task_Comps[]=
- {
- //状态 计数 周期 函数
- {0, 200, 200, CDC_Task},
- {0, 500, 500, SEG7_Task},
- {0, 10, 10, KEY_Task}, /* task 1 Period: 600ms */
- };
复制代码
2、CDC_Task负责串口接收虚拟键盘指令
- void CDC_Task(void)
- {
- if (bUsbOutReady) //如果接收到了数据
- {
- //USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
- UART_NUM = UsbOutBuffer[5];
- UART_RX_FLAG=1;
- usb_OUT_done(); //
- }
- }
复制代码
3、SEG7_Task用于发送SEG显示指令
- void SEG7_Task(void)
- {
- u8 i;
- if(UART_RX_FLAG==1)
- {
- UART_RX_FLAG=0;
- SEG7_DATA[UART_CUR]=UART_NUM;
- UART_CUR++;
- if(UART_CUR==8){
- if(SEG7_DATA[0]==0x31&&SEG7_DATA[1]==0x32&&SEG7_DATA[2]==0x33&&SEG7_DATA[3]==0x34&&
- SEG7_DATA[4]==0x35&&SEG7_DATA[5]==0x36&&SEG7_DATA[6]==0x37&&SEG7_DATA[7]==0x38)
- {
- SEG7_status=2;
- }
- else{
- SEG7_status=0;
- for(i=0;i<8;i++)
- {
- SEG7_DATA[i]=' ';
- }
- }
- UART_CUR=0;
- }else
- {
- SEG7_status=1;
- }
-
-
- if(SEG7_status==0){ //状态1:显示“--------”
- SEG7_show_one_line_char('-');
- }else if(SEG7_status==1){ //状态2:显示密码
- SEG7_ShowString("%s",(char*)SEG7_DATA);
- }else if(SEG7_status==2){ //状态3:密码对了显示OPEN
- SEG7_show_open();
- }
- }else if(SEG7_status==0) SEG7_show_one_line_char('-');
- }
复制代码
4、显示OPEN
- void SEG7_show_open(void)
- {
- BYTE cod[8];
- cod[0] = 0x00;
- cod[1] = 0x00;
- cod[2] = 0x00;
- cod[3] = 0x00;
- cod[4] = 0x3F;
- cod[5] = 0x73;
- cod[6] = 0x79;
- cod[7] = 0x37;
- SEG7_ShowCode(cod);
-
- }
复制代码
5、显示一行指定字符
- void SEG7_show_one_line_char(u8 c)
- {
- u8 i;
- u8 str[8];
- for(i=0;i<8;i++) str[i]=c;
- SEG7_ShowString("%s",str);
- }
复制代码
|